笔记是根据马士兵教育2024HVV专题编写,作为学习记录来分享,如有错误的地方请指正,谢谢
免责声明
本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担!
1、文件上传漏洞原理
1.1、文件上传漏洞介绍
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。比如一句话木马脚本
1.2、常见的上传点
上传头像、上传简历、上传论文、上传资源、上传图片,上传写作,总之,一切上传文件都可能是可以利用的上传点
1.3、完成入侵所需的条件
(1)木马上传成功,未被杀;
(2)知道木马的路径在哪;蚁剑连接需要路径 能够访问到
(3)上传的木马能正常运行。
1.4、webshell
Webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。
1.5、一句话木马
根据对应的运行环境,生成相应的webshell。然后上传。(生成工具包括连接可以使用蚁剑或中国菜刀,里面功能有生成一句话木马和连接)
这些木马脚本分为三段:
- 标记脚本语言的开始
- 执行后面请求到的数据
- 请求用户端数据
2、文件上传漏洞攻击流程
2.1、信息收集
2.1.1、中间件版本
iis 6.x 5.x中存在以下漏洞
1、格式解析:
在上传文件时限制不能上传脚本文件,比如:.php .jsp .asp
这时候如果传的asa,ashx等,会被解析成对应语言,这是一种格式解析漏洞
2、目录解析:
如果在可以创建目录的前提下,比如编辑器fckeditor。
可以新建一个目录比如1.php。
那么我们在1.php目录下上传1.txt 1.png。相当于1.txt 1.png在1.php中,1.txt中写入一句话木马
我们去访问1.php会执行脚本
3、分号解析
我们在上传文件时,文件名改为1.php;.jpg。这时候后缀是jpg是可以上传,上传到后端时会被解析。
分号解析有时候不能用,比如重命名。传到后端会重命名为2023011132.jpg。
iis 7.x
1、图片码
一张图片在后面加上.php然后运行,如果出现乱码而不是403等,就是存在漏洞。这张图片会以php形式执行
2.2、找上传点
使用字典。以下是举例,自己可以收集,加入字典
/upload.jsp
upload/
FCKeditor/
editor/
2.3、上传绕过
防守可能有:黑名单、白名单、文件内容
黑名单:限制不能上传的类型。
绕过方法:
- 双写phpphp
- 大小写PhP
- 扩展名(php5)
- 点
- 编码
- 空格
- 可以把一句话木马和照片合并
白名单:只能上传文件的类型
绕过方法:
- 1.php%00.jpg(需要结合目录去使用)(目录 /update/1.php%00.jpg)(这个也称为00截断)
- 在文件前加一个图片码配合配置文件,简单点可以按下面的步骤
- 可以把一句话木马和照片合并
3、文件包含漏洞原理
3.1、文件包含漏洞介绍
文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。
由于没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。
文件包含分为两种,一种是本地文件包含漏洞(LFI)一种是远程文件包含漏洞(RFI)
3.1.1、本地文件包含漏洞(LFI)
仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击者更多的会包含一些固定的系统配置文件,从而读取系统敏感信息。
3.1.2、远程文件包含漏洞(RFI)
能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况很严重。
3.2、利用条件
(1)allow_url_include=On&&allow_url_fopen=On(两个选项同时开启)
(2)用户可以动态控制变量
3.3、文件包含函数
PHP:Include()、Require()、Include_once()、Require_once() https://www.kancloud.cn/sunwei056/phpbase/312803
4、文件包含漏洞利用方式
4.1、查看变量
首先我们可以看可以修改的变量有哪些,这里用pikachu靶场来做演示
4.2、进行爆破
这时候我们可以去爆破,一般1-100。当然在真实环境这个文件命名规则不会这么简单
把这个数字标记payload,进行爆破
4.3、查看返回的内容进行判断
这时候我们可以根据长度的不同去读
比如6,响应内容是
说明就存在文件包含漏洞了
4.4、根据其他数据部分报错,可以继续读取敏感文件
4.5、本地文件包含
我们在根目录下写一个payload
1.php
<?php
phpinfo();
?>
在网页中去访问,成功
4.6、远程文件包含
这里很贴心的提示:
1、去打开一下allow_url_include
2、搭建一个站点
http://hs.com/
将刚刚1.php文件放在站点下
3、这时候去访问一下,访问成功