XPath 注入(仅供学习)

 

 

1.16  XPath 注入介绍

 

XPath 注入,攻击者利用 Web 应用对用户提交的参数过滤不严的漏洞,提交经过构造 的参数,这些参数能够被注入到 XPath 查询语句中,获得权限信息的访问权并在此基础上更 改这些信息。适用于使用 XML 文档存储数据的 Web 应用系统。和 SQL 注入非常相似,区 别在于 SQL 注入是用户的输入被注入到 SQL 语句中,而 XPath 注入是用户的输入注入到 XPath 查询语句中。

先来看一个简单的例子,下图是登录页面:

f23e2083e5ed452a9775e76fe1f47a55.png

 

 

 

输入登录信息:

c36f306485424e58913a70c21387e082.png

结果:

7ceb0df20d7c455cb979babd6e3dd5a4.png

这时返回的结果包含了很多敏感的信息,可以判断该应用采用XML 存储用户认证信息。 为便于分析,在服务器端将查询语句输出到用户的浏览器。

在用户名或密码处输入:999'] | * | user[@role='admin  ,另一个随便输入。

 

 

 

 

 

 

dd745157a9b642c084fd13d99d72fb48.png

结果:

18e7ec504842464fa105a8a5f8861be4.png

上 图 中 画 红 框 处 即 为 XPath  查 询 语 句 , 可 以 看 到 , 刚 才 输 入 的  999']  |  *  | user[@role='admin  已经成功的注入进去了!

现在来看看服务器端是如何处理的,index.asp 文件内容为:

22b5145e8e984c5e84fbb33bff919a97.png

 

 

 

acda891c490c4cba8c2bc16a54c98a1e.png

用于认证的 user.xml 内容为:

ea4e8025d5724a4d922b765a7be10d09.png

从 index.asp 中可以看到,查询语句为:

auth="//users/user[loginID/text()='"+uid+"' and password/text()='"+pwd+"']"

其含义是:选取这样的 user 节点,它的 loginID=用户提交的 uid 且 password=用户提交

的 pwd  ;

其中uid 和 pwd 变量未经任何检查和过滤,直接传递到查询语句中,上图中实际执行的 XPath    语 句 为 : //users/user[loginID/text()='999'    and    password/text()='999']    |     *    | user[@role='admin']  ,含义变成:选取 loginID=999 且 password=999 的用户 或者 选取 XML 所有节点 或者 选择 role 属性(如果有)为 admin 的用户。该例中逻辑运算的结果是选取 XML 所有节点,从而导致 XPath 注入的发生。

 

1.17  XPath 注入工具

 

关于 XPath 注入的扫描与验证 , 目前已经有工具软件支持 , 如 WebCruiser - Web Vulnerability Scanner (Web 安全漏洞扫描工具,可以扫描出网站存在 SQL 注入、跨 站脚本攻击、XPath 注入的页面,并且可以进一步进行 SQL 注入验证、跨站攻击验证、XPath

 

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SQL 注入示例: 假设我们有一个用户登录的功能,对应的查询语句为: ``` string sql = "SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'"; ``` 攻击者可以通过输入特殊字符,例如 ' 或者 ;,来构造恶意的查询语句,例如: ``` string username = "admin'; DROP TABLE users;--"; string password = "123456"; ``` 这样就会导致查询语句变成: ``` SELECT * FROM users WHERE username='admin'; DROP TABLE users;--' AND password='123456' ``` 这条语句会执行两个操作:首先查询用户名为 admin 的用户,然后删除 users 表。这就是 SQL 注入攻击的典型案例。 XPath 注入示例: 假设我们有一个使用 XPath 查询 XML 数据的功能,对应的查询语句为: ``` string xpath = "/users/user[@name='" + username + "' and @password='" + password + "']"; ``` 攻击者可以通过输入特殊字符,例如 ' 或者 ;,来构造恶意的查询语句,例如: ``` string username = "admin' or 1=1 or ''='"; string password = "123456"; ``` 这样就会导致查询语句变成: ``` /users/user[@name='admin' or 1=1 or ''=' and @password='123456'] ``` 这条语句会查询用户名为 admin 或者 1=1 或者 ''='',因为 1=1 和 ''='' 都是恒成立的。这就是 XPath 注入攻击的典型案例。 代码注入示例: 假设我们有一个执行用户输入的代码的功能,对应的代码为: ``` string code = Request.Params["code"]; object result = Eval(code); ``` 攻击者可以通过输入特殊字符,例如 ; 或者 &,来构造恶意的代码,例如: ``` string code = "System.Diagnostics.Process.Start(\"cmd.exe\",\"/c calc.exe\")"; ``` 这样就会导致执行了一个恶意的命令,打开计算器程序。这就是代码注入攻击的典型案例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyx-0607

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值