在bwapp中,对应的xPath注入bug是XML/XPathInjection (Search),这个漏洞的引用文件是xmli_2.php,直接先看下这份文件的源码:
首先从get请求中接收到表单的值,然后$genre送入到xmli中,进行一次字符过滤,由于这里使用的安全等级为最低级,所以没有进行任何过滤就返回了data。
接收到返回的data值之后,php文件加载xml文件,使用simplexml_load_file()函数,将xml文件的路径作为参数传值给该函数,将结果返回给$xml使用$xml中的xpath方法进行查询,参数为查询的路径,在一篇基础语法的讲解中就有,但是这次需要补充一个contains函数,这是一个php为xpath提供的字符串查找函数,具体的使用为contains(st-ring1,string2),表示如果 string1 包含 string2,则返回 true,否则返回 false。
如果查询到结果返回查询得到信息,进行遍历输出,如果没有查询到,那么输出提示信息。
php文件的内容说完了,接着看一下xml文件的结构。
根节点是heroes,接着是hero元素节点,每个hreo元素节点又拥有id、login、pas-sword、secret、movie、genre 6个子节点。
看下php文件中xpath的查询语句:
//hero[contains(genre,’$genre’)]/movie
这句xpath查询语句的意思是,如果genre节点的值中包含$genre变量的值,那么就把这些符合条件的节点的movie值输出到页面中,但是看不到login和password,看不到就去构造,构造xpath注入语句需要xpath查询语句中的一个“|”并查符号,返回并查集。
构造后的语句如下:
//hero[contains(genre,’22222′)] |//hero/login| a[contains(‘0′,’0’)]/movie
解释一下这句语句的意思,查询genre中有无22222字符串,无,查询所有hreo节点下login节点的值,有,返回结果集,查询a节点中存在后面的信息,a节点都不存在,查什么。
在url中?genre后面直接加22222′)] |//hero/login| a[contains(‘0’,’0,返回结果,注入成功。
来源:freebuf.com 2019-08-13 18:24:01 by: 水木逸轩con
请登录后发表评论
注册