网安毕业实习——Day 7

目录

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

1. 防御手段:

2. 常见绕过手段:

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

三、课中所讲的三种webshell管理工具的使用方法

1. 哥斯拉(Godzilla)

生成木马

设置代理

流量特征

2. 蚁剑(AntSword)

连接木马

设置代理

流量特征

3. 冰蝎(Behinder)

生成木马

设置代理

流量特征

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

五、文件上传表单的无参/有参情况下构造表单

六、upload-labs靶场(6-10)

Pass-06 大小写绕过

pass-07 空格绕过

pass-08 加点绕过

pass-09 ::$$DATA绕过

pass-10 双写绕过


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

文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。

1. 防御手段:

(1)客户端校验

  • js前端校验文件类型:通过JavaScript在客户端检查文件扩展名,不过客户端校验易被绕过,只能作为初步防御

(2)服务端校验

  • 校验上传文件类型:使用白名单机制,仅允许特定类型的文件上传,并结合文件签名(magic number)等技术准确判断文件类型。
  • 校验上传文件内容:对特定类型的文件(如图片、PDF)进行内容解析,验证其完整性和安全性,防止文件被篡改或嵌入恶意代码。
  • 校验上传文件大小:设置上传文件的大小上限,防止因上传过大文件而导致的资源耗尽或拒绝服务攻击。
  • 校验上传文件路径:验证并清理文件名和路径,防止路径遍历攻击。
  • 文件名和路径随机化:使用随机数或哈希值重命名上传的文件,并将文件存储在非公开目录下,增加攻击难度。

(3)权限与配置

  • 限制目录权限:确保上传文件目录不是Web服务器的可执行目录,对上传文件目录设置适当的读写权限,避免未经授权的访问或执行。

(4)使用安全工具

  • 部署安全设备,如防火墙等。使用安全扫描漏洞,及时发现并修复潜在漏洞。

2. 常见绕过手段:

  • 大/双写文件名绕过
  • 恶意文件内容以多段拼凑/拆解的形式组合
  • 目录穿越到可执行目录
  • 修改MIME类型
  • 大小写绕过
  • 图片木马
  • 文件包含绕过
  • 文件竞争绕过

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

一句话木马的核心原理是通过接收用户输入(通常是通过HTTP请求),并将其作为代码执行。

php:

<?php @eval($_POST['pass']);?>  

$_POST是一个全局数组,用于收集表单数据。通过向该脚本发送包含恶意PHP代码的pass参数,攻击者可以执行任意PHP代码。@符号用于抑制错误信息的输出,使得执行失败时不会暴露给攻击者错误信息。

<?php system($_GET['cmd']);?>

$_GET为全局数组,收集URL查询字符串中的参数。使攻击者通过URL传递命令。


三、课中所讲的三种webshell管理工具的使用方法

下面演示使用工具连接webshell,及抓取流量包进行分析特征的过程。

1. 哥斯拉(Godzilla)

下载安装

下载地址:GitHub - BeichenDream/Godzilla: 哥斯拉

双击运行下载好的godzilla.jar,第一次打开会再同目录下生成data.db数据库存放数据。

若程序正常运行,可看到界面如下:

生成木马

打开哥斯拉,点击"管理"->"生成",生成木马,文件生成路径选择phpstudy的www目录。

打开文件查看,可看到里面是 php 一句话木马。

设置代理

点击"目标"->"添加",配置bp代理。注意要和生成这个木马时的设置保持一致。

可以先“测试连接”,看是否有出错,提示“success”了再点“添加”。

bp开启拦截,可成功捕获数据包

流量特征
  • 强特征:cookie字段,Cookie尾值后出现分号

  • Accept字段:
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8

  • 响应,哥斯拉会响应三次

2. 蚁剑(AntSword)

下载安装

打开加载器(AntSword-Loader -v4.0.3-win32-x64),双击AnSword.exe。
点击初始化,选择核心代码所在的文件位置,配置核心代码
初始化成功后再打开AntSword界面如下:

连接木马

空白处鼠标右键–>添加数据,URL地址使用上文中上传的木马:http://127.0.0.1/test.php。可先测试连接,成功后点击添加。

设置代理

在蚁剑启动bp代理,配置好后可在bp抓包。

成功拦截数据包:

流量特征
  • 使用URL编解码。

  • 每个数据包前面都会包含 @ini_set("display_errors", "0"); @set_time_limit(0);这两个语句。

  • 响应包都是明文。

3. 冰蝎(Behinder)

冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端,其最大特点就是对交互流量进行对称加密,且加密密钥是由随机数函数动态生成,因此该客户端的流量几乎无法检测。

下载

github地址:Releases · rebeyond/Behinder · GitHub

下载后双击Behinder.jar即可运行。

生成木马

点击传输协议,选择default_aes协议,生成服务端,即可创建server服务端文件,同时生成木马文件。

在冰蝎主界面右键新增shell。

设置代理

burpsuit开启拦截,冰蝎发请求,成功拦截。

