還不登入嗎?
(-3-)是不是要下跪求你們?
趕快為了可愛的管理員登入喔。
登入可以得到收藏功能列表
還能夠讓我們知道你們有在支持狂人喔(*´∀`)~♥
《從零開始的CTFer生活》Chapter.六 Pwn入門與Segmentati…
  “

  一片漆黑。

  筱懿明仿佛被封鎖於一個獨特的空間當中,向前、向後,視野中空無一物,隻余下無邊的黑暗。

  筱懿明張了張嘴,嘗試著想要說些什麽,但是整個世界仍然如同一泓古泉一般沉寂,他甚至無法察覺到自己喉嚨的顫動。

  恍惚之間,一個虛無縹緲的聲音從遠處傳來。

  「不要...」

  筱懿明四下探望著,嘗試著尋找聲音的來源,但映入眼簾中的仍是無盡的黑暗。

  筱懿明能夠感受得到,這聲音的來源似乎在逐漸向他靠近,卻似乎只是在不斷地重複著那一句奇怪的話。伴隨著聲音的來源似乎越來越近,筱懿明最終聽清了她所說的——

  「不要使用帶有安全隱患的 gets()函數!」

  ”

  筱懿明猛地睜開雙眼,從床上彈了起來——

  他已經很久沒有做過這樣的夢了,又或者說,他已經很久沒有做過夢了。

  自從那一天起。

  筱懿明搖了搖頭,隨即拿起身旁的手機——不出所料,現在已經是早上十一點了,——當然,十一點已經基本上算是中午的范疇了,室友們早就已經去上課了,寢室裡只有他一個人,但十一點起床並不意味著筱懿明就是一個貪睡的人,恰恰相反的是他一直信奉著“能夠少睡一點就少睡一點”的神秘理念,平均下來一天隻睡五個小時左右,對他來說,計算機所帶給他的樂趣遠遠大於睡覺的樂趣——而按照平均一天隻睡五個小時這個情況向前逆推,我們很容易得到的便是我們的主人公筱懿明在將近凌晨六點鍾左右才上床睡覺——毫無疑問,是在通宵看一道逆向題。

  雖然當筱懿明將二進製文件拖入 IDA 之後看起來似乎能夠分析出匯編代碼的樣子,但是有著這樣一個令他困擾的函數——無法被成功反編譯,而在 IDA-view 窗口的左側屬於這個函數的這一段反匯編代碼左側的地址【全部被標紅】——似乎是 IDA 在警告著筱懿明。

  不僅如此,甚至從某個語句開始下方的數據全部都無法被成功反匯編,在 IDA 中顯示的只有原始的數據。

  .text:0000000000008121 jz short near ptr loc_8125+1

  .text:0000000000008123 jnz short near ptr loc_8125+1

  .text:0000000000008125

  .text:0000000000008125 loc_8125:; CODE XREF:.text:0000000000008121↑j

  .text:0000000000008125 ;.text:0000000000008123↑j

  .text:0000000000008125 call near ptr 70860E72h

  .text:0000000000008125 ;

  .text:000000000000812A dw 0FFFFh, 48FFh,

0C789h  .text:0000000000008130 dq 0C38948FFFFB56BE8h, 48FFFFFF70858D48h, 48FFFFB489E8C789h

  再往下的全都是沒法成功被分析出來的數據,而對於匯編十分不熟悉的筱懿明看了大半個晚上才弄明白 x86 中的各種基礎指令的含義,更別說分析程序的邏輯了。

  “這裡這兩個近跳轉是幹啥的...這裡還有一個無效的跳轉...下面這些數據又是幹啥的?.text段不是代碼段麽?”

  “或許應該轉換一下思路......?如果說只是為了衝分的話多做幾種類型的題目或許會好一些......?”筱懿明思忖著,悄然歎了一口氣,“似乎 pwn 也是二進製安全這個領域的?看一下都是些什麽樣的題......”

  GEEKERCTF,pwn分區,第一道題目「Pwn2Own」,說明如下——

  什麽是Pwn?

  Pwn /po?n/這個詞本身其實是一個擬聲詞,最初來源於黑客們設想中的完全獲取一台設備的控制權後便會發出“砰”的一聲,Pwn因此而得名,即利用挖掘到的二進製漏洞對設備或系統發起攻擊,並最終拿到shell(獲取控制權)

  Pwn也是最能代表原教旨主義黑客的一個安全研究方向

  題目的二進製文件一般會被部署到服務器上,使用nc xx.xx.xx.xx(ip) xxxx(端口)命令可以與服務器進行交互。並且該二進製文件的副本(與服務器上的完全相同或者基本相同)將作為附件形式被提供給選手下載。

  你需要逆向分析二進製文件副本中存在的可利用漏洞,針對其編寫Exploit(漏洞利用腳本),然後向服務器發起攻擊,拿到服務器上保存的文件或字符串,將其提交至本平台。

  注意命令行中的nc並不是做題工具,而是 netcat ,用以連接遠程服務器的小工具;為了更為方便地解題,我們推薦在Linux下安裝pwntools庫(或者其它),用於編寫可用性較高的Exploit。至於如何安裝,如何使用,就需要聰明的你發揮自己的學習能力啦~

  “Linux 啊......那看來還得整一個虛擬機......先分析一下這個程序看看,”筱懿明緩緩將二進製文件拖進 IDA ,“簡單來說......就是這個程序被部署到了服務器的某個端口上,而我們需要找到他的漏洞並以此獲得遠程服務器的控制權......?”

  筱懿明的嘴角不禁勾起一絲弧度。

  “這種事情,可真是......黑客得不得了呢.....”

  熟練地將附件下載至本地,拖入 IDA,這一次的程序相比起 RE 分區的那幾道題而言分析的難度低了不止一個檔次,整個程序就只有孤零零的幾個函數, main 函數的邏輯更是簡單:

  int __cdecl main(int argc, const char **argv, const char **envp)

  {

  char v4[112];//[rsp+0h][rbp-70h] BYREF

  gets(v4, argv, envp);

  return 0;

  }

  筱懿明的腦子裡緩緩冒出一個問號:?

  “這程序怎麽只有一個 gets 函數啊,呢?我去哪了?”

  筱懿明將目光放到左側的 Window 中,卻也是不見任何 的身影,但哪怕真的有,在 main 函數的執行流中似乎也見不到其蹤跡,不過倒是有著一個名為「backdoor」的小函數引起了筱懿明的注意——

  int backdoor()

  {

  return system(“/bin/sh“);

  }

  “backdoor 是「後門」的意思吧,意思是說運行這個函數就有後門?什麽意思?system我倒是懂...就是直接用系統執行嘛...那/bin/sh又是什麽東西?而且這個程序也執行不到backdoor啊,不是直接gets讀入了就結束了嘛?”

  無數的問題衝擊著筱懿明的大腦,令他陷入混亂之中,雖然這個程序的邏輯相比起他在逆向分區所做的哪怕是簽到題都要簡單得多,但目前的他卻是不能夠理解——這樣一個程序怎麽就能夠讓他“黑入目標服務器”——拿到目標主機的控制權呢?

  “先運行看一下效果...隨便輸點東西試試...”筱懿明熟練地用鼠標雙擊二進製文件,這一次卻是沒有彈出熟悉的黑框框,而是彈出了來自Windows的親切提示——“你要如何打開這個文件?”。

  “這是為啥...看來這個程序只能在Linux上跑?感覺應該是這個樣子...”雖然筱懿明此時還不知道 ELF 與 PE 兩種文件格式,但卻是誤打誤撞找到了解決問題的辦法,“那就裝一個「黑客必備」的 Kali Linux 吧!”

  對於以前使用過 NOI Linux 的筱懿明而言安裝虛擬機並非難事——當然,目前他對 Linux 仍然是一無所知的狀態,只知道如何在 NOI Linux 下使用 DEV C++編譯源程序並進行調試——來自於高中打 NOIP 的那段經歷給他留下的知識——而日常編程他倒是更習慣於在 Windows 上弄,因為以前編寫的代碼基本隻用到了標準庫而 OI 主要考的又是算法因此倒也沒有出過問題。

  正所謂“安裝五分鍾,下載兩小時”,雖然江洲科學技術大學的計算機科學與技術專業在第X輪學科評估中拿到了A-的好成績,網絡空間安全專業更是拿到了A,但是校園網的網速卻是比一些C-的大學還要差,據學長們相傳二十年前為了建設一流計算機學科,當年校園網建設這一塊據說是投入了大量經費,每位同學都給到了5Mbps的帶寬,每人每月有8GB的流量——如今二十多年過去了,筱懿明還依然在享用著學長們留下來的豐富校園網資源,這每個月8GB的5Mbps的流量就好像是一條紐帶,將江洲科學技術大學這二十多屆的學生緊密地聯系在了一起,望著眼前打開個網頁都要等上半天的瀏覽器,筱懿明仿佛回到了二十多年前互聯網剛剛形成時的那個純潔無暇的模樣。

  “還是開個手機熱點來得實在...”雖然校園網的建設似乎尚且落後於時代,但江州科學技術大學卻是整個江洲市——乃至於全國最早完成5G全面覆蓋的高校之一,在5G的強力加持下,一個不到3GB大小的鏡像文件便很快出現在了筱懿明的電腦硬盤中,圖形化的安裝界面也讓筱懿明輕松安裝好了Kali Linux。

  “不過怎麽把這個文件弄進虛擬機裡啊...”

  在網上簡單查找了幾種文件共享的方法之後筱懿明便決定還是直接在虛擬機裡面上競賽平台重新下載題目文件來得實在一些,好在現在主流的桌面Linux發行版都自帶有 Firefox 瀏覽器——不過其實較新的Linux發行版(例如Ubuntu20.04)都支持在宿主機與虛擬機之間直接進行文件的複製。

  “在Linux下運行二進製文件好像還要打開那個黑框框...我記得好像是在文件夾裡右鍵....「Open in Terminal」...有了...”快速百度了一下「如何在Linux上執行程序」,筱懿明在彈出的“黑框框”——終端當中小心翼翼地敲下了「./pwn」。

  “按照之前逆向分析的結果這個程序就只有一個普通的gets()函數,所以現在屏幕上啥都沒有...隨便輸點東西試試...”

  筱懿明嘗試了諸如「114514」、「woshijiaxintang」、「ndfhdhffhjkfdafdvw473847932rkjnac」等各種奇形怪狀的字符串,但每一次程序都在其輸入結束之後便沒有任何動靜地結束了。

  “完全無法理解的存在...這怎就能黑進去...”已經一個多小時過去了,毫無疑問的是,經過了無數次的嘗試,筱懿明依然沒有找到突破口,“按逆向分析的結果這個程序就只是一個簡單的讀入輸入的程序啊?這我能做啥?”

  筱懿明的腦海中突然浮現了一個身影——排在GeekerCTF排行榜第五名的宋文, 大部分題目都解出來了的「Watcherm4n」毫無疑問是能解開pwn方向的入門題的,但是先不說比賽期間交流題目解法是否合乎比賽規則,心高氣傲的筱懿明是不可能接受“連入門題也要問大佬該怎麽做”這種事情的——至少目前他還是“如此有原則”的一個人——當然,是他自認為如此。

  “還是再重新看看逆向有沒有什麽新發現吧...”

  筱懿明重新切回 IDA 窗口,默默地注視著那個孤零零的 gets()函數,他突然想到一個問題——

  “gets()函數向 v4 這個字符數組內存放數據,但是 v4 的大小好像只有112,如果我輸入多於 112 個字符會怎樣呢?”

  思索片刻後筱懿明便決定展開行動,反正只是本地測試,哪怕輸完以後虛擬機炸了他都不會心疼——雖然說這種事情基本上不可能發生。

  112個字符——沒有動靜。

  113個字符——沒有動靜。

  114個字符——沒有動靜。

  115個字符——沒有動靜。

  116個字符——沒有動靜。

  117個字符——沒有動靜。

  118個字符——這一次程序沒有再重新回到「root@kali:~#」,而仍像是還在等待輸入的樣子。

  “卡住了?”

  筱懿明再次敲擊了回車,這一次在終端當中出現了一行陌生的英文——

  「 fault (core dumped)」。
鍵盤左右鍵 ← → 可以切換章節
章節問題回報:
翻譯有問題
章節內容不符
章節內容空白
章節內容殘缺
上下章節連動錯誤
小說很久沒更新了
章節顯示『本章節內容更新中』
其他訊息