xml注入攻击总结
0x00 前言
之前的博客中,详细的讲了xxe(外部实体注入攻击),那是一种典型的xml注入攻击,但是xml注入利用的手法还有很多,下来详细的介绍一下xml的其他利用手法。
0x01 xml数据注入
xml数据注入,就是通过一些方式,将本来无法更改的xml中的数据更改。
我们假设一种情况,比如一个购物网站的某处xml代码如下:
1 |
|
假如这里phone中是电话号码,price中是价格,address中是地址。购物网站中,电话号码和地址是用户可控的,价格是用户不可控的。
但是如果用户的输入没有经过严格的过滤就写入xml,然后再提取出来使用时,我们就可以通过控制phone和address来更改price的值。
我们可以在phone中手动闭合前面的phone并构造注释符:
1 |
|
然后在address的值中闭合注释符,然后构造一个新的price,输入我们想要的价格:
1 |
|
拼接起来就是
1 |
|
然后注释符注释掉中间的部分,剩下的价格就变成了1元。
这就是xml数据注入攻击。
应对
- 严格过滤用户输入
0x02 xml样式表注入
在xml文件中允许使用样式表,这种样式表能够将已有的xml数据转换成新的xml数据,然后以html方式在web浏览器中展示。
假设xml引用了一个超链接,而链接内容用户可控
1 |
|
web服务器利用xstl语言将上面的xml转换成这样的html:
1 |
|
那么如果我们将test改为
1 |
|
那么很容易引发跨站脚本攻击。
如果引发了跨站脚本攻击,我们将onclick之后的内容改成我们xss盲打平台上的内容,就可以实施攻击了。
应对
- 严格过滤用户输入
- 敏感位置不能使用户可控
0x03 XPATH/XQuery注入
XPATH和XQuery是能够查询xml文档的语言,类似于结构化查询语言(sql),假设xml中包含账号密码:
1 |
|
系统正常情况下通过如下语句来查询xml数据,如:
1 |
|
其中jack是用户可控制的,如果我们修改以上语句为:
1 |
|
|是或运算符号,//*是查询所有,这样就会返回所有用户的数据。
0x04 xml实体循环ddos
如果我们可以控制xml,那么我们可以在xml中添加如下代码:
1 |
|
这个代码执行到最后一行,就会重复的执行前面的命令进入死循环,耗费服务器资源。
0x05 xml炸弹ddos
如果我们可以控制xml,那么我们可以在xml中添加如下代码:
1 |
|
当这个语句执行完的时候,原本的testdata就会经过指数式的增长,变成一个超大的字符串,极大的耗费服务器资源。
0x06 xml外部实体注入
xml外部实体注入在前面的博客中写过,可以参考:
http://uuzdaisuki.com/2018/05/03/%E6%B5%85%E8%B0%88XXE%E6%BC%8F%E6%B4%9E/
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!