流量特征
  • Accept字段

    Accept: application/json, text/javascript, /; q=0.01

  • Content-type(弱特征)

    Content-type: application/x-www-form-urlencode

  • User-Agent

    分析时发现该字段不固定,第一次连接为Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3)...,第二次截图变为Mozilla/5.0 (Windows NT 10.0)...

    查资料了解到冰蝎设置了10种User-Agent,每次连接shell时会随机选择一个进行使用。


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

1. 目录遍历

可以尝试访问可能的上传目录进行枚举爆破。常见的可能上传目录有/uploads/、/files/、/images/等。还可使用 ../ 来尝试访问更深层次的目录。

2. 自动化工具爆破

可以使用自动化工具(如DirBuster、Gobuster等)进行目录和文件名的爆破,尝试发现可能的WebShell文件

3. 分析HTTP响应头

上传文件后HTTP响应头内可能会包含一些线索。我们可使用抓包工具(如Burp Suite、Fiddler)捕获并分析上传请求和响应的详细信息。

4. 搜索引擎搜索

利用搜索引擎(如Google)进行特定的搜索。搜索时可使用 inurl: 等搜索指令来搜索特定目录或文件类型,如inurl:/uploads/ *.php。

5. 查看服务器日志

首先,我们需要有权限访问服务器日志。然后可以查看上传请求的日志,找到上传文件的路径和相关信息。

6. 反向Shell连接

如果 WebShell 能够执行命令,我们就可以尝试通过反向Shell连接到攻击者的机器,以获取更多关于文件系统的信息,包括 WebShell 的存储位置。


五、文件上传表单的无参/有参情况下构造表单

在Web开发中,构造文件上传表单时,需要使用HTML <form> 元素,该元素允许用户选择文件并将其发送到服务器。

1. 无参的文件上传表单

无参文件上传表单仅包含用于文件选择的输入字段,不包含其他输入字段(如用户名、密码等)。这种表单通常用于简单的文件上传场景,不需要额外的用户输入。

<form action="upload.php" method="post" enctype="multipart/form-data">  
  <label for="fileToUpload">选择文件:</label>  
  <input type="file" id="fileToUpload" name="fileToUpload">  
  <input type="submit" value="上传文件" name="submit">  
</form>

<form> 标签的 action 属性指定了处理文件上传的服务器脚本(upload.php)
method 属性设置为 post 以发送表单数据,
enctype 属性设置为 multipart/form-data,这是上传文件所必需的。
<input type="file"> 是文件选择输入字段,用户可以通过它选择文件。
<input type="submit"> 是一个提交按钮,用于将表单数据发送到服务器。

2. 有参的文件上传表单

有参的文件上传表单除了包含文件选择输入字段外,还包含其他输入字段。这些额外的字段可以用于传递额外的信息给服务器,如用户身份验证、文件描述等。

<form action="upload_with_params.php" method="post" enctype="multipart/form-data">  
  <label for="username">用户名:</label>  
  <input type="text" id="username" name="username">  
    
  <label for="fileDescription">文件描述:</label>  
  <textarea id="fileDescription" name="fileDescription"></textarea>  
    
  <label for="fileToUpload">选择文件:</label>  
  <input type="file" id="fileToUpload" name="fileToUpload">  
    
  <input type="submit" value="上传文件并附加信息" name="submit">  
</form>

在这个例子中,表单除了包含文件选择字段外,还包含了一个文本输入字段(username)和一个文本区域(fileDescription),分别用于输入用户名和文件描述。这些额外的字段允许用户在上传文件时提供额外的信息。


六、upload-labs靶场(6-10)

环境准备
首先下载upload-labs源码:https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master解压后放在 phpstudy_pro 的 WWW 目录下。 打开小皮,创建网站。

Pass-06 大小写绕过

后缀大小写是通过服务端未将后缀进行统一的格式转换,导致可以上传PHP的文件,同时由于Windows系统对后缀大小写并不敏感,所以当在写PHP的改成Php就会被当作PHP进行解析。

查看源代码发现没有对大小写进行限制

上传木马,抓包修改文件后缀为大写。

上传成功

pass-07 空格绕过

空格绕过其实是利用了Windows对文件和文件名的限制,当将空格放在结尾的时候,就会触发操作系统的命名规范问题,所以在生成文件的时候,添加在结尾的空格就会被去除。

查看源代码,发现并未对空格进行限制,那么我们可以在后缀添加一个空格进行绕过

抓包后在后缀中间添加空格

木马上传成功

pass-08 加点绕过

和空格绕过相同,都是利用操作系统的特性来进行解析绕过。

查看源代码,发现发现少了"删除文件名末尾的点"

抓包,在文件后缀中间加一个点

上传成功

pass-09 ::$$DATA绕过

在windows,如果文件名加上 ::$DATA 会把

::$DATA之后的数据当成文件流处理,不会检测后缀名,

且保持 ::$DATA 之前的文件名,他的目的就是不检查后缀名。

通过源码发现并未对 ::$DATA 进行检测。

抓包,在后面添加 ::$DATA 进行绕过。

上传成功

pass-10 双写绕过

查看源码

可看到前面的绕过方法都进行了过滤。但由于所有的过滤都是一次的,并未进行循环过滤,因此可以尝试双写绕过。

抓包,后缀添加php

上传成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值