文件上传防御手段和绕过方式
文件上传漏洞是指网站或应用程序中存在的一种安全漏洞,攻击者可以利用该漏洞向服务器上传恶意文件。通过文件上传漏洞,攻击者可以上传包含恶意代码的文件,如Web shell、恶意脚本、恶意软件等,从而获取服务器的控制权或执行恶意操作。这可能导致服务器被入侵、敏感数据泄露、服务拒绝等安全问题。通常,攻击者利用文件上传漏洞来执行远程代码,控制服务器或网站,进而实施更广泛的攻击。
防御手段有:
1、文件类型检查:白名单黑名单设置
2、文件大小的限制:避免太大的文件把服务器资源耗尽
3、文件扩展名检查:避免文件名使用特殊字符或恶意代码,可以对文件名进行过滤或重命名
4、文件内容检查
5、文件存储路径隔离:防止存储的文件被恶意执行
6、文件权限设置
7、前端JS检测
8、MIME检测
文件上传漏洞绕过方式:
1.大/双写文件名绕过
2.恶意文件内容以多段拼凑/拆解的形式组合
3.目录穿越到可执行目录
4.修改MIME类型
5.大小写绕过
6.图片木马
7.文件包含绕过
8.文件竞争绕过
常用一句话木马
1、php:
<?php @eval($_POST['pass']);?>
2、asp
<%eval request ("pass")%>
3、aspx
<%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>
常用webshell管理工具的使用
Antsword
小皮建立一个测试站点
写一个小马
放到测试站点的根目录下
尝试连接测试站点成功了,就直接添加
双击就可以成功连接了
先退出连接,设置蚁剑的代理,与burpsuite的要相同,打开burpsuite准备抓包
开启拦截后,双击连接就可以抓到了
查看一下这个包
发送给repeater,将他发送,观察响应包
特征:使用URL解编码;响应包是明文;有@ini_set()函数的为强特征
Godzilla
管理—>生成,类型选择php
将生成的文件放在测试站点的根目录下
测试链接一下,成功
进入编辑后,修改代理为127.0.0.1:8080
开启burpsuite拦截,点击测试链接,此时可以抓到三个包
特征:会响应三次,第一个包不带cookie,但是第一次连接后,后面的包都会带上生成的cookie,第二个、第三个都只有很少的数据
显示user-agent,accept,弱特征
Behinder
生成协议
添加连接之后这样就是成功连接了
先断开连接,打开burpsuite拦截
观察抓到的包
特征:Accept字段
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
content-type字段
Content-type: Application/x-www-form-urlencoded
文件上传无回显如何找到webshell的地址
1. 字典爆破
- 文件上传后,文件有时会直接以文件名的形式放在专属的upload目录中,如
/upload/1.php
,或者加上当前日期,如/upload/2024-01-01/1.php
。可以使用字典工具来爆破可能的文件路径。- 确定可能的文件上传目录。
- 使用字典工具或自定义脚本,结合常见的文件名和日期格式,对可能的文件路径进行爆破。
- 监控服务器响应,寻找可能的webshell地址。
2. 检查服务器日志
- 查看HTTP请求日志,特别是在上传文件失败或成功的记录中,可能会有可疑的URL或文件路径。
- 登录到服务器,找到HTTP请求日志文件(如Apache的access.log或Nginx的access.log)。
- 使用文本搜索工具(如grep)来查找与文件上传相关的日志条目。
- 分析日志内容,寻找可能的webshell地址或上传的文件路径。
3. 异常检测
- 有些webshell在运行时会抛出错误或异常,通过监控网站的服务器错误页面,可以寻找异常报告。
- 访问网站的错误页面(如404、500等)。
- 仔细查看错误页面上的信息,寻找可能的异常报告或堆栈跟踪。
- 分析异常信息,尝试定位webshell的位置。
4. 文件名检测
- 如果webshell使用了特殊命名规则(如包含特定字符组合的文件名),可以在服务器目录下搜索这些文件。
- 登录到服务器,使用文件搜索工具(如find、locate等)。
- 根据webshell可能的命名规则,构造搜索模式。
- 执行搜索命令,查找匹配的文件。
5. 网络扫描
- 利用安全审计工具在网络流量中查找未授权访问或命令执行的行为,这有助于发现隐藏的webshell
- 选择合适的网络扫描工具(如Nmap、Wireshark等)。
- 配置扫描参数,对目标网络进行扫描。
- 分析扫描结果,寻找可能的webshell活动。
6. 黑盒测试
- 尝试向服务器发送各种文件上传请求,看是否有意外响应,这可能暴露webshell的位置。
- 构造不同的文件上传请求,包括不同的文件名、文件类型和请求头。
- 发送请求到服务器,并仔细观察服务器的响应。
- 分析响应内容,寻找可能的webshell地址或提示信息。
7. 源码审查
- 如果有可能,查看网站的后台代码,特别是与文件上传功能相关的代码,查看是否存在文件处理漏洞,这是隐藏webshell的常见手段。
- 获取网站的源代码(可能需要通过漏洞利用或其他手段)。
- 仔细审查与文件上传功能相关的代码段。
- 分析代码逻辑,寻找可能的漏洞点或webshell的隐藏位置。
upload-labs
less 6
查看源码发现没有转换大小写
改后缀名就可以了
less 7
查看源码没有屏蔽空格
用burpsuite抓包在后缀名前后加上空格就可以了
less 8
查看源码,发现没有屏蔽.
在burpsuite修改后缀名加.就可以
less 9
查看源码发现没有对特殊字符::$DATA进行特殊字符绕过
所以在后缀名添加::$DATA
less 10
查看源码,发现也是一个黑名单,但是同样也只检查一次
所以把文件名改为pphphp就可以