指定账户恶意攻击—Web安全深度剖析(6)

发表于:2015-5-14 10:31

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:张炳帅    来源:51Testing软件测试网采编

分享:
  (51Testing软件测试网获电子工业出版社和作者授权连载本书部分章节。任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。)
  在查询时,输入XPath语句:
  //user[username/text()='admin' and password/text()='admin888'
  这条语句的意思是查询user节点下(任意位置)的username标签值为admin,并且password标签值也为admin。如果存在,则返回当前节点,Java代码如下:
public class XPathTest {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
SAXReader sax = new SAXReader();
Document document = sax.read(new File("c:\\AdminUser.xml"));
String xpath = "//user[username/text()='admin' and password/text()='admin888']";
List<Node> nodes = document.selectNodes(xpath);
for (Node node : nodes) {
if (node instanceof Element) {
Element element = (Element) node;
System.out.println("Id:" + element.attributeValue("id"));
System.out.println("UserName:"
+ element.elementText("username"));
System.out.println("PassWord:"
+ element.elementText("password"));
}
System.out.println();
}
}
}
  在执行后可以返回user节点,如图10-20所示。
  图10-20  XPath查询
  假设我们可以控制XPath语句,那么使用 or 1=1即可遍历全部节点,语句如下:
  //user[username/text()='admin' and password/text()='admin888' or 1=1
  //user[username/text()='admin' and password/text()='' or '1'='1']
  执行结果如图10-21所示。
  图10-21  XPath注入执行结果
  笔者建议,对于一些敏感信息,不要使用XML传输,如果一定要使用XML,建议尽量使用密文传输。
  XPath注入的预防是比较简单的,没有防御SQL注入那么复杂。最重要的是对预定义字符的转换,请参照"XML注入"内容中的预定义字符转换。
本文选自《Web安全深度剖析》第十章,本站经电子工业出版社和作者的授权。
版权声明:51Testing软件测试网获电子工业出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
密码找回逻辑漏洞—Web安全深度剖析(5)
33/3<123
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号