文件上传检测的基本思路

1: 前台脚本检测扩展名—绕过

原理

当用户在客户端选择文件点击上传的时候,客户端还没有向服务器发送任何消息,就对本地文件进行检测来判断是否是可以上传的类型,这种方式称为前台脚本检测扩展名。
  • 1

绕过方法

 
  1. 绕过前台脚本检测扩展名,就是将所要上传文件的扩展名更改为符合脚本检测规则的扩展名,通过BurpSuite工具,截取数据包,并将数据包中文件扩展名更改回原来的,达到绕过的目的。

  2. 例如:文件名本来为【evil.jpg】,上传时,用BurpSuite截包后,将数据包中的名字改为【evil.php】(或其它脚本类型)即可。

  • 1
  • 2

2: Content-Type检测文件类型—绕过

原理

当浏览器在上传文件到服务器的时候,服务器对说上传文件的Content-Type类型进行检测,如果是白名单允许的,则可以正常上传,否则上传失败。
  • 1

绕过方法

绕过Content--Type文件类型检测,就是用BurpSuite截取并修改数据包中文件的Content-Type类型(如改为:image/gif),使其符合白名单的规则,达到上传的目的。
  • 1

3: 文件系统00截断—绕过

原理

在上传的时候,当文件系统读到【0x00】时,会认为文件已经结束。利用00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0x00上传截断漏洞。
  • 1

绕过方法

通过抓包截断将【evil.php.jpg】后面的一个【.】换成【0x00】。在上传的时候,当文件系统读到【0x00】时,会认为文件已经结束,从而将【evil.php.jpg】的内容写入到【evil.php】中,从而达到攻击的目的。
  • 1

4: 服务器端扩展名检测黑名单—绕过

原理

当浏览器将文件提交到服务器端的时候,服务器端会根据设定的黑白名单对浏览器提交上来的文件扩展名进行检测,如果上传的文件扩展名不符合黑白名单的限制,则不予上传,否则上传成功。
  • 1

绕过方法

将一句话木马的文件名【evil.php】,改成【evil.php.abc】(奇怪的不被解析的后缀名都行)。首先,服务器验证文件扩展名的时候,验证的是【.abc】,只要该扩展名符合服务器端黑白名单规则,即可上传。另外,当在浏览器端访问该文件时,Apache如果解析不了【.abc】扩展名,会向前寻找可解析的扩展名,即【.php】
  • 1

5: JS检测上传文件—绕过

原理

上传文件时,对方使用JavaScript语句语法检测上传文件的合法性问题。
  • 1

绕过方法

在本地浏览器客户端禁用JS即可。可使用火狐浏览器的NoScript插件、IE中禁用掉JS等方式实现。
  • 1

6: 重写解析规则—绕过

原理

上传覆盖.htaccess文件,重写解析规则,将上传的带有脚本马的图片以脚本方式解析。
  • 1

绕过方法

 
  1. 在可以上传.htaccess文件时,先上传.htaccess文件,覆盖掉原先的.htaccess文件;再上传【evil.gif】文件。使用如下的.htaccess语句,即可将【evil.gif】文件以php脚本方式解析。

  2. <FilesMatch "evil.gif">

  3.  
  4. SetHandler application/x-httpd-php

  5. </FilesMatch>

  • 1
  • 2
  • 3
  • 4
  • 5

7: 其它方式—绕过

原理

部分程序员的思维不严谨,并使用逻辑不完善的上传文件合法性检测手段,导致可以找到方式绕过其检测方式。
  • 1

绕过方法

 
  1. 1. 后缀名大小写绕过

  2. 用于只将小写的脚本后缀名(如php)过滤掉的场合;

  3. 例如:将Burpsuite截获的数据包中的文件名【evil.php】改为【evil.Php】

  4.  
  5. 2. 双写后缀名绕过

  6. 用于只将文件后缀名,例如"php"字符串过滤的场合;

  7. 例如:上传时将Burpsuite截获的数据包中文件名【evil.php】改为【evil.pphphp】,那么过滤了第一个"php"字符串"后,开头的'p'和结尾的'hp'就组合又形成了【php】。

  8.  
  9. 3. 特殊后缀名绕过

  10. 用于检测文件合法性的脚本有问题的场合;

  11. 例如:将Burpsuite截获的数据包中【evil.php】名字改为【evil.php6】,或加个空格改为【evil.php 】等。

