.1XPath注入破解介绍
电脑网页通过XPath注入,攻击者利用Web应用对用户提交的参数过滤不严的漏洞破解,提交经过构造的参数,这些参数能够被注入到电脑网页通过XPath注入查询语句中dnf,获得权限信息的访问权并在此基础上更改这些信息。适用于使用XML文档存储数据的Web应用系统。和SQL注入非常相似,区别在于SQL注入是用户的输入被注入到SQL语句中,而电脑网页通过XPath注入是用户的输入注入到XPath查询语句中。
先来看一个简单的例子,下图是登录页面:电脑网页通过XPath注入
输入登录信息:
电脑网页通过XPath注入
结果:
电脑网页通过XPath注入
电脑网页通过XPath注入
这时返回的结果包含了很多敏感的信息,可以判断该应用采用XML存储用户认证信息。
为便于分析,在服务器端将查询语句输出到用户的浏览器。
在用户名或密码处输入:999'] | * | user[@role='admin ,另一个随便输入。
电脑网页通过XPath注入
电脑网页通过XPath注入
结果:
电脑网页通过XPath注入
电脑网页通过XPath注入
上图中画红框处即为XPath查询语句,可以看到,刚才输入的 999'] | * | user[@role='admin 已经成功的注入进去了!
现在来看看服务器端是如何处理的,index.asp文件内容为:
<script language="javascript" runat="server">
Response.write("<html><body>");
uid=Request.form("uid");
pwd=Request.form("pwd");
Response.write("<form method=\"POST\">Username:<input name=\"uid\" size=\"20\"/><br>Password:<input name=\"pwd\" size=\"20\"/><input type=\"submit\" value=\"Login\"/></form>");
var xmlDom=new ActiveXObject("Microsoft.XMLDOM");
xmlDom.async="false";
xmlDom.load("/Inetpub/wwwroot/xpath/user.xml");
var auth="//users/user[loginID/text()='"+uid+"' and password/text()='"+pwd+"']";
Response.write(auth);
var UserObj=xmlDom.selectNodes(auth);
if(UserObj.length>0) Response.write("<br><br>Login OK!");
else Response.write("Please Input Correct Username and Password!");
Response.write(UserObj.Xml);
for(var i=0;i<UserObj.length;i++)
{
Response.write("<xmp>");
Response.write(UserObj(i).xml);
Response.write("</xmp>");
}
Response.write("</body></html>");
</script>
用于认证的user.xml内容为:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<firstname>Ben</firstname>
<lastname>Elmore</lastname>
<loginID>abc</loginID>
<password>test123</password>
</user>
<user>
<firstname>Shlomy</firstname>
<lastname>Gantz</lastname>
<loginID>xyz</loginID>
<password>123test</password>
</user>
</users>
从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注入的发生。
弈安传媒科技微课堂,每天分享财经资讯,计算机技术知识,人生感悟,创业指导以及各种专业技
术知识资料学习交流.移动学习平台、知识分享平台。随时随地的学习,如果你喜欢成长,这里
你不容错过的地方.弈安传媒科技培训关注:关注自己成长,分享内容,分享自己的技术,成就未
来.
[弈安传媒科技提升自己的平台]请关注:头条号及公众号 弈安传媒科技
TML 服务器控件是服务器可理解的 HTML 标签。
HTML 服务器控件
ASP.NET 文件中的 HTML 元素,默认是作为文本进行处理的。要想让这些元素可编程,需向 HTML 元素中添加 runat="server" 属性。这个属性表示,该元素将被作为服务器控件进行处理。
注释:所有 HTML 服务器控件必须位于带有 runat="server" 属性的 <form> 标签内!
注释:ASP.NET 要求所有 HTML 元素必须正确关闭和正确嵌套。
HTML 服务器控件 | 描述 |
---|---|
HtmlAnchor | 控制 <a> HTML 元素 |
HtmlButton | 控制 <button> HTML 元素 |
HtmlForm | 控制 <form> HTML 元素 |
HtmlGeneric | 控制其他未被具体的 HTML 服务器控件规定的 HTML 元素,比如 <body>、<div>、<span> 等。 |
HtmlImage | 控制 <image> HTML 元素 |
HtmlInputButton | 控制 <input type="button">、<input type="submit"> 和 <input type="reset"> HTML 元素 |
HtmlInputCheckBox | 控制 <input type="checkbox"> HTML 元素 |
HtmlInputFile | 控制 <input type="file"> HTML 元素 |
HtmlInputHidden | 控制 <input type="hidden"> HTML 元素 |
HtmlInputImage | 控制 <input type="image"> HTML 元素 |
HtmlInputRadioButton | 控制 <input type="radio"> HTML 元素 |
HtmlInputText | 控制 <input type="text"> 和 <input type="password"> HTML 元素 |
HtmlSelect | 控制 <select> HTML 元素 |
HtmlTable | 控制 <table> HTML 元素 |
HtmlTableCell | 控制 <td> 和 <th> HTML 元素 |
HtmlTableRow | 控制 <tr> HTML 元素 |
HtmlTextArea | 控制 <textarea> HTML 元素 |
务器控件是服务器可理解的标签。
经典 ASP 的局限性
下面列出的代码是从上一章中复制的:
<html>
<body bgcolor="yellow">
<center>
<h2>Hello W3CSchool.cc!</h2>
<p><%Response.Write(now())%></p>
</center>
</body>
</html>
*请认真填写需求信息,我们会在24小时内与您取得联系。