[7]-文件上传漏洞-绕过
一、后缀名绕过
简单的漏洞实际环境基本很少遇到,更多在于我们要去了解文件上传这个部分的代码开发者怎样去写,以及写的过程中存在的缺陷,从而尝试绕过
1.初探绕过----实际测试
使用
bwapp,选择Unrestricted File upload等级选择medium先测试
shell.php
测试最简单的文件上传漏洞
此时返回错误信息,凡是以asp, aspx, dll, exe, jsp, php为后缀的均被拦截,采用的属于黑名单模式。尝试修改
webshell文件后缀,再次上传
修改shell.php为shell.php3测试上传,发现成功上传
测试能否作为
webshell成功执行指令,发现能成功执行指令,即能作为webshell执行php指令
再次修改
webshell文件后缀,上传测试
修改shell.php3为shell.php30测试上传,发现文件成功上传,且能成功访问。但将文件内容直接打印回显给浏览器,这说明服务器将该文件视为单纯的文本文件,故此种方式不能执行php代码
测试结果如预测一致,php指令并没有被成功执行
思考:
为什么后缀为php3可以,而php30不可以?抽丝剥茧,了解漏洞本质原因
关注漏洞本身成因,方能举一反三
2.Docker基础
虚拟化容器技术、与虚拟机较相似,无可视
Docker交互
通过-it指令,反弹shell,方能如操作Linux服务器一样操作docker内部文件,从而便于定位漏洞原因进入docker容器
查看所启动的容器,(二者差别详解参考:https://segmentfault.com/q/1010000017477906)# 看启动容器有哪些---最新容器管理命令---推荐---因一致性同image docker container list -a # 同时也可以利用---旧命令---二者均能使用 docker ps -a指定doekr id,通过以下命令启动bash进入docker内调试
# 进入docker内部,7732277baf1f为上述获取的container id docker exec -it 7732277baf1f bash详细如下:
二、绕过原理
探究解析原理,需要确定托管web服务的重要服务器是什么,然后再确定其配置项,找到语言解析模块,分析漏洞。
1.查看中间件配置文件
确定web中间件
通过网络连接以找到托管web服务的主要服务器,执行:netstat -antp | grep 80确定80端口运行的服务,中间件为apache2,也就是
apache2决定了什么类型的文件,应该被什么语句去解析
查看apache2主配置文件,确定语言解析模块位置
apache2的主配置文件是/etc/apache2下的apache2.conf文件,查看该文件,从而确定该配置文件如何指定我们的解析器工作的,这里可以使用cat、vi、vim等命令查看,找到语言解析模块位置。
注:对于webserver(web中间件)而言,它并不知道后端所用的语言,但往往对所有预言都有解析能力。webserver和后端语言的连接通过它所加载的语言解析器模块,只有进入对于语言解析模块文件,才能确定最终漏洞成因。找到php配置文件,并查看配置
通过apache2.conf文件确定了语言解析模块所在位置为/etc/apache2/mods-enabled(文件中写的是相对目录,这里是绝对目录)。因为上传的webshell为php语句,故需要查看php语言解析模块配置,即查看**php5.conf**
在php5.conf文件中看到,只有以php、php3、php4、php5、pht、phtml为后缀的文件才能被php解析器解析,这里也就解释了,为什么前文绕过时,shell.php3可以作为webshell,而shell.php30不可以。总结
未能解析原因:php5.comf并没有指定正则表达式去匹配所上传的php30这个文件类型,故.php30只能被解析为一个正常文档
2.漏洞成因探究思路
- 确定对应端口webserver
- 确定webserver服务器配置文件,找到语言解析模块
- 查看对应语言配置文件,确定成因以及利用原理
- 举一反三,重点学习对于漏洞的探索、思考方式
本文来自博客园,作者:缪白(Miubai),转载请注明原文链接:https://www.cnblogs.com/Miubai-blog/articles/17065999.html










浙公网安备 33010602011771号