XCTF fakebook


一.進入實驗

  1.先用   dirsearch  去掃描目錄  python dirsearch.py -u "http://111.198.29.45:33988/" -e *

  

 

   根據掃描的結果我們發現了robots.txt,user.php,view.php等等,掃完之后先不急着去訪問,在進入實驗環境后,  

  提示讓我們注冊一個賬號,這里隨便注冊,注意一下blog的格式就行。

  然后用我們注冊好的賬號進行登錄。

  2.登錄后發現url 為  http://111.198.29.45:33988/view.php?no=1  ,第一時間想到是否存在sql注入,我們輸入   '

  

 

   根據報錯的顯示,可以肯定存在sql注入的,然后我們用 order by 語句判斷查詢的字段數目,以便於后續進行  union 查詢,

  先 輸入   1  order by  6#  ,查詢失敗。

  

 

   然后我們再輸入  1 order by 4 #  ,此時頁面顯示正常,由此判斷查詢的字段數為4。

  獲得了字段數,我們就進行union聯合查詢,嘗試輸入  1 union select 1,database(),1,1 #

  頁面返回 no hack ~_~,很明顯應該是后端檢測到我們的注入關鍵詞。

  這里我們猜測它檢測到的可能是   union select,我們嘗試用/**/進行繞過,

  在mysql中 /**/插入到sql語句中既可以當注釋,也可以當空格,所以這里我們構造  -1 union/**/select 1,database(),1,1 #,

  

 

   果然能夠繞過成功,得到當前的數據庫名為fakebook,那么我們以同樣的方法獲取其他數據:

  獲取表名: -1 union/**/select 1,group_concat(table_name),1,1 from information_schema.tables where table_schema='fakebook'#

  

 

   

  獲取列名: -1 union/**/select 1,group_concat(column_name),1,1 from information_schema.columns where table_name='users'#

  

 

 

  

  這里我們重點看一下data,覺得可能有我們需要的信息:   -1 union/**/select 1,data,1,1 from users #

  

 

   這里發現data字段里面的值為我們開始注冊是輸入的信息,它將這些信息進行了序列化並存儲在數據庫中,然后當我們查詢的時候再反序列化顯示在前端。

  3.開頭我們掃描出了  robots.txt文件,那我們就訪問看看。

  

 

  再根據提示打開user.php.bak,發現了如下代碼:

  

 

  通過這段代碼可以知道,這個函數會讀取blog,然后訪問它,如果訪問成功則會讀取文件的信息,否則返回404,

   所以我們可以通過反序列化來實現ssrf讀取任意文件,構造我們想要的路徑,然后為了繞過正則,不從注冊登錄的地方下手,

  直接人為構造聯合查詢返回語句,data字段在第四個位置。

  構造如下:

  

 

 

  view.php?no=0/**/union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}

  注冊成功后它就會顯示你注冊的賬戶信息,然后查看源碼,如下圖,點擊iframe的src屬性值即可獲得flag

  

 

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM