今天继续给大家介绍渗透测试相关知识,本文主要内容是xxe-lab靶场安装和简单php代码审计。
一、xxe-lab靶场简介
xxe-lab是一个使用java、python、php和C#四种编程语言开发的存在xxe漏洞的web小型靶场。利用该靶场可以简单研究xxe漏洞,并且对于这四种编程语言的xml解析器差异进行研究。
xxe-lab靶场代码托管在GitHub平台上,URL为:https://github.com/c0ny1/xxe-lab。页面如下所示:
二、php xxe-lab靶场安装
我们在GitHub上下载完成xxe-lab后,接下来直接将该靶场的php_xxe部分复制到本地搭建好的PHP环境下,就可以进行研究了。进入该目录后效果如下所示:
三、xxe-lab靶场PHP代码审计
接下来,我们简单来看一下xxe-lab靶场的靶场逻辑。
打开该目录下默认的index.html文件后,查看该文件源代码,可以看到在Login按钮下会触发javascript脚本的doLogin()函数,如下所示:
而JavaScript脚本的doLogin()函数如下所示:
从上图中可以看出,JavaScirpt脚本会将用户输入的username和password转化成xml格式的数据,并且利用ajax的方法提交,提交时xml格式的数据被当作Post数据包的内容进行提交。
来到ajax的目标doLogin.php文件,该文件源码如下所示:
在该PHP文件中,主要是接收POST请求的内容,并将其转化为XML对象,然后提取XML对象中的username和password字段。然后比对username和password是否相等。注意,在这个靶场中if else语句逻辑似乎出现了错误,相等时result返回的结果应该是0,而不相等时result返回的结果应该是1。
在上述代码中,关键函数如下:
1、libxml_disable_entity_loader(False)
这段代码意思是设置允许PHP加载外部实体,这也是本靶场的漏洞产生主要原因。在生产环境下,需要将这里的False改为True,即可避免产生XXE漏洞。
2、loadXML()
该函数可以将一个输入的字符串转化为DOMDocument对象。
3、simplexml_import_dom
该函数可以把DOM节点转化为SimpleXMLElement对象。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200