<think>好的,我需要帮助用户了解如何使用Suricata检测文件上传漏洞,并提供配置规则的示例。首先,我得回忆一下Suricata的基本规则结构。Suricata规则通常包括动作、协议、源/目的地址、端口、方向以及检测内容文件上传漏洞通常发生在Web应用中,攻击者可能上传恶意文件,如PHP或Shell脚本。因此,规则需要检测HTTP请求中的文件上传行为,特别是检查文件名或内容中的危险扩展名。例如,检测multipart/form-data的Content-Type,这是文件上传常用的类型。然后检查文件名是否有.php、.jsp等扩展名,或者检查文件内容中的特定特征,如PHP的<?php标记。 接下来,我需要参考现有的规则示例。根据用户提供的引用,Suricata与Snort类似,所以可以参考Snort的规则结构。比如,检查HTTP请求头中的Content-Type,以及POST数据中的文件名和内容。同时,需要注意规则中的关键字,如file_data、http_client_body等。 然后,考虑如何优化规则以减少误报。比如,结合MIME类型和文件扩展名双重检查,或者使用正则表达式精确匹配危险内容。此外,可能需要处理Base64编码或其他编码方式的上传内容,这时候需要解码后再检测。 最后,确保规则语法正确,使用正确的选项,如nocase忽略大小写,content匹配多个内容时的间距设置,以及msg和reference提供足够的信息。测试规则时,可以使用pcap重放或pytbull框架进行验证,如引用3提到的测试工具。 现在,把这些思路整理成具体的规则示例,并给出解释,帮助用户理解每个部分的作用。同时,提醒用户注意规则放置的位置和测试方法,确保规则生效。</think>### Suricata检测文件上传漏洞的配置规则示例 文件上传漏洞检测主要关注HTTP请求中携带的可执行文件(如.php、.jsp)或恶意文件特征。以下是具体规则配置方法: #### 1. 基础检测规则(基于文件扩展名) ```suricata alert http $HOME_NET any -> $EXTERNAL_NET any ( \ msg:"潜在文件上传漏洞 - 检测到可执行文件扩展名"; \ flow:established,to_server; \ http.method; content:"POST"; \ http.header; content:"multipart/form-data"; nocase; \ http.client_body; content:".php"; nocase; \ metadata:service http; \ classtype:web-application-attack; \ sid:1000001; rev:1;) ``` **规则解析**: - `http.method; content:"POST"`:匹配POST请求 - `http.header; content:"multipart/form-data"`:检测文件上传的MIME类型[^2] - `http.client_body; content:".php"`:在请求体中检测.php扩展名(nocase忽略大小写) #### 2. 增强检测规则(结合MIME类型与内容特征) ```suricata alert http $HOME_NET any -> $EXTERNAL_NET any ( \ msg:"潜在恶意文件上传 - PHP标签检测"; \ flow:established,to_server; \ file_data; content:"<?php"; nocase; \ metadata:service http; \ classtype:web-application-attack; \ sid:1000002; rev:1;) ``` **规则解析**: - `file_data`:指向HTTP传输的文件数据部分 - `content:"<?php"`:检测PHP开放标签特征[^3] #### 3. 防御绕过检测(处理编码场景) ```suricata alert http $HOME_NET any -> $EXTERNAL_NET any ( \ msg:"可疑文件上传 - Base64编码的可执行文件"; \ flow:established,to_server; \ file_data; content:"PD9waHA"; fast_pattern; \ metadata:service http; \ classtype:web-application-attack; \ sid:1000003; rev:1;) ``` **规则解析**: - `content:"PD9waHA"`:匹配`<?php`的Base64编码值 - `fast_pattern`:提升检测效率的关键字 ### 部署与验证步骤 1. **规则存放路径**:将规则添加到`/etc/suricata/rules/`目录下的自定义规则文件 2. **配置引用**:在`suricata.yaml`中添加规则文件引用 ```yaml rule-files: - custom-fileupload.rules ``` 3. **测试验证**: - 使用`pytbull`框架生成测试流量[^3] - 通过Wireshark导入`eve.json`日志查看告警详情[^4] ### 优化建议 - 结合**文件哈希检测**:集成病毒库特征(如搭配MalwareDNA项目) - **频率检测**:增加`threshold`限制高频上传行为 - **协议解析**:启用HTTP协议解析器深度检查 ```yaml app-layer: protocols: http: enabled: yes extended-body-limit: 10mb # 根据业务需求调整[^1] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值