




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、ORACLETNS 協議分析1 TNS介紹TNS協議是ORACLE服務端和客戶端通訊的協議。TNS協議傳輸可以使用TCP/IP協議、使用SSL的TCP/IP協議、命名管道和 IPC協議傳輸,其中 TCP/IP協議傳輸是使 用明文傳送。這里我們只分析基于TCP/IP協議上的TNS數據。ORACLE網絡通訊協議 TNS有許多版本,并且大部分向下兼容,我們主要 oracle 920.1.0客戶和服務間的傳輸協議,他的協議版本號為312,其兼容到300。TNS協議有一個通用的頭,通用頭包含一個請求數據類型。不同的服務請求和數據傳輸使用不同的請求數據類型。對于通常意義的查詢操作一般使用數據類型,當出現錯
2、 誤或其他情況時可能使用其他類型。在分析過程中發現以下類型數據:查詢語句出錯會用標記(marker)類型客戶端向服務器請求失敗(如不存在的服務ID),服務器會發送拒絕(refuse)類型客戶機登陸會發送連接類型,而服務器返回一個重定向類型數據 當重定向端口連接完成后客戶端重現發送連接類型數據,服務器返回接受類型 數據,然后能夠正常通訊。2 TNS數據格式TNS數據包含一個通用的包頭,這個包頭包含包校驗,包長度和包類型等信息。 不同的類型的數據實現不同功能的數據傳輸。Common Packet Header 8通用包頭Data可變數據2.1 通用包頭格式每個TNS完整數據都包含一個通用包頭,他說
3、明接受數據的長度及其相關校驗和解析的信息。Length2包的長度,包括通用包頭Packet check sum2包的校驗和Type1TNS類型Flag1狀態Header check sum 2通用頭的校驗和注:Length :包長度(包括包頭)Type:數據包的類型類型號類型說明1 連接(CONNECT )2 接受(ACCEPT )3 確認(ACK )4 拒絕(REFUTE )5 重定向(REDIRECT )6 數據(DATA )7 NULL89 中止(ABORT )1011 重新發送(RESEND)12 標記(MARKER )13 ATTENTION14 控制(CONTROL )2.2連接包
4、結構(0x01)在客戶端和ORACLE要建立連接時,客戶端首先發送一個連接結構,然后服務器返回重定向包(參見 2.5)。typedef struct TNS_CONNECT_headerUCHAR NS_ver2;UCHAR Compatible_ver2;UCHAR ser_opt1;UCHAR ser_opt2;UCHAR SDU_size2;UCHAR TDU_size2;UCHAR NT_protocol_ch1;UCHAR NT_protocol_ch2;UCHAR Max_packets2;UCHAR Hardware_12;UCHAR data_length2;UCHAR Off
5、set2;UCHAR Max_data4;UCHAR flag。; UCHAR flagl;/*java thin interface has no items and id, if it is not jdbc thin, use offset to override these 有些版本TNS協議中沒有下面幾項 */UCHAR item14;UCHAR item24;UCHAR ID8;UCHAR unknown8;followed by decode_des_conn_data */連接字符串TNS_CONNECT_HEADER;連接字符串格式:連接功能連接字符串PING(CONNECT
6、_DATA=(COMMAND=ping);SHOW(CONNECT_DATA=(COMMAND=SHOW LOGFILE);VERSION(CONNECT_DATA=(COMMAND=version);STATUS(CONNECT_DATA=(COMMAND=STATUS);ESTABLISH(CONNECT_DATA=(SID=OBJ_SRVR) (CID=(PROGRAM=)(HOST=11) (USER=SOME_USER);ESTABLISH_REAL_DB(CONNECT_DATA=(SID=wouprd) (CID=(PROGRAM=)(HOST=spru
7、) (USER=some_user);SERVICE_REGISTER(CONNECT_DATA =(COMMAND=service_register)(LOAD=0) (MAXLOAD=1)(INSTANCE_LOAD=0)(INSTANCE_MAXLOAD=0)(SHUTDOWN_NOTIFY=ON)(FLAGS=0)(SERVICE=obj_srvr)(INFO=PID$COLON$pid)(DISPLAY=PRESPAWNED SERVER)(SERVICE_ID=BBB99B99999B-99BB-B999-B99BB9999B99)(CLASS=ORACLE)(
8、VERSION=81500)(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=$port);REDIRECT(ADDRESS=(PROTOCOL=tcp)(HOST=76)(PORT=$port);如:數據庫一般的連接,即ESTABLISH的連接字符串為:(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=topsec-syangjp)(PORT=1521)(CONNECT_DATA =(SID=test)(SERVER=DEDICATED)(CID=(PROGRAM=D:oracleo
9、ra92binsqlplusw.exe)(HOST=TOPSEC-MYANGJP)(USER=myangjp)2.3接受包結構(0x02)用戶重定向之后,需要用重定向端口向服務器發送連接,客戶端發送連接包,服務 器連接成功則返回接受包,否則返回refuse包struct TNS_ACCEPT_headerunsigned char NS_ver2;unsigned char ser_opt1;unsigned char ser_opt2;unsigned char SDU_size2;unsigned char TDU_size2;unsigned char Hardware_12;unsig
10、ned char data_length2;unsigned char Offset2;unsigned char flag。;unsigned char flagl;/unsigned char unknown8;/*no following data*/;2.4拒絕包結構(0x04)typedef struct TNS_REFUSE_headerUCHAR uUserRefuseReason;UCHAR uSysRefuseReason;unsigned short int data_length;拒絕字符串TNS_REFUSE_HEADER;拒絕字符串:REFUTE(DESCRIPTIO
11、N=(TMP=) (VSNNUM=153092352) (ERR=12505) (ERROR_STACK=(ERROR= (CODE=12505) (EMFI=4)2.5 重定向包結構(0x05)typedef struct TNS_REDIRECT_headerUCHAR data_length2;UCHAR data; / 長度為 data_length;重定向數據TNS_REDIRECT_HEADER;重定向數據:REDIRECT(ADDRESS=(PROTOCOL=tcp)(HOST=76)(PORT=$port);2.6 標記包結構(0x0c)typedef
12、 struct TNS_MARKER_headerUCHAR data_length3;TNS_REDIRECT_HEADER;注:當請求命令出錯時,服務器會返回三個標記包2.7 控制包結構(0x0d)暫時沒有發現該結構2.8 數據包結構(0x06)數據包負責傳輸數據庫客戶端和服務端的各種操作。每個操作由一個或幾個命令組 成,可以是在同一個數據包中有幾個命令結構組合起來,也可以分開傳輸一些命令。Common Header8通用包頭Data flag2狀態Command packet可受數據Command packet 可受數據Command packet可艾數據具體各種操作命令的組成和轉換現在
13、還不能完全確定,但是對于一些基本的SQL查詢我們是可以分析的,下面我們主要分析一些命令結構和相關ORACLE操作的命令組成序列。有些有許多結構和它的具體字節不影響ORACLE基本命令的分析,所以只做了簡單的分析,對于 SQL的一般查詢語句TNS協議主要通過數據包的0x0303和0x035e命令來傳輸數據,返回結果主要是通過0x06和0x08命令傳輸數據,0x06主要傳輸數據,0x08主要傳輸系統配置相關數據。2.8.1 數據包通用結構數據包有一個 2字節的狀態包和多個命令包組成:Data flag2狀態Command packet 可受命令包Command packet可艾命令包Data_fl
14、ag 一般情況為零,分析發現退出時為0x0040Send token0x0001Request Confirmation0x0002Confirmation0x0004Reserved0x0008UNKNOWN0x0010More Data to Come0x0020End of File0x0040Do Immediate Confirmation0x0080Request to send0x0100Request Nt Trailer0x0200命令包(Command packet )結構如下:Command1命令Sub command1子命令Data可艾命令包數據命令(Command )
15、說明(以下命令為主命令的基本功能,但是還不能完全確認)0x01Set Protocol0x02Set Data Type Representation0x03User to Oracle Request0x04Return Status0x05Access User Address Space0x06Raw Transfer Header0x07Raw Transfer Data0x08Return OPI(Oracle Program Interface) Parameter0x09Oracle Function Complete0x0aN Error Return Definition0x
16、0bSending I/o Vector only for fast UPI(User Program Interface)0x0cSending Long for Fast UPI0x0dInvoke User Callback0x0eNetwork Service0x0fData Intergrity0x10Supervisor0x110x12通過分析具體的包和一些其他相關軟件,得到以下相關命令和子命令,許多命令還1 fU 幺 ALL一步確認命令子命令說明使用0x010x05請求CLIENT TYPE0x010x06Set Protocol0x010x2cIDENT0x020x00RESE
17、T0x020x01CHAR_MAP0x020x540x030x010x030x02SQL_OPEN0x030x03QUERY0x030x04QUERY SECOND0x030x05FETCH MORE0x030x080x030x09DISCONNECT0x030x0E0x030x27SET_LANG0x030x2BDESC_COLS0x030x3BDB VERSION0x030x47FETCH0x030x51Set password0x030x52Set user0x030x54HANDSHAKE40x030x5ESQL0x030x73AUTH20x030x76AUTH10x030x77查詢表
18、結構信息DESC0x040x01ACK0x040x02ACK0x040x05ACK0x060x00More Row Result Info0x060x01First Row Result Info0x080x010x080x050x080x080x080x9cDb version0x100x19Field InfoSELEC返回0x110x690x110x6b0x110x782.8.2 Data Format (length+data )對于ORACLE的TNS協議結構中數據傳輸,其主要采用以下方式,即用一個標志 和長度字符來傳輸數據。具體格式如下如果開始的大數據標志為0xfe,則結構如下Bi
19、g Data Identify11返回列數 DataDataLengthDataLengthDataLength1如果DataDataLengthData1Length0如果開始的大數據標志不為0xfe ,則結構如下:DataLength1返回列數DataDataLength 字符串格式(1) Char ( n), ncharData可艾實際數據Data1可受空格注:數據和數據 1總長度為n(2) Varchar (n)Data可變( length (為數字長度),則后面有(Intlength+1-length )位(只傳輸位)值為 0的數據沒有傳輸(2)負數Id13f-整數部分
20、長度整數部分Intlength=3f-id小數部分DecLength=length-intlength-1Magic10x66數據的第一位標志整數部分長度整數部分長度+小數部分長度=數據總長度-2整數部分從后向前每兩位(代表 0到100)用一個字節(十六進制)表示,且為101-十六進制值小數部分從后向前每兩位(代表 0到100)用一個字節(十六進制)表示,且為101-十六進制值如果沒有小數部分,Intlength+2 length (為數字長度),則后面有(Intlength+2-length )位(只傳輸位)值為 0的數據沒有傳輸 日期格式Year1Year1-100Year2
21、1Year2-100Month1MonthDay1DayHour1Hour-1Minute1Minute-1Second1Second-1Yearl為年前兩位,值為 year1-100Year2為年后兩位,值為 year2-100Month為月,值為 monthDay為月,值為 DayHour為月,值為 Hour-1Minute 為月,值為 Minute-1Second 為月,值為 Second-12.8.3 0x03 0x02 SQL_OPEN發現當進行0x0303命令查詢時Request id1Magic82.8.4 0x03 0x03 QUERY該命令也傳輸一些 SQL查詢請求,不能確定
22、什么時候使用0x0303命令進行查詢,在分析過程中,發現在登陸之后進行一些系統請求用到了該命令。Request id1Magic12Data Format可變查詢語句2.8.5 0x03 0x04 QUERY SECOND很少出現這個包,也沒具體分析Request id1Magic122.8.6 0x03 0x05 FETCH MORE用戶查詢是通過 0x035e命令來請求數據的返回的結果不能一次傳輸完成,客戶端會不斷發送該命令向服務器請求數據,直到服務器告訴客戶端數據傳送完成。Request id1Magic82.8.7 0x03 0x08 HANDSHAKE7Request id1Magi
23、c42.8.8 0x03 0x09 DISCONNECT當客戶端斷開連接時,客戶端發送請求到服務器(用0x0309 ),服務器發送 0x0901確認。Request id12.8.9 0x03 0x3B DB VERSION請求ORACLE數據庫版本信息,通過 0x089c返回結果。Request id1Magic162.8.10 0x03 0x47 FETCHRequest id1121Magic2.8.11 0x03 0x51 Set password當用戶使用 GRANT 更改密碼時,客戶先通過 0x0352發送用戶信息,然后通過 0x0351發送密碼信息。Request id1Magi
24、c14User name length1用戶名長度Magic299UsernameUsernamelengthSession key32Host info可受2.8.12 0x03 0x52 Set user當用戶使用 GRANT 更改密碼時,客戶先通過0x0352發送用戶信息,然后通過0x0351發送密碼信息。Request id1Magic14User name length1用戶名長度Magic299UsernameUsernamelengthHost info可受2.8.13 0x03 0x5E SQL般的SQL查詢語句是封裝在0x035e命令結構中,用該命令請求數據時,服務器返回數據
25、和確認命令數據。如果查詢命令錯誤,則返回錯誤代碼和錯誤消息。如果查詢正常,服務器返回執行結果數據和確認命令。它的結構如下:Request id1Magic180返回列數Data Format可受SQL查詢語句Magic348總是為0x072.8.14 0x03 0x73 AUTH2用戶登錄過程發送用戶密碼和用戶信息,包括用戶名,終端名稱,客戶端程序,機 器,客戶端進程號。2.8.15 0x03 0x76 AUTH1用戶登錄過程發送用戶相關信息,包括用戶名,會話密鑰,終端名稱,客戶端程序, 機器,客戶端進程號和對服務器一些設置(語言,時區等)。2.8.16 0x03 0x77 desc tabl
26、e當用戶通過 DESC TABLE tablename命令查詢用戶表屬性信息時,客戶端發送 0x0377命令到ORACLE服務器。Request id1Magic14返回列數Table name length1表名長度Magic216Data Format可受 SQL查詢語句2.8.17 0x04 0x01 ACK各種數據庫操作會通過0x04命令來返回結果, 如是否正常運行, 影響行數,影響的表格,操作類型等,如果錯誤還要返回錯誤消息,以下 0x0402, 0x0405均為數據庫查詢返回,但是還不知道什么情況適用這三種應答。數據應答報結構如下:Magicl4Record num4記錄數,該操作
27、影響記錄數Error num2返回錯誤代碼Magic28Type1操作類型(如 select, insert, create 等)Magic32Obj Id2操作象ID ,如表的對象IDMagic419Ack id1確認號(為該請求號 +1 )Magic546Msg length1消息長度MsgMsg消息length2.8.18 0x04 0x02 ACK同 0x04012.8.19 0x04 0x05 ACK同 0x04012.8.20 0x06 0x00行結果信息如果0x06 01命令傳送數據未完成則后續數據用0x06 00命令傳輸,且每行只傳輸和前一行不同的列。行結果數據結構信息Magi
28、c12Column Num2返回列數Magic223Column distributing口受 MfT Column Num/8Magic31總是為0x07Row Data可受Row Split可受Row Data可受Row Split 口受 Row Data可艾行數據(Row Data )結構信息Data Format可艾列數據Data Format 可受列數據Data Format可艾列數據注:對于第一行列數為Column Num非第一行,每行列數和列分布信息根據行分隔結構獲取行分隔結構信息Id1總是0x15Column Num2返回列數Column distributing可受等于Col
29、umn Num/8Magic31總是為0x07Column distributing 為該行 列分布信息,如果第i列不為空,則 Column distributing 的第 I bit 為 12.8.21 0x06 0x01開始行結果信息SQL查詢語句返回結果主要包括字段信息和數據,其中字段數據用0x1019傳輸,數據有 0x0601和0x0600傳輸。對于0x0601命令只返回開始幾行數據(一般為一行),第一行顯示所有的列 ,以后每行傳輸和前一行不同的列,即如果和前一行數據相同,則不傳送數據,如果多行的某一 列都相同,則只傳送最開始一行的該列數據。Magic12Column Num2返回列數
30、Magic223Column distributing1總是為0x00Magic31總是為0x072.8.22 0x08 0x01經分析發現驗證密鑰、查詢表的結構、0x033b、0x0302命令返回結果用命令不過其格式非常不規則,很難分析。2.8.23 0x08 0x05當用戶查詢請求時,有時返回結果之后會出現這個命令,具體怎么使用還不是很清 楚。Magicl23Value Num2返回列數Data Format數據Data Format 數據Data Format數據0x0801 ,程序等。2.8.24 0x08 0x08當用戶發送密鑰成功后服務器返回響應的一些消息,如會話密鑰,主機名,Ma
31、gic1Data length4Data Format可受數據Data length4Data Format 可受數據Data length4Data Format可受數據如果data length為0則后面數據為2.8.25 0x08 0x20 Session Key當當前用戶使用grant命令更改當前用戶密碼之后,系統需要重新發送用戶名(0x0352 )和密碼(0x0351 ),并更新會話密鑰。Magic1Session key32會話密鑰2.8.26 0x08 0x9c Db version當用戶請求數據庫版本信息(0x033b )時通過本命令返回版本信息。Magic1Data Form
32、at可受數據庫版本信息Data Format可受數據庫版本信息Data Format可受數據庫版本信息2.8.27 0x09 0x01然后斷開當ORACLE服務器收到用戶關閉連接的消息時通過本命令確認關閉操作,TCP/IP 連接。Magic11總是 0Magic222.8.28 0x10 0x19 Field InfoSQL查詢語句如果有數據返回(如SELECT語句),則先返回各字段信息,然后在返回數據信息。字段信息結構:Magic129Field num2字段個數Magic23Field Info可受字段信息Field Info 可受字段信息 Field Info可受字段信息Magic31207 00 00 00 07 78 6a05 1a 0f 0b 0c注:字段信息個數為field num單個字段信息結構:Magic11Type1字段類型Magic21Precision1Scale1Magic320Charsetid2Charsetform2Spare32Magic42Is null1length1length4Data Format可受2.8.29 0x11 0x69當用戶查詢數據時,即使用 0x035e命令時通常會先發送0x1178和0x1169命令。Request id1Magic122.8.30 0x11 0x6
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 運動頭盔內部結構對安全性能的影響考核試卷
- 如何選擇適合的嵌入式開發平臺試題及答案
- 公路建設項目的生命周期管理試題及答案
- 藥用純化水設備與系統設計考核試卷
- 行政組織理論變革的動態分析及2025年試題及答案
- 航空員工培訓與發展考核試卷
- 油砂資源綜合利用考核試卷
- 應對突發情況的公路工程試題及答案
- 數據庫技術文檔的重要性試題及答案
- 信息系統監理師考試各省市情況試題及答案
- 2023年《畜牧獸醫綜合知識復習題及答案》
- 八年級語文下冊(部編版) 第四單元 經典演講-單元主題閱讀訓練(含解析)
- 2024新高考英語1卷試題及答案(含聽力原文)
- 2023-2024學年譯林版四年級英語下冊Unit8《How are you?》單元檢測卷(含聽力及答案)
- DL/T 5352-2018 高壓配電裝置設計規范
- 養老院食物中毒應急預案
- 國家開放大學《消費者行為學》形考任務實訓(六選一)參考答案
- AQ∕T 7009-2013 機械制造企業安全生產標準化規范
- JTG-C30-2002公路工程水文勘測設計規范-PDF解密
- 2024年廣東廣州越秀區小升初考試語文試卷含答案
- 慢性病照護智慧樹知到期末考試答案2024年
評論
0/150
提交評論