欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

脚本小子的噩梦:看我如何黑掉僵尸网络

来源:本站整理 作者:佚名 时间:2019-09-06 TAG: 我要投稿


 
0x00 前言
本文将分享如何攻破一些代码存在漏洞的僵尸网络,这些僵尸网络的操作者通常为脚本小子。
此前我并未接触过这些黑产,因此对鼎鼎大名的DoS社区(译者注:僵尸网络通常被用于发动大规模DoS攻击以谋利)知之甚少。最近因为写这篇文章而收集了一些信息。根据我的理解,主要有两个僵尸网络分别为:Qbot和Mirai,并且它们不断地被改进而出现了大量变种。根据调查,我发现某些人似乎想要对僵尸网络进行”升级“,添加更多功能例如登入失败后重试,新型的DoS方法和暴力破解。这些将成为僵尸网络的”卖点“(这意味着普通人只要有钱,就可以利用肉鸡做某些事情),有时候黑产从业者也会直接出售这些肉鸡。
 
0x01 概述

目前,大部分僵尸网络工具都使用C语言编写的,C语言强大而危险,如果它们是由没有安全意识的程序员编写,则可能会铸成大错 – 我们接下来将会介绍。 只要学过二进制开发的人,都知道这个语言中的一个小错误也可能会导致巨大的漏洞,例如不规范地调用printf()和错误计算缓冲区的内存分配。 在本文,我只会分享我在Qbot僵尸网络中发现的三个漏洞中的一个,并且但这个漏洞严重性最高。 如果你觉得我很小气,那你可能就属于下图中的人?

I’m sorry,开个玩笑。我不想跟小孩子争吵,毕竟小孩子总是可以在海量服务器中弹出shell。
我在Miori v1.3僵尸网络上发现了一个预认证(Pre-auth)远程代码执行漏洞,此漏洞正是由于不当的输入处理和错误的使用system()函数而导致。 我再次重申,这是一个预认证型的远程命令执行漏洞。 修改Qbot源码时,某些人成功犯下大错 – 也许下次他们应该只使用Python¯(ツ)/¯。
不管怎么说,如果我们利用此漏洞成功劫持服务器,那简直太丢人了 :)。
 
0x02 环境搭建
攻击者
僵尸网络服务器
系统
Linux Mint 64 bit
CentOS 7 Minimal 64bit
IP地址
10.10.10.7
10.10.10.6
端口
X
666
应用
X
Miori v1.3
下载地址:
-> Linux Mint ISO-> CentOS 7 ISO-> Miori v1.3
Miori v1.3僵尸网络安装教程:
-> Switch Miori Botnet setup
注:安装脚本要使用yum来下载,因此这个僵尸网络服务器必须基于RedHat系统。
注:CentOS系统默认启用了防火墙。 如果无法连接如666之类的端口,可以通过“systemctl stop firewalld”将防火墙关闭,“systemctl disable firewalld”将其完全禁用。
 
0x03 代码
解压.zip压缩包:

对于我们来说有用的文件是cnc/cnc.c。 该文件中包含了僵尸网络“操作者”所需的主要功能,有登录,注册以及攻击等功能。具体参考下面这些图片。
登入和注册界面:

通过验证(Post-auth)后的界面:

从整体来看,该工具的UI界面实际上相当不错,肯定有人在上面花了很多时间。 但是他们没有在主代码上花费精力。 可以这样说,这是非常残酷的。 多个超大的char缓冲区,42个returns和3个exits…,可怕的缩进,标签和空格混合使用,76个goto语句(已经9012年了……真有这种事?)。在将来,代码中的漏洞也不会完全消失。 我猜测,如果开发者的主要目标制作一个看起来很酷的UI来赚钱,而不是制作代码美观和可靠的东西时,则会发生这种情况。 来看看代码是什么样的,请点击下图放大查看。

 
0x04 发现漏洞
其实在整个挖掘过程,我仔细查看了cnc.c中的代码,这令我我感到非常折磨。 在793和794行中,很容易就可以看出漏洞。
792 |   char flog[1024];
793 |   sprintf(flog,"echo "nfailed login with cred --> %s:%s n[victems ip] nip --> %s n" >> failed.txt",iffailedu,iffailedp,ipl);
794 |   system(flog);

你看,这家伙使用iffailedu和iffailedp代表登入失败的用户名和密码。 这表示登入失败后仍可以不断尝试。 这个想法还可以,但实施起来漏洞百出。 开发者使用了system()函数代替C的文件I/O函数。 为什么?答案很简单:
引用Subby的一句话:
其实很容易可以知道为什么会这样?很大一部分僵尸网络操作者都是从社区教程中学习,或者看看YouTube上的僵尸网络视频。
通常情况下上述中问题可能会导致缓冲区溢出,因为flog分配了1024个字节,但iffailedu和iffailedp最多可达2048个字节。 并且都是基于第637行的buf变量和下面的strcpy()方法。 然而,更有趣的漏洞在后头。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载