安
全
攻
防
一、特征
在GitHub上nmap脚本出来时,我们也进行了测试和跟进,并且改掉了继承自msfuri的checksum8匹配算法。
某空间测绘已经扫描了全网的Stager Beacon Server,为了不被抓住快快修改起来吧~
二、特征修改
01
checksum8分析
符合checksum8逻辑的path就会请求出来一堆异或加密的“乱码数据”
public static long checksum8(String text) {if (text.length() < 4) {return 0L;} else {text = text.replace("/", "");long sum = 0L;for(int x = 0; x < text.length(); ++x) {sum += (long)text.charAt(x);}return sum % 256L;}}
02
曲线救国
Failed:通过修改beacon目录下的BeaconPayload.java中硬编码的0x2e为其他字符,发现nmap脚本无法解析Response的加密数据,看似可以,但木马无法上线。
试想:即使我们修改了xor的密钥,对方无法解密我们Teamserver的的profile,但请求符合众多checksum8的uri仍然能出现乱码,特征还是很明显的。
Success:所以我们通过“曲线救国”的方式将checksum8相关逻辑改掉,这种checksum8爆破“4个字符”的方式想要获取我们的beacon数据已经不可能,更无法解析。
通过查找checksum8的实现方法,可以找到它在WebServer.java和CommonUtils.java中进行了实现,我们知道返回数据是通过http进行的返回,所以WebServer.java的概率更大,这个WebServer继承于NanoHTTPD(微型服务器),看一下它里面的处理逻辑,它的URI就相当于个参数,参数经过checksum8计算后等于92或者93就会返回信息了,这里其实把92和93改掉也可以,但是这个功能还想正常使用,只能改成小于256的,因为算法最后对256取余,也就是说,爆破256次必然能爆破出来。
所以我们可以对checksum8算法进行修改,这里做简单修改,把取余操作去掉,那么就是计算的URI的和,就不容易爆破了。
计算脚本:
public class EchoTest {public static long checksum8(String text) {if (text.length() < 4) {return 0L;}text = text.replace("/", "");long sum = 0L;for (int x = 0; x < text.length(); x++) {sum += text.charAt(x);}return sum;}public static void main(String[] args) throws Exception {System.out.println(checksum8("4124bc0a9335c27f086f24ba207a4912.png"));}}
4124bc0a9335c27f086f24ba207a4912.png 这个计算结果为2449,修改后的地方如下,其他64位地方同理
再次访问ip/Hjla,返回404;
而访问ip/4124bc0a9335c27f086f24ba207a4912.png则会返回beacon数据。
03
后话
Cobalt Strike特征还蛮多的,其他非公开隐蔽特征欢迎加入我们一起讨论。
END
「 往期文章 」
扫描二维码
获取更多姿势
穿云箭
安全实验室