進入場景映入眼簾

需要注冊賬號
注冊好之后,登錄跳轉頁面

突破點應該就在這里了
我們先上傳一個php檔案


顯示不正確的檔案擴展名,被攔了
用burp抓包改資訊
成功上傳 但是沒有上傳路徑 只能上傳不能利用
思考(題目給的是upload,給的引導思路 就是上傳檔案拿flag)
我試著上傳jpg,png格式的圖片檔案

有檔案名回顯,這說明檔案已經被傳到了資料庫中,游覽器又從資料庫中讀取了上傳的檔案,那么這個程序久有可能觸發sql注入,那么將檔案名中加入sql陳述句,嘗試burp抓包修改

可以看出select被過濾了,之后的嘗試 from也被過濾了,那么嘗試雙寫繞過

雙寫繞過成功
由此可以得出結論肯能存在sql注入.
嘗試去驗證sql注入的存在


sql陳述句是執行了,但無法輸出執行結果.(可能資料被過濾掉了)
那么嘗試將查詢結果改為16進制輸出

輸出7765626(7765625 + 1) 用16進制解碼字串為web.
這里有個坑, 插入資料庫檔案名中如果包括SQL陳述句,在回傳資訊時,服務器將對字母進行截斷(某些特殊字符也會截斷或過濾) 嘗試用10進制表示 conv函式(src,from_base,to_base) src是要轉換的資料, from_base是原進制, to_base是目標進制.
使用CONV是因為題目過濾了回顯有字母的情況,如果出現了字母則后面的內容就不顯示,所以需要將16進制的內容轉成10進制
構造payload '+(selselectect conv(hex(database()),16,10))+'.jpg

用了科學計數法(估計是數字太長了,這里就需要截斷獲取資料了
構造payload:'+(selselectect conv(substr(hex(database()),1,12),16,10))+ '.jpg (經過測驗發現長度最大為12,超過12 就會回傳科學計數法表示)

通過解碼得到web_up
取下一段'+(selselectect conv(substr(hex(database()),13,12),16,10))+ '.jpg

解碼得load拼起來得web_load
有看庫名,就開始爆表名,再之后是欄位名
不再一一贅述 方法類似
最后得到flag
!!_@m_Th.e_F!lag
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/302969.html
標籤:其他
下一篇:XCTF-WEB新手題
