Pikachu靶场——目录遍历漏洞和敏感信息泄露

1. 目录遍历漏洞

漏洞描述

目录遍历漏洞发生在应用程序未能正确限制用户输入的情况下。攻击者可以利用这个漏洞,通过在请求中使用特殊的文件路径字符(如 …/ 或 %2e%2e/)来绕过应用程序的访问控制机制,访问应用程序所不应该暴露的文件或目录。

漏洞原理

应用程序的文件操作功能通常会接收用户提供的文件路径作为输入,并从文件系统中读取或写入文件。如果应用程序在处理用户输入时没有进行充分的验证和过滤,攻击者可以通过构造恶意的文件路径来访问任意文件或目录。

image-20230909152930401

分别点击这两个连接,会显示其他内容。与之对应的URL中的title的值也会发生改变。

第一个链接

image-20230909153125827

第二个链接

image-20230909153153600

根据目录遍历的原理,攻击者主要通过…/来返回上一级目录, 从而导致所有目录的暴露。

构造URL

http://192.168.188.183/pikachu/vul/dir/dir_list.php?title=../../../../../../../../windows\system32\drivers\etc\hosts

image-20230909153526328

1.1 源码分析

image-20230916155827012

说明:在PHP中,使用require语句可以将指定文件的内容包含到当前脚本中。对$filename参数没有进行任何的过滤从而导致漏洞的产生。

1.2 漏洞防御

修改源码进行防御

if(isset($_GET['title'])){
    $filename=$_GET['title'];
    //这里直接把传进来的内容进行了require(),造成问题
    //代码防御
    $filename = str_replace("../","",$filename);

    require "soup/$filename";
//    echo $html;
}

说明str_replace 是 PHP 中的字符串替换函数,可用于将字符串中指定的子串替换为另一个子串。这里是将../替换为空字符串。

image-20231001165959817

访问hosts文件

image-20231001170313242

防御成功,但是这样的防御是可以使用..\进行绕过。

http://127.0.0.1/pikachu/vul/dir/dir_list.php?title=..\..\..\..\..\..\..\..\windows\system32\drivers\etc\hosts

image-20231001170416027

观察发现在进行访问的时候URL中的title的值分别是jarheads.php和truman.php这两个php文件。那么我们可以添加白名单进行防御。

防御代码如下:

if(isset($_GET['title'])){
    $filename=$_GET['title'];
    //这里直接把传进来的内容进行了require(),造成问题
    //代码防御
    if($filename == 'jarheads.php' or $filename == 'truman.php'){
        require "soup/$filename";
    }else{
        die("黑客!!!");
    }
    // require "soup/$filename";
//    echo $html;
}

重新访问页面

image-20231001171242604

防御成功!

目录遍历漏洞防御

  • 输入验证与过滤:对于接收用户输入的文件路径,要进行严格的输入验证和过滤,只允许合法的文件路径字符和文件名,拒绝或替换任何非法字符。
  • 白名单限制:限制应用程序可以访问的文件目录范围,使用白名单机制只允许特定的文件或目录被访问。
  • 文件权限控制:确保文件系统中的文件和目录设置了适当的权限,限制对敏感文件的访问。

2. 敏感信息泄露

由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到。

例如:

  • 通过访问url下的目录,可以直接列出目录下的文件列表。
  • 输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版本或其他信息。
  • 前端的源码(html,css,js)里面包含了敏感信息,比如后台登录地址、内网接口信息、甚至账号密码等

查看页面源代码,发现了测试账户

image-20230909153914076

使用测试账户进行登录

image-20230909153953000

登录成功。

2.1 漏洞防御

  • 尽可能避免存储敏感数据,或存储时间超过所需时间。
  • 对于网站目录定期扫描。
  • 对于所有需要存储的静态数据进行加密。
  • 安全地处理用户输入:对用户输入的敏感信息进行严格而细致的验证和过滤,以防止恶意输入或攻击例如SQL注入、跨站脚本(XSS)等。
  • 强化访问控制机制:实施强密码策略、多因素身份验证、单点登录(SSO)等访问控制机制,以增加攻击者获取敏感信息的难度。
  • 合理设计权限和访问控制:确保只有授权用户或角色可以访问和处理敏感信息。使用最小权限原则,即每个用户/角色只能获得完成其工作所需的最低限度的访问权限。
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来日可期x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值