在学习这里的时候,遇到两个坑!很坑我这样的新手!
第一个小坑:报错!
若开启dvwa后,使用文件包含模块练习的时候,出现下面这个错误,那么就要修改对应的php.ini配置文件了。
find / -name php.ini 查找php.ini文件
结果里面会出现好多个php.ini文件,我全部都进行修改。将里面的一个"allow_url_include"命令的"off"变成"on"即可。由于我缺少相关知识,我有的文件没有off,我也直接给其添加"=",使其变成"allow_url_include=on"这样的形式。
最后,重启。我关闭xampp在开启并没有效果,原因是服务没有重启,所以,简单点,重启虚拟机。一切就都重启了。当然,我猜测,用service命令应该也能达到效果,没尝试。
第二个小坑:抓不到包!
没错!在我开了burpsuit且设置正确,能抓任何网页的包的情况下,就是抓不到我自己的dvwa包!一开始以为是前面全部配置的时候搞错了,后来才发现,原来是火狐浏览器默认设置不给抓本地的包!
一万头C泥马在心中奔腾!进入火狐浏览器,在网络里面,修改代理,将“不允许以下地址使用代理”中的本地地址删除,就可以了。
当完成这两步之后,就可以利用dvwa进行文件包含漏洞的学习了。
前端的链接代码
先查看前端代码是如何显示的。这里明显是只要点击了,就会直接跳转到file1.php这个脚本上。而写过前端脚本,或者修改过前端脚本的人都清楚,这样的一个脚本,完全可以混合开发,显示前端的页面效果。
返过来,若是浏览器解析了其他的地址会如何?正常href的值都是http://开始的。这里我不懂为什么?page=file1.php就能跳转到新页面了,正常路径或者文件名字哪会以?开头。由于我没有前端开发经验,所以,我猜测,这个页面的文件名字就叫?page=file1.php,和参数没关系。只有这样,才想得通。于是,我做了一个简单的实验:
那么,问题来了,如果,这是这么回事,只要将链接中的这个名字改成其他的链接地址,是不是就可以跳转到其他页面了呢?
事实证明,我是错的。
所以,这里就存在另一种可能了。那就是,我不知道他是如何跳转到他指定的页面的,但是,可以肯定的是?page=后面的部分应该就是一个页面地址!
因此,通过修改后面的地址,将其变成百度,会发现成功的跳转到了百度!(只是这个百度不大正常)
这又有什么作用呢?假设,我给你一个正当的网址,引诱你去点开,虽然,网址的前面是正常的,但是,我将网址的后半部分进行手工修改,利用他的这个漏洞,使你一点击就跳转到了其他页面,这个页面可以是我们做好的钓鱼页面,那么,你会不会上当呢?
当然,这只是低级代码产生的漏洞。源代码如下:
可以明显看出,服务器只是获得了page的值,并没有对这个值进行检查,这才导致了漏洞的产生。看到了源代码,就可以解释为什么我们在前端的时候,看不懂他的这个跳转机制了。大概的流程应该是这样的:(个人理解,有不恰当的地方可以修改,我是新手)
用户点击了某个链接文字,这个链接并不是直接给出目的地址,而是在本页面创造了一个参数page,因为我们都知道url中,?号后面的都是代表参数的意思。所以,这就相当于你直接在url搜索栏,在原有地址后面加上?page=file1.php
为了验证自己的想法,我做了一个简单的实验:
的确和我想的一样。唯一一点不同的是,我估计前端开发人员的JavaScript代码应该对这个page参数做了一些设置,比如,获取页面中的这个参数,然后将其值再做一定的修改,最后提交给服务器。使得后端的PHP代码可以得到完整的地址。(我没有前端开发经验,但是,我认为这是我想的最靠谱的一种思路,因为在PHP代码中,有时候也为了安全,会把用户的输入删除再输入)
再结合上面的dvwa低级防御PHP代码,他并没有对收到的值做出一定的检测,所以,形成了这个基本的漏洞。