文件包含漏洞之2LFI-Labs中的的利用和绕过

一、环境搭建

1.环境描述

操作系统:win7
PHP集成环境:phpstudy
源码:LFI-Labs(去GitHub上下载)

将下载好的源码放在phpstudy的WWW目录下。

2.解决报错

如图所示,它会出现以下报错:
在这里插入图片描述
我找到的相关资料是:

这样的警告,只是一个因为PHP版本不同而产生的警告(NOTICE或者WARNING),而非错误(ERROR)。PHP中的变量在不声明的情况下使用 的时候,PHP4运行正常,但是到了PHP5环境下就会出现上述的警告或者提示。

解决措施:
在index.php的最上方添加error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
在这里插入图片描述

  • 这句代码的意思是:提示除 E_NOTICE 和 E_WARNING 之外的所有错误信息。
  • 因为根据它的报错提示可知,这里出现的是Notice和Warning,所以我们屏蔽这两个。
  • 但是这样的话,每一关的index.php文件都需要添加这句话,有点小麻烦;据说是可以直接修改配置文件php.ini文件的,但我怕把环境整坏了,谨慎一点,还是每一关的index.php文件都手动添加吧。

这个环境问题我折腾了三个多小时,是我太菜……
在这里插入图片描述
因为我首先按照之前搭Sqli-Labs、DVWA、pikachu等源码环境的方法,想要去修改它的配置文件去连接数据库;
但是发现它源码的配置文件是在docker里配置的,然后我的固化思维就是要找到在phpstudy的配置方法,但是我在网上没有找到关于LFI-Labs的搭建教程;
加上它又在报错,我钻牛角尖了就一直认为可能是因为它本身是要搭建在docker上的才导致的报错,然后还学习了一下如何在phpstudy中设置Apache虚拟主机;
………
反正尝试了很多方法,最后才想到从报错信息入手。
但是网上只有与第一行报错信息类似的报错的解决方法,然后我就又傻了,想着应该是要一个一个解决报错,但后两行报错又找不到相似的报错……
直到最后的时候才灵机一动举一反三,写出了最后的error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);。
在这里插入图片描述
虽然最后有收获,但时间成本太高了……归根到底还是我太菜了……
在这里插入图片描述


二、实验操作

1.LFI-1

这是最简单的文件包含漏洞。我们通过查看源码可知参数名是page:
在这里插入图片描述
然后我们选择查看phpinfo.php文件,因为包含这个文件的话,我们可以通过页面回显来判断知否执行成功:

?page=../../phpinfo.php

在这里插入图片描述

  • 这里使用的是相对路径,../ 是上一层目录的意思,当我们不知道phpinfo.php文件到底在哪一层的时候,就一层一层往上查。

2.LFI-2

查看原,可知参数名是library。
查看源码可以知道,它在我们传进去的参数前后拼接了内容:

  • 在PHP语言中,是以 . 来拼接字符串
  • 预定义的 $_GET 变量用于收集来自 method=“get” 的表单中的值

在这里插入图片描述
根据源码可以看出,后面多了个“.php”,所以我们的绕过方式有两种:
1.去掉后缀

?library=../../../phpinfo

2.00截断

?library=../../../phpinfo.php%00  

使用00截断时需要注意的几点

  • 1.定义在前一篇理论知识中已经讲过了:Windows在读文件名时,当遇到ASCII码0时会判断为读取结束,会自动停止对后面内容的读取。在URL中的形式是%00,在十六进制中是0x00。
  • 2.00截断必须满足两个条件:
    (1)php版本小于5.3.4。如果版本过高可以调低:
    在这里插入图片描述
    (2)php的magic_quotes_gpc为OFF状态
    在这里插入图片描述
  • 3.如果已经满足以上两个条件了依然执行不成功,有可能是浏览器过滤掉了%00。这时候可以用burpsuite抓包,发送到重发器里修改包。

然而我还是不能使用00截断的方法,实在不知道为啥了,有知道的师傅请留言指教一下~

3.LFI-3

这种报错一看就是设置了过滤机制:
在这里插入图片描述
查看源码:
在这里插入图片描述
意思就是如果最后的四个字符是“.php”的话就会报错。
我们可以在末尾添加点 . 或者斜杠点 /. :

?file=../../phpinfo.php.
?file=../../phpinfo.php/.

需要注意的一点是,这里没有页面回显,要通过查看页面源码来判断是否文件包含成功:
在这里插入图片描述

4.LFI-4

LFI-4其实和LFI-2一样,去掉后缀名就行了。

?class=../../../../../phpinfo

这里需要提一点的是源码中的addslashes() 函数:
在这里插入图片描述
它的作用是返回在预定义字符之前添加反斜杠的字符串:

  • 单引号(’)
  • 双引号(")
  • 反斜杠(\)
  • NULL

5.LFI-5

查看源码,发现会将 ../ 替换为空:
在这里插入图片描述
所以我们采取双写绕过的方式:

?file=..././..././....//phpinfo.php

6.LFI-6

第6关是采用的post方法,所以这里用burpsuite进行抓包改包:
在这里插入图片描述
不知道为什么会报错……

7.LFI-7~LFI-10

这后面几道其实和前面都一样了,只是传参方法是post而已。

8.LFI-11~12

这里稍微值得提一下的就是它这里用的参数不是fil而是stylepath:
在这里插入图片描述
11是post方法,12是get方法。

9.LFI-13

第13题和第5题其实是一样的。

10.LFI-14

第14题在第10题的基础上加入了11 12题的那个隐藏属性的参数stylepath。

11.包含日志文件

要通过日志文件进行文件包含漏洞的利用,前提是需要知道日志的存放路径才行。
这里展示的是日志的默认路径:
在这里插入图片描述
因为日志也会记录我们的请求,所以利用方式就是在访问的时候输入文件包含的PHP代码,它会被写入日志文件中:
在这里插入图片描述
从上图可以看到浏览器会对它进行编码,所以我们在 burpsuite中进行抓包改包:
在这里插入图片描述
执行的时候会被禁止:
在这里插入图片描述
但它其实已经被写进日志文件了,重新访问的时候就会出现phpinfo.php的页面:
在这里插入图片描述

三、总结:

1.这上面用到的绕过方式有:
00截断绕过
. 点、\. 斜杠点绕过
去掉后缀名绕过
双写绕过

2.后续操作:
我们绕过了以后,就可以包含一句话木马文件,甚至在包含 日志文件的时候直接写一句话木马,然后连接菜刀,就可以得到webshell了。

发布了80 篇原创文章 · 获赞 44 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u011785309/article/details/105181656
今日推荐