個人網站 http://www.wjlshare.tk
0x00前言
主要考了三塊 第一塊是文件包含獲取源碼 第二塊是通過sql繞過注入獲取密碼 第三塊是三參數回調后門的利用 做這題的時候結合了別人的wp 同時自己也學習了很多 所以來總結一下
平台地址: https://cgctf.nuptsast.com/challenges#Web
題目地址: http://cms.nuptzj.cn/
0x01正文
打開題目發現是一個網頁先把流程走一下看看有哪些地方可以鑽空子
我們來一個個的來看一下 在第一個紅框中輸入 1 點擊搜索 發現不行 提示要本地瀏覽器訪問才可以 那么這里有可能有需要修改 User-agent來進行訪問 昵稱 留言那題 提交之后 會有一個彈窗 提示查看源碼有驚喜
繼續看 發現 這個CMS 說明這里有可能有文件包含
很有可能是 通過 php 偽協議來獲取頁面源碼的 我們來試一下 發現在這里可以讀取頁面的源碼
http://cms.nuptzj.cn/about.php?file=php://filter/convert.base64-encode/resource=say.php
通過base64解碼可以獲取到 我們這個say.php 的源碼 看了一下源碼發現存在 mysql_real_escape_string 這個會把特殊字符進行轉義 所以我們看看 about.php 這個頁面的源代碼
這個看起來像是突破口 我去嘗試了一下讀取config.php 發現這個目錄不讓讀取 然后loginxlcteam 看起來像一個后台登陸頁面
在嘗試了一些弱口令無果之后嘗試別的方向 看看 可不可以從別的地方獲取登陸密碼和賬號 之前那個需要本地瀏覽器訪問的那邊有可能就是突破口 嘗試了讀取源碼之后 發現 源碼中做了一個判斷如果 user-agent 是Xlcteam Browser就可以進入
感覺這里有可能有sql注入 但是 這里引入了防sql注入的地方 同時也可以看到 這里sql獲取是以post的方式進行獲取的 獲取參數 soid 的數值 查看sql給過濾的源碼
這里只是簡單的對 這些關鍵字變成空了 所以我們只要復寫就可以了 至於空格只需要 /**/繞過就可以了 簡單的測試后發現有四個列 union select 1,2,3,4,5 這樣測試 在 4的時候出現了數字 我本來是使用order by 進行測試的 但是 應該是我水平的問題 發現測試無果
注入點為 2,3 后面就比較簡單了 再結合之前文檔里面的提示
soid=-1//ununionion//selselectect//1,(seselectlect//group_concat(userpapassss)//frfromom//adadminmin),(seselectlect//group_concat(usernanameme)//frfromom/**/adadminmin),4
爆出我們所需要的信息
寫了個小腳本 得出登陸密碼
numbers = [102,117,99 ,107, 114 ,117, 110, 116 ,117] for i in numbers: print(chr(i),end="") #fuckruntu
得到密碼 fuckruntu 賬戶admin
因為我們不知道這個小馬的密碼是什么 所以老辦法 獲取源碼
這是一個三參數回調后門 http://cms.nuptzj.cn/xlcteam.php?www=preg_replace 這個回調后門主要是利用了回調函數 回調函數 簡單的來說就是把函數當成參數來進行使用 這里 preg_replace 就是函數 被 $e 進行獲取 然后當作參數進行傳入
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索subject中匹配pattern的部分, 以replacement進行替換。當使用被棄用的 e 修飾符時, 這個函數會轉義一些字符,在完成替換后,引擎會將結果字符串作為php代碼使用eval方式進行評估並將返回值作為最終參與替換的字符串
wtf=print_r(scandir(‘.’));
獲取到flag