关数(通关特征)
PASS-11(双写后缀名绕过)
关卡分析:
在上传模块,有的代码会把黑名单的后缀名替换成空,例如 a.php 会把 php 替换成空,但是可以使用双写绕过例如 asaspp,pphphp,即可绕过上传。
同样是黑名单过滤。str_ireplace 对上传的后缀名是黑名单内的字符串转换成空。
绕过演示:
1.创建shell.pphphp,上传文件。
2.右键查看图片详情。
解析成功!
PASS-12(目录可控%00截断绕过)
关卡分析:
文件上传%00绕过是指攻击者在文件上传时,在文件名后面添加%00字符,从而绕过服务器端的文件 类型、拓展名以及大小限制,成功上传恶意文件到服务器端,从而进行攻击的一种技巧。
00截断时操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时, 都是以0x00作为字符串的结尾,操作系统在识别字符串时,当读取道0x00字符时,就认为读取到了一个 字符串的结束符号,因此,我们可以通过修改数据包,插入0x00字符的方式,达到字符串截断的目的。
00截断通常时绕过白名单的限制。
条件
php版本小于5.3.29 magic_quotes_gpc=Off
代码分析
代码中使用白名单限制上传的文件后缀名,只允许指定的图片格式。但是$_GET['save_path']服务器接受客户端的值,这个值可被客户端修改。所以会留下安全问题;
绕过演示:
将php版本改为小于5.3.29
将magic_quotes_gpc=Off
上传shell.php文件
抓包,将shell.php后加上%00,将shell.php改为shell.jpg
右键查看图片详情
注意要将后面奇怪的字符删掉。
解析成功!
PASS-13(目录可控%00截断绕过-hex修改)
关卡分析:
原理同12关相同,只是需要在hex中修改相关字符。
关卡代码同样是白名单限制后缀名,$_POST['save_path']是接收客户端提交的值,客户端可任意修改。 所以会产生安全漏洞。
POST 下直接注入%00 是不行的,需要把%00 解码变成空白符,截断才有效。才能把目录截断成文件名。
绕过演示:
抓包
选择Hex中修改,将#的Hex字符改为00。
查看图片访问。
http://127.0.0.1/BC/upload-labs-master/upload/shell.php/2620230801185115.jpg
PASS-14(图片马+文件包含/GIF89A)
关卡分析:
文件头代表了文件是那种类型,我们上传的文件内容如果是只有php代码,那么程序在对我们的文件头 部进行检查时,如果发现没有允许上传文件类型的文件头,就会对我们上传文件进行拦截。
什么是文件头?
文件头是位于文件开头的一段承担一定任务的数据,一般都在开头的部分,不同得文件,文件头也不同,如:JPG/PNG。
常见的文件头:
○ JPEG (jpg),文件头:FFD8FF
○ PNG (png),文件头:89504E47
○ GIF (gif),文件头:47494638
○ TIFF (tif),文件头:49492A00
○ Windows Bitmap (bmp),文件头:424D
绕过演示:
在相关文件下,我们将图片123.jpg和1.php进行合并,生成一个shell.php文件。copy tupian.jpg/b + shell.php/a ma.png,直接上传。
上传图片马shell.jpg。
这里图片马不能直接解析,我们使用文件包含进行解析。
复制upload以及后面的内容。
点击关卡中的文件包含漏洞。
访问图片,解析成功!
PASS-15(图片马+文件包含)
关卡分析:
白名单的方式过滤,getimagesize 是获取图片的大小,如果头文件不是图片会报错直接可以用图片马绕过检测。
绕过演示:
攻击方法同14关一样。
http://127.0.0.1/BC/upload-labs-master/include.php?file=upload/6020230801191056.png
(谢谢大家!欢迎提出批评和建议!你的支持是我持续更新的巨大动力!)