第27關使用GET請求提交引數,在url地址欄中構造payload即可
后端原始碼中過濾了/*,--,#,空格,select,union,需要考慮一下怎么繞過這些規則
![]()

![]()
![]()
由于原始碼中過濾了--和#等注釋,而且在id兩邊拼接了雙引號,我們可以考慮不使用注釋,而是使用雙引號閉合來確保SQL語法的正確性,從而實作繞過
針對空格的過濾,我們可以使用括號()來替代空格
至于select和union等關鍵字的過濾,由于其沒有嚴格過濾大小寫,我們可以使用大小寫來繞過
先在url中輸入 1"and"1,引數拼接到SQL中會變成下面這樣
![]()
and后面的"1"會被轉換成true,是SQL恒成立,正常查詢處用戶資訊,從而顯示在頁面中

接下來輸入 1"and"0,引數拼接到SQL中是下面這個樣子
![]()
and后面的"0"會轉換成false,使SQL恒不成立,查詢不出用戶資訊導致頁面空顯示

用戶輸入的引數可以是SQL恒成立或恒不成立,從而控制SQL的執行結果,也就意味著存在SQL注入,注入點為雙引號字符型注入,由于報錯資訊被寫死了,這一關可以使用布爾盲注
1"and(length(database())>1)and"1
頁面正常顯示資訊說明條件成立,由此可以判斷出資料庫的長度大于1

依次增加長度到8時,頁面空顯示,意味著條件不成立,也就是說資料庫的長度是8
1"and(length(database())>8)and"1

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294133.html
標籤:其他
