Hackthissite Realistic 第15關心得

網址:http://www.hackthissite.org/missions/realistic/15

本關重點:耐心、zip檔解密、php可變變數、雜湊值還原、Linux指令、C語言緩衝區溢位

題目:Simple Mail
Message: Hi, please help me if you are against war like me. Rumours are saying that the seculas Ltd. company is developing an awful new laser aided weapon, and that they already have patents pending. Please try to find out what their latest patents are about. People say you know your shit and that you are an amazingly good hacker. It should not be a prob for someone with your skills. What I know is that seculas Ltd. hired a new programmer who is responsible for the server, and he passworded everything and always with different passwords. I heard about him, he is one the kind who locks the front door twice and leaves the back-door open.
If you think like me please help me and fight those people that make money with war.
大意就是, 某軍火商正在製造可怕的雷射武器,希望你阻止軍火商申請新的專利,並查出他們的專利內容有哪些。題目透漏一個有用的情報,維護官網的工程師雖然都有將資料加密,但卻是個粗心的人。

搜尋重要目錄和程式

就跟所有web滲透的題目一樣,先找出重要的目錄、或程式。並且尋找可以注入變數的欄位。
index.php
products.php
questions.php................似乎不能注入
storequestion.php.........似乎不能注入
imprint.php
jobs.php
application_form.php....似乎不能注入 
storeapplication.php......似乎不能注入
images/
     沒甚麼用的圖片們

失望的找不到可疑之處後,搜尋各php的html有沒有提到其他目錄。這裡我用" / "當作搜尋的關鍵字,很快地就發現一個隱藏的目錄" _******s_/i****s/**.gif ",接者在目錄中發現一個壓縮檔" b*****.zip "和一個子目錄,稍微瀏覽子目錄發現沒甚麼用的圖片。便把目光轉向很可疑的而且有加密的壓縮檔。

解開加密的壓縮檔

這步驟非常煩人,我失敗了N次,最後才發現是因為壓縮程式一定要使用winace,請大家先下載 winace 在接下去看。我們隱約可以看到壓縮檔中包含兩個子目錄和四個檔案,如下:
 i***************s/
     m*****h.php
     m*****w.php
 m********************************)/
     i***x.htm
     s***l.php

pkcrack 這個軟體專門用來執行已知明文攻擊( chosen plaintext attack),所以我們接著搜尋官網中有哪些網頁可以對應到壓縮檔中的那四個檔案。不過實際只要看htm檔就好,因為官網的目錄沒有公開瀏覽的漏洞,所以你不能下載到PHP原始碼,客戶端只能看到html。找到關鍵htm後,先用 winace 將 i***x.htm 壓縮成 .zip,並且只能是1245 bytes。這裡我用過7-zip、winrar、winace,相同演算法,檔案大小卻不相同,最後能成功解密的只有 winace。成功壓成 1245 bytes的 .zip後,打開 cmd 在 pkcrack 目錄中執行以下指令:
 pkcrack -C b*****.zip -c i***x.htm -P i***x.htm的zip -p i***x.htm -d crack.zip -a

要是成功的話 crack.zip 就是解密後的 b*****.zip。

破解登入頁面

研究一下 b*****.zip 的檔案,發現有另一個隱藏的php檔, i***************s.php。 回到官網來看一下這個php,恭喜你得到另外一個謎題。而壓縮檔中的 m*****h.php 和 m*****w.php 是用來驗證 i***************s.php 的登入帳號和密碼是否正確。流程應該是:

  1.  i***************s.php?username=admin&password=我不知道
  2.  post到 m*****w.php,m*****w.php 接收變數之後再 include m*****h.php
  3.  m*****h.php 再從 f****s/m**********s.txt 讀取真正密碼。
  4.  在 session 中寫入OK,就能繼續執行。

這裡有兩個關鍵,一就是 admin 的密碼居然很扯的以明文寫在 i****x.htm 。二就是只要我們能跳過 m*****w.php 直接 post 資料到 m*****h.php 就能跳過驗證流程。很快地用關鍵字" admin: "在  i****x.htm 找到密碼,然後我們修改一下 i***************s.php 的表單如下:
<form method="post" action="m*****h.php">
         <input type="text" value="S******ck," name="m**_****word">
         <input type="hidden" value="admin" name="m**_***rname">
         <input type="text" value="../../i***x.htm" name="file***e">
         <input type="submit" value="read messages">
 </form>


接著按下送出,就能得到 session 已經寫入OK的成功訊息(小抱怨一下,到底怎樣的神人才能看的出來 m*****h.php 能收 post 的值。)。因為session已寫入OK,我們回到i****************s.php 隨便輸入都可以通過驗證。接著會看到一段訊息,提到一個機密目錄 a***n_***a/ ,我們試著搜尋目前還沒派上場的的 s***l.php 是否存在此目錄中,映入眼簾的又是另外一個謎題。

破解登入頁面again

這次來研究一下 s***l.php 的秘密,大概在125行左右是驗證帳號和密碼的流程。要是沒通過驗證就會輸出警告訊息。重點在123行的可變變數 $$P**_****_***R 也會包含在警告訊息中。又剛好這個可變變數是就是我們輸入的帳號,耶!! 於是只要直接在帳號中輸入 s***l.php 的密碼變數 P**_****_*W 而密碼欄隨便輸入,按下確定。就可以發現錯誤訊息會包含一段可疑的兩次雜湊的雜湊值,丟到網路上破解就能得到 root 的密碼。然後開心地輸入 root 和 解開後的密碼,令人抓狂的又是一個謎題。

s***l.php 提到這是一個 linux 指令操作介面,我們直接輸入 ls 看到以下檔案目錄:

helpdesk/
    helpdesk.zip
mypr0n/
    沒用的圖片
test/
    chkuserpass.c.zip
s***l.php
v*********ts.php
v*********ts2.php

helpdesk.zip是很有趣的對談但對於題目沒有幫助。chkuserpass.c.zip好像某種密碼的雜湊處理,可能有用先放著。重點在於打*號的 v*********ts.php 和 v*********ts2.php ,沒錯!! 又是令人崩潰的登入頁面。

破解登入頁面final

先試試看sql injection,不行。只好google,又再次佩服神人的提示:緩衝區溢位攻擊。

打開chkuserpass.c.zip 第77行,strcpy( A, B )函式能將B字串的內容複製到A字串中,第84行, strcat( A, B) 函式將B字串接到A字串後面。如果B字串大於A字串,這兩函式會產生典型的緩衝區溢位問題,只要你試著輸入夠長的字串到帳號或密碼欄位,就有機會覆蓋 is_pass_correct 這個重要變數。至於要輸入什麼字串以通過驗證,就請看87行。大概字串長度是210到230個字,就請大家試試看吧。

提示,我猜測 chkuserpass.c 的checkit函數的記憶體配置如下圖:



留言

這個網誌中的熱門文章

資安JAVA(十一):X-XSS-Protection

資安JAVA(十):X-Content-Type-Options

以 SharpPcap 實作可收聽封包的 C# 程式