攻防世界Web之fakebook
開啟題目,得到一個網頁,包含一個表格、兩個按鈕。
習慣性先檢視網頁原始碼,但沒發現有效資訊。
<!doctype html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Fakebook</title> <link rel="stylesheet" href="css/bootstrap.min.css" crossorigin="anonymous"> <script src="js/jquery-3.3.1.slim.min.js" crossorigin="anonymous"></script> <script src="js/popper.min.js" crossorigin="anonymous"></script> <script src="js/bootstrap.min.js" crossorigin="anonymous"></script> </head> <body> <div class="container"> <h1>the Fakebook</h1> <p>Share your stories with friends, family and friends from all over the world on <code>Fakebook</code>.</p> <table class="table"> <tr> <th>#</th> <th>username</th> <th>age</th> <th>blog</th> </tr> <tr></tr> </table> </div> </body> </html>
開啟login.php
,是一個登入頁面,隨手試了幾個弱口令和SQL注入,沒有成功,檢視網頁原始碼,也沒有提示,估計問題不在這。
開啟join.php
頁面,隨便輸入一點東西提交,都提示錯誤:Blog is not valid.
,說明對blog
欄位的格式有要求,從字面和題目資訊上理解,就是分享你的故事,應該沒什麼限制才對。
後來想了一下,可能是需要提交一個部落格地址,嘗試提交http://127.0.0.1
和http://localhost
,均提示錯誤。
猜測可能過濾了127.0.0.1
和localhost
關鍵字,隨手試一下www.baidu.com
,此時提示成功。
再次開啟首頁,發現多了一條記錄。
點選使用者名稱111
the contents of his/her blog
,興奮了一下,不會是ssrf吧?
直接檢視原始碼,發現是空的base64
。
直接上DNSLOG試試,也不行。到這裡思路就斷了,重新整理了一下,發現被繞進去了,問題不一定在blog
欄位,這個使用者名稱和年齡是有回顯的,猜測是XSS或二次注入,直接排除XSS,試一下注入吧。
好傢伙,直接報錯,把Web路徑報出來了,明顯是SQL注入。
嘗試了一下插入已存在的使用者名稱時會提示使用者名稱已存在,說明後臺會先在資料庫中查詢使用者是否存在,可以用圖中的SQL注入繞過檢測。
猜測後臺SQL語句如下:
# 檢查使用者是否存在 SELECT * FROM user WHERE username=''; # 插入新的記錄 INSERT INTO user SET username='',passwd='',age='',blog='';
但是插入資料時,注入的使用者名稱會被直接寫入資料庫,說明寫入的時候用SQL預編譯,無法注入。
直接用sqlmap跑,沒發現flag,把users
表dump出來,data
這一列明顯是PHP序列化,但是隻能控制其中的字串,不能控制整個反序列化字串,所以不能使用反序列化。
使用sqlmap的--sql-shell
引數,進入SQL互動,嘗試執行SQL語句,把原始碼dump出來分析,沒分析出啥。
select load_file('/var/www/html/index.php');
select load_file('/var/www/html/user.php');
select load_file('/var/www/html/db.php');
select load_file('/var/www/html/view.php');
隨手試一下flag.php
,居然成功了。
select load_file('/var/www/html/flag.php');