找工作,招人才,上智慧登封招聘网

i春秋首篇XPATH注入教学~

小猴子2 · 2017-4-1 13:59:57 · 3007162 次点击
内容来源:i春秋社区 欢迎关注i春秋公众号(微信搜索:icqedu)了解更多技术干货,未经许可禁止转载 前 言 本文属i春秋原创奖励计划,未经许可禁止转载!在我春秋论坛搜了下xpath注入,并没有搜出教程,然后花了几天时间学了下,现在做个教程,有什么不对之处,还麻烦各位大佬批评指正。 i春秋首篇XPATH注入教学~7406 作者:小猴子2 帖子ID:223475 学习本教程应具备的基础:1、简单了解html语言、写过简单网页(黑页也算)2、简单了解xml3、简单了解xpath的语法(下面也会提及)4、了解sql注入的原理除了第四个,这其他都能在w3c菜鸟学院学习: 这里需要注意两点:1、xpath注入和sql注入不太一样。2、Xpath注入更像拼字游戏。 再往下看,我就认为你具备上面的基础了,多余的东西不会赘述。 正文 xml语言又叫可扩展标记语言,被设计用来传输和存储数据 一个简单的实例: Tove Jani Reminder Don't forget me this weekend! 可以理解为,这玩意就是个储存数据的。 而xpath就是在xml文件里找东西的。可以这么理解,xml就是个类似数据库的东西而xpath实际上就是数据库查询!数据库查询?敏感吗?既然是查询,是不是可以搞事情?没错,的确可以搞事情。 1 初探门路 XPath注入攻击是指利用XPath 解析器的松散输入和容错特性,能够在 URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。XPath注入发生在当站点使用用户输入的信息来构造请求以获取XML数据。攻击者对站点发送经过特殊构造的信息来探究站点使用的XML是如何构造的,从而进一步获取正常途径下无法获取的数据。当XML数据被用作账户验证时,攻击者还可以提升他的权限。 上面的文绉绉话不看也罢23333 我们来看看bwapp上的第一个xpath注入: i春秋首篇XPATH注入教学~5651 作者:小猴子2 帖子ID:223475 这个登录界面访问权限是通过xpath去读取xml文件来实现的。换句话说,你输入账号密码,他就把xml文件里的合法账号密码拿出来和你填写的进行比对,如果一致就通过。 如果他对输入没有进行过滤的话用sql注入的万能钥匙是能通过的! i春秋首篇XPATH注入教学~4820 作者:小猴子2 帖子ID:223475 通过这个我们了解到,xpath和sql注入还是有点像的,起码or能用。 2 进阶探索 看一道xpath注入的ctf题目: i春秋首篇XPATH注入教学~9632 作者:小猴子2 帖子ID:223475 在cookie中找到提示信息: i春秋首篇XPATH注入教学~2963 作者:小猴子2 帖子ID:223475 于是我们就想到了xpath注入: i春秋首篇XPATH注入教学~1954 作者:小猴子2 帖子ID:223475 用 user1’ or ‘’=’这样爆出所有user查询结果,并不能找到flag看来只能拿出xpath特有的注入手段了(这也是和sql注入最大的区分)直接看exp:xmltest.php?user=user1'] | //* | //*[' i春秋首篇XPATH注入教学~3552 作者:小猴子2 帖子ID:223475 好了,这一部分只需要了解xpath注入和sql注入不是一个东西就行。下面开始进一步教学! 3 什么是XPath XPath 是一门在 XML 文档中查找信息的语言。XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。上面文绉绉的文字不看也罢,来个例子你们就懂了:这边有个存放分数的xml文件: english 60 chinese 70 qwer123 english 24 chinese 34 woaichishi english 100 chinese 100 vk123 查询分数的php是: xpath($en_scr); $ch_qu = $xml -> xpath($ch_scr); foreach ($en_qu as $key => $value) { echo $user.': english is '.$value; } foreach ($ch_qu as $key => $value) { echo ' '.'chinese is '.$value; } }else{ echo 'only have three user: vk, tom, helen.'; } } ?> 这里,php用simplexml_load_file这个函数来访问那个存分数的xml文件然后用xpath语法去查询数据。会php语言的慢慢看(重要!可加深理解),不会的跳过,先看效果: i春秋首篇XPATH注入教学~6013 作者:小猴子2 帖子ID:223475 他说只有三个用户,那我们来查查helen的分数吧 i春秋首篇XPATH注入教学~1240 作者:小猴子2 帖子ID:223475 这么辣鸡,两科都不及格那vk呢? i春秋首篇XPATH注入教学~6955 作者:小猴子2 帖子ID:223475 果然是学霸,厉害了。好了,反过来看看代码,它是怎么实现对xml文件的查询的? i春秋首篇XPATH注入教学~5116 作者:小猴子2 帖子ID:223475 图中框起来的是重点,这个必须搞懂!!这个就相当于Sql中的语句,这就是xpath路径选取xml节点的语句Xpath语法详细教程:这里不再废话,直接解释查询语句//peo 匹配到所有peo节点 i春秋首篇XPATH注入教学~9484 作者:小猴子2 帖子ID:223475 这节点不止一个,到底要哪个呢?[@name='{$user}'] 接收到用户名字,来查询相应的节点(就是刚才的helen,vk)/subject 刚才peo节点下的subject节点这时候问题又来了,subject节点不止一个,哪个呢?[contains(foo, 'english')] contains函数,第一个参数给出节点名,第二个写字符串意思就是,匹配出他的foo子节点中,信息含有english的那个/score 已经找到相应的subject了,然后就是找分数了。Score就是存放分数的节点: i春秋首篇XPATH注入教学~9942 作者:小猴子2 帖子ID:223475 这样就能实现从xml文件中查询相应数据了! 好了,前面讲了那么多,就是为了让大家从原理上理解xpath注入,而不是简单的拿出exp去试。如果你一步一步跟下来的话,再继续往下看,如果你觉得前面没用,跳过了,请回去看!XPath注入攻击是指利用XPath 解析器的松散输入和容错特性而攻击的目标不是数据库,而是xml文件。危害就是能看到xml文件里所有的数据,再无隐私可言! 4 开始进行XPath注入 我们根本不知道xml文件里有什么节点,所以一般用 //* 来匹配所有节点。这样一下子查出所有的信息!Exp:score.php?user=vk'] | //* | //*[' i春秋首篇XPATH注入教学~5367 作者:小猴子2 帖子ID:223475 这样就把里面的信息全部查了出来,密码什么的,都知道了。为什么说xpath更像拼字游戏呢?就在这了,你得完全拼上本来的查询语句,不然就会出错,而且这个还没有注释,不能像sql注入一样,用注释杀掉后面语句首先单引号闭合前面,] 也是闭合前面| 这个表示分别执行,有点像union select,这个符号前后的路径都去查询//* 前面提到过,匹配所有节点|//*[‘ 闭合后面一定要自己搭环境起来看看哦,里面有不少坑的。比如最后的闭合语句,一开始我用[‘ 这样看上去的确像是闭合语句,但是 | 符号是分别执行,也就是前后都要是合法的路径语法。直接[‘ 的话,就变成://peo[@name=' vk'] | //* | [' ']/subject[contains(foo, 'english')]/score这里被两个 | 分隔开,分别执行查询三句://peo[@name=' vk'] //* [' ']/subject[contains(foo, 'english')]/score最后一个明显是不合法的,因此会出错! i春秋首篇XPATH注入教学~9050 作者:小猴子2 帖子ID:223475 这在黑盒测试的时候,就更需要我们的耐心了。 5 完整演示XPath注入黑盒测试 再来看看bwapp的第二个xpath注入 i春秋首篇XPATH注入教学~6655 作者:小猴子2 帖子ID:223475 这个web应用是,你给出类型,他查找这个类型的电影,给你呈现出来。这里我选了action动作片,他告诉我图中结果。看url就知道,这里是通过get来传参的。简单测试下: i春秋首篇XPATH注入教学~7002 作者:小猴子2 帖子ID:223475 语句:genre=action' and ''='&action=search没有回显,(正常应该有回显)看样子是接收参数的位置问题,不是任何位置都可以接受and or(比如在函数里)那我们试试:genre=action' | //* | ' &action=search i春秋首篇XPATH注入教学~4991 作者:小猴子2 帖子ID:223475 继续:genre=action'] | //* | //*[' &action=search i春秋首篇XPATH注入教学~6482 作者:小猴子2 帖子ID:223475 还是不行,不要灰心,拼字游戏就是如此。我们来看看一个查询语句://peo[@name='{$user}']/subject[contains(foo, 'chinese')]/score 这是之前查分数的XPath这里接收参数的位置是在中括号里面,用来挑选某个节点属性因此用中括号闭合成功,这里不行会不会是哪个函数里面接收参数?那就是括号! i春秋首篇XPATH注入教学~7983 作者:小猴子2 帖子ID:223475 把中括号换成圆括号也不行。就在我郁闷的时候,一拍脑袋,函数一般是放在中括号里,用来增加查询条件的这有点像where那么试试:genre=action')] | //* | //*[(' &action=search i春秋首篇XPATH注入教学~7899 作者:小猴子2 帖子ID:223475 23333成功了。 6 XPath注入的危害 sql注入危害大家都懂,泄露数据,串改数据,服务器沦陷。XPath注入危害稍微小一点,也是泄露数据,绕过权限限制,其实光泄露数据就够要命的了。 7 防御方法 一句话,过滤。把 ‘ “ and or 等等全部过滤了就差不多了(为什么说是差不多呢?鬼知道有什么0day能绕过,这又不像php的数据库语句,可以预编译) 结束语 蛋总说sql注入已经饱和了,我就来个XPath注入23333,希望大家有所收获,实战中遇到的比较少,但也不是没有!乌云就有实例,ctf可能会出现比较多。除了上面的姿势,貌似还有别的,本人会继续学习消化,给大家带来新的教程,也欢迎大佬批评指正。
本文属i春秋原创奖励计划,未经许可禁止转载!
参与活动在i春秋社区发帖并注明参与奖励计划即可!
个人签名:
一天不看智慧登封,都不知道登封发生了什么。。。
快来抢沙发
0 条回复  
您需要登录后才可以回帖 登录
返回顶部