一、文件上传防御手段及绕过手段总结
文件上传漏洞原理:对文件上传路径变量过滤不严,并且对用户上传的文件后缀以及文件类型限制不严,攻击者可通过 Web 访问的目录上传任意文件,包括网站后门文件(webshell),进而远程控制网站服务器
防御措施:
1、上传文件的存储位置与服务器分离;
2、上传的文件重新修改文件名、文件后缀名;(如何确定后缀名防止修改:前端传递,后端再校验)
3、文件上传的上传保存路径根据业务进行分离;下载时根据重新生成的文件名进行下载;
绕过手段:(burpsuite)
1、对于JS前端验证:
Burpsuite剔除响应JS、浏览器审计工具剔除JS、手工删除JS代码(复制网站源代码将他复制打记事本中,文件后缀名更改为html,打开找到JS代码将其删除)
隐患:禁用了js代码,如果在实战中,网站的一些正常功能可能无法显示
2、对于定义不完整的黑名单验证:
2.1、大小写绕过:
修改文件名改变大小写来进行上传
Windows系统下,对于文件名中的大小写不敏感
Linux系统下,对于文件名中的大小写敏感
如.php变为.PhP
2.2、空格绕过:
Windows系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格
如:1.php -> "1.php "
2.3、.号绕过:
Windows系统下,文件后缀最后一个点会被自动去除
如 .php -> .php.
2.4、特殊符号绕过:
Windows ::$DATA绕过只能用于Windows,Windows下NTFS文件系统有一个特性,即NTFS文件系统在存储数据流的一个属性DATA时,是请求a.php本身的数据
如.php->.php::$DATA
2.5、路径拼接绕过:
路径拼接的是处理后的文件名,导致可以利用类似.php. .
(两个点号之间有一个空格)绕过,程序先是删除一个点,再删除一个空格经过处理后,文件名变成.php.
,即可绕过
如.php->.php. .
2.6、双写绕过
代码编写过程中,只对黑名单中的内容进行空替换,因为只替换一次所以造成双写绕过
如.php -> .phpphp
二、文件上传常用一句话木马
asp: <%eval request("heroes")%>
php: <?php @eval($_POST['cmd']);?>
aspx: <%@Page Language="Jscript"%>
<%eval(Request.Item["value"])%>
三、三种webshell管理工具的使用方法(演示使用该工具连接webshell及抓取流量包进行分析特征)
1、蚁剑
一句话木马
开启代理
蚁剑测试连接
触发木马,bp抓包
解码
流量特征:
静态特征:蚁剑中php使用assert、eval执行;asp只有eval执行;在jsp使用的是Java类加载(ClassLoader),同时会带有base64编码解码等字符特征。
动态特征:每个请求体都存在以@ini_set("display_errors","0");@set_time_limit(0)开头。
并且响应体的返回结果是base64编码发混淆字符,格式为:随机数 结果 随机数
。
2、哥斯拉
生成木马
设置代理
连接测试
bp抓包
流量特征:
静态特征:在默认脚本编码的情况下,jsp会出现xc、pass字符和Java反射(ClassLoader,getClass().getClassLoader()),base64加解码等特征。
动态特征: 响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。
3、冰蝎
与上同理,连接木马
流量特征:
webshell连接密码的MD5的前16位,默认连接密码是"rebeyond"(即密钥是md5('rebeyond')[0:16]=e45e329feb5d925b)。进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。因此当发现一个ip的请求头中的user-agent在频繁变换,就可能是冰蝎。
3.0连接jsp的webshell的请求数据包中的content-type字段常见为application/octet-stream。
四、 文件上传无回显,查找webshell地址的方法
1、bp拦截分析请求和响应
2、查看前端源代码,可能有路径信息
3、查看服务器日志,与上传路径有关的请求和响应,报错
4、webshell扫描工具,D盾等
五、upload-labs靶场通关第6-第10关
第六关:
看源代码
可以大小写绕过