[CTF] AIS3 Write-Up
這份write-up寫好放著好久了,一直忘記發佈出來XD
最近在整理文章熊熊才想到...
大神們請飄過Q__Q
MISC1
嘗試送出你的第一把 KEY The key is AIS3{hello_world}
直接送出KEY
MISC2
雖然facebook.zip有加密,但是可觀看到內含資料夾/p960x960/下有一個圖片檔案的檔名為851556_443281069111871_602278786_n.png,透過Google搜索後,
接著將此圖片下載後,自行包成ZIP壓縮包(這裡命名為my_zip.zip)利用知名工具PKCrack,Linux中下命令pkcrack -d o.zip -P my_zip.zip -c "p960x960/851556_443281069111871_602278786_n.png" -C facebook.zip -p 851556_443281069111871_602278786_n.png
最後產出o.zip解壓縮後就可以觀看到內含的文字檔案內的key了
MISC3
把檔案c4載下來後,用file查看得知為gzip檔案然後下gzip後會變成c4.gzip在解壓縮開(重複兩次後)c4會變成bitmap的檔案,點閱開來後就可以看到KEY:
如上圖所示就會出現Key
WEB1
點擊test會連到 http://52.69.163.194/web1/?page=test
點擊about會連到 http://52.69.163.194/web1/?page=about
查詢Stack Overflow可以得知漏洞: http://stackoverflow.com/questions/20726247/php-security-exploit-list-content-of-remote-php-file
可以透過參數塞php://filter/convert.base64-encode/resource=index把Source Code轉Base64後印出,瀏覽網址:http://52.69.163.194/web1/?page=php://filter/convert.base64-encode/resource=index,印出Base64文字做Decode找到網頁Source內就可以看到註解含有Key
WEB2
翻到整頁亂中有序的符號中可以看見符號結尾為(),是個Java Script加密
將題目內丟入主控台執行,並且重新整理
WEB3
在WEB3網站內的Login登入頁面上帳號與密碼雖過濾單引號
但是含有SQLi漏洞可插入\’’ or 1 = 1 #
BINARY1
用PEID可以查殼確定是UPX Shell,但是用UPX自帶的去殼工具脫不掉
用OD載入軟體Bin1.exe
往下翻一下很快可以找到popad,接著底下cmp esp,eax確定完恢復stack後然後jmp做大跳轉回到原始OEP,F8單步到原始OEP入口後:
在原始OEP處右鍵OllyDump
然後勾選選項修正物理大小與修正OEP Offset並修正IAT,輸出出去為exe檔案
IDA打開後找到入口點很快就可以找到猜數字遊戲噴的KEY了
BINARY2
題目中的一串文字為一段Shellcode,可以撰寫c程式碼將Shellcode執行起來觀看結果
在Linux x64下以gcc編譯並執行:
char code[]="\x48\xb8\xb5\xa3\xb9\xb1\xc6\x41\x41\x41\x50\x48\xb8\xbc\xa0\xa9\x93\xaa\xa3\xbe\x93\x50\x48\xb8\xa9\x93\xa5\xbf\x93\xbf\xa5\xa1\x50\x48\xb8\xbf\xa4\xa9\xa0\xa0\xaf\xa3\xa8\x50\x48\xb8\x8d\x85\x9f\xff\xb7\xa3\xa7\x93\x50\x48\x89\xe6\x48\x31\xd2\x80\x34\x16\xcc\xfe\xc2\x80\xfa\x25\x75\xf5\x48\x31\xc0\x48\xff\xc0\x48\x89\xc7\x0f\x05\x6a\x3c\x58\x48\x31\xff\x0f\x05";
int main()
{
{
int (*ret)() = (int(*)())code;
ret();
}
BINARY3
從文字資源區很快可以翻到Key正確時的回應句“Yeah, It’s the flag!!! WOW”
往回翻到對使用者輸入的操作起始點
可以看到call to_reg後rdx被設為input、mode被設為1,返回後把rcx放入程式內部的key(0xDDDDAAAADADADDAA)接著rdx = rdx ^ rcx再塞回key內。
接著進入到check2,先把eax清零然後call進gg內,確認gg返回值的一個short單位若為0則代表Key正確。
最後看到gg內部,會先把先前操作過的key前4bytes對0xBFB7B8CE做比對,一樣為1反之為0再將後4byte對0xBCB4DEC4做比對,一樣為1反之為0。操作完畢後若ax結果為101(也就是key與0xBCB4DEC4BFB7B8CE一樣)就回傳0反之回傳不為0。
因此可以得出整支程式判斷Key正不正確的過程:
(input ^ 0xDDDDAAAADADADDAA == 0xBCB4DEC4BFB7B8CE) 則代表Key正確
上述公式移向後得知:
0xBCB4DEC4BFB7B8CE ^ 0xDDDDAAAADADADDAA == input(原本使用者應輸入)
最後因0xBCB4DEC4BFB7B8CE(Integer x64)需little-endian,故答案需反轉,
答案為:dementia
PWN1
這個write up事先發成BLOG文章了
首先下file pwn1,可以得知為elf x64 linux檔案
拖進IDA Pro按下Shift+F12可以看見主機回應字串:Input Your Name
接著翻到文字資源點點擊xref觀看參考點
接著可以使用IDA Pro F5得到:
可以看到伺服器上回應的程式puts出“Input Your Name”後,做scanf把使用者傳入的Data寫入v1內(應該是char array?)接著就判斷v4是否為0x90909090,是就噴Flag否則就告訴你目前的v4的值為多少(如果沒控制成功,預設會是10)
這邊可以得知的是唯一跟使用者傳入(可控)的是v1,接著我們想控制的是一個被宣告為DWORD的v4(4個BYTE),接著回到組合語言狀態下觀看:
這邊可以得知v1(Buffer)地址為+0x20而v4地址則為+0x04,也就是兩個偏移量差了32 - 4 = 28個BYTE,所以我們可以這樣傳入使用者測資來控制v4:
[........共28個字元塞滿(隨便塞)........][要控制的v4值,4BYTE]
最後下: echo -e "............................\x90\x90\x90\x90" | nc ip port
就可以得到KEY了
Crypto1
題目內給了一個秘文,檔名為vigenere.txt推測為此題關鍵,
Google搜尋了一下:維吉尼爾加密法
找到這張對換表,可以看到是英文字母對換表不處理符號
在題目給的秘文中找到很明顯的字串為:
vayy://dgu.sjg3.vwp/gvawt/hojtfldxwwnjwfetzbvhmj.uki
開頭相似於http://的形式,推測為網址,根據維吉尼爾加密法,根據Key加密方式會有一個固定的Offset相對應於該位置上;不過可以利用線上工具:http://smurfoncrack.com/pygenere/index.php
將密文整段放入後按下分析可以幫我們暴力Try Key出來還有解密的文本XD
連線至該連結就可以得到Key了
Crypto2
留言
張貼留言