CN107038208A - 解析和还原tns协议314版本中sql命令和参数的方法 - Google Patents

解析和还原tns协议314版本中sql命令和参数的方法 Download PDF

Info

Publication number
CN107038208A
CN107038208A CN201710091069.3A CN201710091069A CN107038208A CN 107038208 A CN107038208 A CN 107038208A CN 201710091069 A CN201710091069 A CN 201710091069A CN 107038208 A CN107038208 A CN 107038208A
Authority
CN
China
Prior art keywords
pointer
value
byte
variable
tns
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201710091069.3A
Other languages
English (en)
Other versions
CN107038208B (zh
Inventor
黎琳
常晓林
李振寰
韩臻
刘吉强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jiaotong University
Original Assignee
Beijing Jiaotong University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jiaotong University filed Critical Beijing Jiaotong University
Priority to CN201710091069.3A priority Critical patent/CN107038208B/zh
Publication of CN107038208A publication Critical patent/CN107038208A/zh
Application granted granted Critical
Publication of CN107038208B publication Critical patent/CN107038208B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/219Managing data history or versioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/26Special purpose or proprietary protocols or architectures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例提供了一种解析和还原TNS协议314版本中SQL命令和参数的方法。该方法包括:采用旁路获取网络中客户端向Oracle数据库服务器发送的TNS协议Data类型数据包,将Data类型数据包进行过滤获取Data类型数据包的负载部分数据,将所述Data类型数据包的负载部分解析到TNS协议的SQL语句软件中进行处理,获取0x035e命令位置后,通过五个模块的解析处理最终还原出客户端的SQL命令和包含参数的SQL语句。本发明通过分析Oracle数据库的应用系统客户端与Oracle数据库之间的通讯协议TNS的314版本的Data类型数据包的负载部分,将SQL语句进行有效的分解,分别分析出通讯报文长度小于255字节的SQL语句、长度大于255字节的SQL语句以及客户端可视操作生成SQL语句所带的参数。

Description

解析和还原TNS协议314版本中SQL命令和参数的方法
技术领域
本发明属于网络信息安全与计算机应用技术领域,尤其涉及一种解析和还原TNS协议314版本中SQL命令和参数的方法。
背景技术
专利CN102801714B发明了一种旁路式解析和还原TNS协议中SQL命令的方法,利用开源库获取并输出所有网络设备接口号、名称和描述信息,选择需要捕获的网络设备接口号作为指定的数据捕获网络设备接口,其次设置参数device、参数snaplen、网络设备接口工作模式、超时时间参数、参数ebuf,打开指定的数据捕获网络设备接口。然后判断捕获数据的数据链路层类型,若为以太网,则编译包过滤表达式“TCP”进入驱动程序。最后开始循环捕获网络数据帧,根据包过滤表达式对每个数据帧调用回调函数解析出SQL语句。
现有技术方法不能提取新版本TNS(Transparence Network Substrate,透明网络底层)协议(314版本)中的SQL命令,无法满足长度大于255个字节的SQL命令还原要求,也无法还原客户端可视操作产生SQL命令中的参数。
发明内容
本发明的实施例提供了一种解析和还原TNS协议314版本中SQL命令和参数的方法,通过分析Oracle数据库的应用系统客户端与Oracle数据库之间的通讯协议TNS的Data类型数据包的负载部分,将SQL语句进行有效的分解,分别分析出通讯报文长度小于255字节的SQL语句、长度大于255字节的SQL语句以及客户端可视操作生成SQL语句所带的参数。
为了实现上述目的,本发明采取了如下技术方案。
一种解析和还原TNS协议314版本中SQL命令和参数的方法,其特征在于,该方法包括:
旁路获取网络中客户端向Oracle数据库服务器发送的TNS协议314版本的Data类型数据包,对所述TNS协议314版本的Data类型数据包进行过滤,获取所述TNS协议314版本的Data类型数据包的负载部分数据;
根据所述TNS协议314版本的Data类型数据包的负载部分中的第一和第二个字节的值,通过解析处理获取所述TNS协议314版本的Data类型数据包中的0x035e命令位置,根据所述0x035e命令位置通过TNS协议SQL语句解析处理流程得到所述客户端的SQL命令和包含参数的SQL语句。
所述的对TNS协议314版本的Data类型数据包进行过滤,获取所述TNS协议314版本的Data类型数据包的负载部分数据,包括:
提取TNS协议314版本数据包的包头部分,当所述包头部分的第5个字节值为0x06,则确定所述包头部分为Data类型数据包,该Data类型数据包的数据部分的前4个字节为Data flag,且Data flag的值为0x00,数据部分的前4个字节之后的字节为Data负载部分。
所述的根据所述TNS协议314版本的Data类型数据包的负载部分中的第一和第二个字节的值,通过解析处理获取所述TNS协议314版本的Data类型数据包中的0x035e命令位置,包括:
步骤一,分别读取TNS协议数据包Data负载的第一个和第二个字节值并将其保存到firstByte和secondByte中;
步骤二,若firstByte值为0x03,secondByte值为0x5e,则执行步骤6,否则执行步骤3;
步骤三,若firstByte值为0x11,secondByte值为0x69,则执行步骤4,否则结束;
步骤四,赋值变量skip为8,若firstByte+skip值为0x03,secondByte+skip值为0x5e,则执行步骤6,否则执行步骤5;
步骤五,将skip值加2,并判断firstByte+skip和secondByte+skip值,若firstByte+skip值为0x03,secondByte+skip值为0x5e,则执行步骤6,否则结束;
步骤六,指针p指向命令0x035e的子命令0x5e,并进行模块一解析处理流程。
所述模块一解析处理流程,包括:
步骤11,获取指针p+14指向字节的值并赋给变量type,若type的值为0x04,则该数据包sql语句为select语句,执行步骤12;若type的值为0x00,则该数据包sql语句为CREATE、DROP、ALTER、INSERT、UPDATA或DELETE命令语句,执行步骤13;
步骤12,赋值给变量offset为43,并进行模块二解析处理;
步骤13,赋值给变量offset为37,并进行模块三解析处理。
所述模块二解析处理流程包括:
步骤21,若p+offset值为0x00,则执行步骤22,否则进行模块三解析处理;
步骤22,将指针p+offset指向的字节值赋值给变量sqlcmdlen;
步骤23,指针sqlcmdstart=p+offset+1,指针sqlcmdend=p+offset+1+sqlcmdlen;
步骤24,读取sqlcmdstart开始到sqlcmdend结束的字符串,将字符串拷贝出来即为完整的sql命令。
所述模块三解析处理流程包括:
判断位置[p+offset+1]字节的值是否为0xfe,并获取返回值result,若result值为true,则本数据包传送的sql语句长度超过了255个字节,选择模块四解析处理,若result值为false,则本数据包传送的sql语句长度不超过255字节且包含参数,选择模块五解析处理流程。
所述模块四解析处理流程包括:
步骤41,指针pos=p+offset+3,赋值变量len=0x40,i=0;
步骤42,读取第pos位到第pos+len位字节为buffer(i),pos=pos+len+1,
将i的值加1;
步骤43,若指针pos指向字节值为0x40,则pos=pos+1,并重复执行步骤42,否则执行步骤44;
步骤44,将指针pos指向的字节值赋值给变量len,读取第pos+1位到第pos+1+len位字节为最后一个sql语句块bufferfinal,并组合buffer=sum(buffer(i))+bufferfinal,输出长度大于255个字节的完整sql命令buffer,指针sqlcmdend=pos+1+len;
步骤45,若指针sqlcmdend+18指向的字节为Data负载最后一个字节,则结束,否则,定义指针paranum为sqlcmdend+19,赋值给变量paracount为0;
步骤46,若指针paranum和paranum+1指向的字节值为0x01,0x03,则执行步骤47,否则执行步骤48;
步骤47,将paracount加1,赋值变量skip为17,paranum=paranum+skip,并重复执行步骤46;
步骤48,输出变量paracount的值;
步骤49,若指针paranum指向的字节值为0x07,则执行步骤10,否则结束;
步骤410,将指针paranum+1指向的字节值赋给变量paralen,指针parastart=paranum+2,赋值给变量j为1;
步骤411,指针paraend=parastart+paralen;
步骤412,拷贝parastart开始到paraend结束的字符串为parameter(j),并输出,将j的值加1;
步骤413,若j的值等于paracount,则结束,否则执行步骤414;
步骤414,将指针paraend+1指向字节的值赋给变量paralen,指针parastart=paraend+2,并重复执行步骤411。
所述模块五解析处理流程包括:
步骤51,将[p+offset+1]字节的值赋给变量sqlcmdlen;
步骤52,记指针Sqlcmdstart=p+offset+2,指针Sqlcmdend=p+offset+2+sqlcmdlen;
步骤53,拷贝Sqlcmdstart开始到Sqlcmdend结束的字符串为完整的sql语句,并输出;
步骤54,sql语句结束后跳过17个字节为参数部分,定义指针paranum为sqlcmdend+18,赋值给变量paracount为0;
步骤55,若指针paranum和paranum+1指向的字节值为0x01,0x03,则执行步骤56,否则执行步骤57;
步骤56,将paracount加1,赋值变量skip为17,paranum=paranum+skip,并重复执行步骤55;
步骤57,输出变量paracount的值;
步骤58,若指针paranum指向的字节值为0x07,则执行步骤59,否则结束;
步骤59,将指针paranum+1指向的字节值赋给变量paralen,指针parastart=paranum+2,赋值给变量j为1;
步骤510,指针paraend=parastart+paralen;
步骤511,拷贝parastart开始到paraend结束的字符串为parameter(j),并输出,将j的值加1;
步骤512,若j的值等于paracount,则结束,否则执行步骤513;
步骤513,将指针paraend+1指向字节的值赋给变量paralen,指针parastart=paraend+2,并重复执行步骤510。
由上述本发明的实施例提供的技术方案可以看出,本发明实施例应用网络旁路监听技术,不需要对应用系统进行任何的配置改动和变更,对应用系统的正常运行没有任何影响,可以给用户、应用系统提供商及时了解系统运行状态提供有力的支持,同时可以为Oracle数据库细粒度审计、精准化行为回溯、全方位风险控制功能和安全审计功能提供理论基础。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的技术方案总体流程图;
图2为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的确定命令0x035e命令位置和模块一的处理流程图;
图3为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的模块二和模块三处理流程图;
图4为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的模块四处理流程图;
图5为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的模块五处理流程图。
具体实施方式
下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。
为便于对本发明实施例的理解,下面将结合附图以几个具体实施例为例做进一步的解释说明,且各个实施例并不构成对本发明实施例的限定。
图1为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的技术方案总体流程图,其主要流程包括:
首先从以太网络中截获Oracle客户端和服务器通讯的数据包,之后过滤掉数据包的IP包头和TCP包头,接下来筛选出Data类型的TNS数据包,过滤掉TNS数据包包头部分,将Data类型数据包的负载部分数据输入到解析TNS协议314版本的SQL语句软件中进行处理,最终输出从TNS数据包中提取出的SQL语句。
TNS协议314版本数据包的包头部分(前8个字节)的第5个字节值为0x06的数据包为Data类型数据包,数据部分前4个字节为Data flag,且Data flag的值一般为0x00,之后的字节为Data负载部分。
图2为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的确定0x035e命令位置和模块一的解析流程,其主要步骤如下:
步骤1,分别读取TNS协议314版本的数据包Data负载的第一和第二个字节值并将其保存到firstByte和secondByte中;
步骤2,若firstByte值为0x03,secondByte值为0x5e,则执行步骤6,否则执行步骤3;
步骤3,若firstByte值为0x11,secondByte值为0x69,则执行步骤4,否则结束;
步骤4,赋值变量skip为8,若firstByte+skip值为0x03,secondByte+skip值为0x5e,则执行步骤6,否则执行步骤5;
步骤5,将skip值加2,并判断firstByte+skip和secondByte+skip值。若firstByte+skip值为0x03,secondByte+skip值为0x5e,则执行步骤6,否则结束;
步骤6,指针p指向命令0x035e的子命令0x5e,并进行模块M1处理。
模块一处理流程如下:
步骤11,获取指针p+14指向字节的值并赋给变量type,若type的值为0x04,则该数据包sql语句为select语句,执行步骤12;若type的值为0x00,则该数据包sql语句为CREATE、DROP、ALTER、INSERT、UPDATA或DELETE命令语句,执行步骤13;
步骤12,赋值给变量offset为43,并进行模块二解析处理;
步骤13,赋值给变量offset为37,并进行模块三解析处理。
图3为模块二和模块三的处理流程图,如图3所示,模块二的解析处理流程为:
步骤21,若p+offset值为0x00,则执行步骤22,否则进行模块三解析处理;
步骤22,将指针p+offset指向的字节值赋值给变量sqlcmdlen;
步骤23,指针sqlcmdstart=p+offset+1,指针sqlcmdend=p+offset+1+sqlcmdlen;
步骤24,读取sqlcmdstart开始到sqlcmdend结束的字符串,将字符串拷贝出来即为完整的sql命令。
如图3所示,模块三的解析处理流程为:
判断位置[p+offset+1]字节的值是否为0xfe,并获取返回值result,若result值为true,则本数据包传送的sql语句长度超过了255个字节,选择模块四解析处理,若result值为false,则本数据包传送的sql语句长度不超过255字节且包含参数,选择模块五解析处理。
图4为模块四处理流程图,如图4所示,模块四的解析处理流程为:
步骤41,指针pos=p+offset+3,赋值变量len=0x40,i=0;
步骤42,读取第pos位到第pos+len位字节为buffer(i),pos=pos+len+1,将i的值加1;
步骤43,若指针pos指向字节值为0x40,则pos=pos+1,并重复执行步骤42,否则执行步骤44;
步骤44,将指针pos指向的字节值赋值给变量len,读取第pos+1位到第pos+1+len位字节为最后一个sql语句块bufferfinal,并组合buffer=sum(buffer(i))+bufferfinal,输出长度大于255个字节的完整sql命令buffer,指针sqlcmdend=pos+1+len;
步骤45,若指针sqlcmdend+18指向的字节为Data负载最后一个字节,则结束,否则,定义指针paranum为sqlcmdend+19,赋值给变量paracount为0;
步骤46,若指针paranum和paranum+1指向的字节值为0x01,0x03,则执行步骤47,否则执行步骤48;
步骤47,将paracount加1,赋值变量skip为17,paranum=paranum+skip,并重复执行步骤46;
步骤48,输出变量paracount的值;
步骤49,若指针paranum指向的字节值为0x07,则执行步骤10,否则结束;
步骤410,将指针paranum+1指向的字节值赋给变量paralen,指针parastart=paranum+2,赋值给变量j为1;
步骤411,指针paraend=parastart+paralen;
步骤412,拷贝parastart开始到paraend结束的字符串为parameter(j),并输出,将j的值加1;
步骤413,若j的值等于paracount,则结束,否则执行步骤414;
步骤414,将指针paraend+1指向字节的值赋给变量paralen,指针parastart=paraend+2,并重复执行步骤411。
图5为模块五放入处理流程图;如图5所示,模块五的解析处理流程为:
步骤51,将[p+offset+1]字节的值赋给变量sqlcmdlen;
步骤52,记指针Sqlcmdstart=p+offset+2,指针Sqlcmdend=p+offset+2+sqlcmdlen;
步骤53,拷贝Sqlcmdstart开始到Sqlcmdend结束的字符串为完整的sql语句,并输出;
步骤54,sql语句结束后跳过17个字节为参数部分,定义指针paranum为sqlcmdend+18,赋值给变量paracount为0;
步骤55,若指针paranum和paranum+1指向的字节值为0x01,0x03,则执行步骤56,否则执行步骤57;
步骤56,将paracount加1,赋值变量skip为17,paranum=paranum+skip,并重复执行步骤55;
步骤57,输出变量paracount的值;
步骤58,若指针paranum指向的字节值为0x07,则执行步骤59,否则结束;
步骤59,将指针paranum+1指向的字节值赋给变量paralen,指针parastart=paranum+2,赋值给变量j为1;
步骤510,指针paraend=parastart+paralen;
步骤511,拷贝parastart开始到paraend结束的字符串为parameter(j),并输出,将j的值加1;
步骤512,若j的值等于paracount,则结束,否则执行步骤513;
步骤513,将指针paraend+1指向字节的值赋给变量paralen,指针parastart=paraend+2,并重复执行步骤510。
综上所述,本发明实施例通过分析Oracle数据库的应用系统客户端与Oracle数据库之间的通讯协议TNS314版本的Data类型数据包的负载部分,将SQL语句进行有效的分解,分别分析出通讯报文长度小于255字节的SQL语句、长度大于255字节的SQL语句以及客户端可视操作生成SQL语句所带的参数。
本发明实施例应用网络旁路监听技术,不需要对应用系统进行任何的配置改动和变更,对应用系统的正常运行没有任何影响,可以给用户、应用系统提供商及时了解系统运行状态提供有力的支持,同时可以为Oracle数据库细粒度审计、精准化行为回溯、全方位风险控制功能和安全审计功能提供理论基础。
本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

Claims (8)

1.一种解析和还原TNS协议314版本中SQL命令和参数的方法,其特征在于,该方法包括:
旁路获取网络中客户端向Oracle数据库服务器发送的TNS协议314版本的Data类型数据包,对所述TNS协议314版本的Data类型数据包进行过滤,获取所述TNS协议314版本的Data类型数据包的负载部分数据;
根据所述TNS协议314版本的Data类型数据包的负载部分中的第一和第二个字节的值,通过解析处理获取所述TNS协议314版本的Data类型数据包中的0x035e命令位置,根据所述0x035e命令位置通过TNS协议SQL语句解析处理流程得到所述客户端的SQL命令和包含参数的SQL语句。
2.根据权利要求1所述的方法,其特征在于,所述的对TNS协议314版本的Data类型数据包进行过滤,获取所述TNS协议314版本的Data类型数据包的负载部分数据,包括:
提取TNS协议314版本数据包的包头部分,当所述包头部分的第5个字节值为0x06,则确定所述包头部分为Data类型数据包,该Data类型数据包的数据部分的前4个字节为Dataflag,且Data flag的值为0x00,数据部分的前4个字节之后的字节为Data负载部分。
3.根据权利要求1或2所述的方法,其特征在于,所述的根据所述TNS协议314版本的Data类型数据包的负载部分中的第一和第二个字节的值,通过解析处理获取所述TNS协议314版本的Data类型数据包中的0x035e命令位置,包括:
步骤一,分别读取TNS协议数据包Data负载的第一个和第二个字节值并将其保存到firstByte和secondByte中;
步骤二,若firstByte值为0x03,secondByte值为0x5e,则执行步骤6,否则执行步骤3;
步骤三,若firstByte值为0x11,secondByte值为0x69,则执行步骤4,否则结束;
步骤四,赋值变量skip为8,若firstByte+skip值为0x03,secondByte+skip值为0x5e,则执行步骤6,否则执行步骤5;
步骤五,将skip值加2,并判断firstByte+skip和secondByte+skip值,若firstByte+skip值为0x03,secondByte+skip值为0x5e,则执行步骤6,否则结束;
步骤六,指针p指向命令0x035e的子命令0x5e,并进行模块一解析处理流程。
4.根据权利要求3所述的方法,其特征在于,所述模块一解析处理流程,包括:
步骤11,获取指针p+14指向字节的值并赋给变量type,若type的值为0x04,则该数据包sql语句为select语句,执行步骤12;若type的值为0x00,则该数据包sql语句为CREATE、DROP、ALTER、INSERT、UPDATA或DELETE命令语句,执行步骤13;
步骤12,赋值给变量offset为43,并进行模块二解析处理;
步骤13,赋值给变量offset为37,并进行模块三解析处理。
5.根据权利要求4所述的方法,其特征在于,所述模块二解析处理流程包括:
步骤21,若p+offset值为0x00,则执行步骤22,否则进行模块三解析处理;
步骤22,将指针p+offset指向的字节值赋值给变量sqlcmdlen;
步骤23,指针sqlcmdstart=p+offset+1,指针sqlcmdend=p+offset+1+sqlcmdlen;
步骤24,读取sqlcmdstart开始到sqlcmdend结束的字符串,将字符串拷贝出来即为完整的sql命令。
6.根据权利要求5所述的方法,其特征在于,所述模块三解析处理流程包括:
判断位置[p+offset+1]字节的值是否为0xfe,并获取返回值result,若result值为true,则本数据包传送的sql语句长度超过了255个字节,选择模块四解析处理,若result值为false,则本数据包传送的sql语句长度不超过255字节且包含参数,选择模块五解析处理流程。
7.根据权利要求6所述的方法,其特征在于,所述模块四解析处理流程包括:
步骤41,指针pos=p+offset+3,赋值变量len=0x40,i=0;
步骤42,读取第pos位到第pos+len位字节为buffer(i),pos=pos+len+1;
将i的值加1;
步骤43,若指针pos指向的字节值为0x40,则pos=pos+1,并重复执行步骤42,否则执行步骤44;
步骤44,将指针pos指向的字节值赋值给变量len,读取第pos+1位到第pos+1+len位字节为最后一个sql语句块bufferfinal,并组合buffer=sum(buffer(i))+bufferfinal,输出长度大于255个字节的完整sql命令buffer,指针sqlcmdend=pos+1+len;
步骤45,若指针sqlcmdend+18指向的字节为Data负载最后一个字节,则结束,否则,定义指针paranum为sqlcmdend+19,赋值给变量paracount为0;
步骤46,若指针paranum和paranum+1指向的字节值为0x01,0x03,则执行步骤47,否则执行步骤48;
步骤47,将paracount加1,赋值变量skip为17,paranum=paranum+skip,并重复执行步骤46;
步骤48,输出变量paracount的值;
步骤49,若指针paranum指向的字节值为0x07,则执行步骤10,否则结束;
步骤410,将指针paranum+1指向的字节值赋给变量paralen,指针parastart=paranum+2,赋值给变量j为1;
步骤411,指针paraend=parastart+paralen;
步骤412,拷贝parastart开始到paraend结束的字符串为parameter(j),并输出,将j的值加1;
步骤413,若j的值等于paracount,则结束,否则执行步骤414;
步骤414,将指针paraend+1指向字节的值赋给变量paralen,指针parastart=paraend+2,并重复执行步骤411。
8.根据权利要求7所述的方法,其特征在于,所述模块五解析处理流程包括:
步骤51,将[p+offset+1]字节的值赋给变量sqlcmdlen;
步骤52,记指针Sqlcmdstart=p+offset+2,指针Sqlcmdend=p+offset+2+sqlcmdlen;
步骤53,拷贝Sqlcmdstart开始到Sqlcmdend结束的字符串为完整的sql语句,并输出;
步骤54,sql语句结束后跳过17个字节为参数部分,定义指针paranum为sqlcmdend+18,赋值给变量paracount为0;
步骤55,若指针paranum和paranum+1指向的字节值为0x01,0x03,则执行步骤56,否则执行步骤57;
步骤56,将paracount加1,赋值变量skip为17,paranum=paranum+skip,并重复执行步骤55;
步骤57,输出变量paracount的值;
步骤58,若指针paranum指向的字节值为0x07,则执行步骤59,否则结束;
步骤59,将指针paranum+1指向的字节值赋给变量paralen,指针parastart=paranum+2,赋值给变量j为1;
步骤510,指针paraend=parastart+paralen;
步骤511,拷贝parastart开始到paraend结束的字符串为parameter(j),并输出,将j的值加1;
步骤512,若j的值等于paracount,则结束,否则执行步骤513;
步骤513,将指针paraend+1指向字节的值赋给变量paralen,指针parastart=paraend+2,并重复执行步骤510。
CN201710091069.3A 2017-02-20 2017-02-20 解析和还原tns协议314版本中sql命令和参数的方法 Expired - Fee Related CN107038208B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710091069.3A CN107038208B (zh) 2017-02-20 2017-02-20 解析和还原tns协议314版本中sql命令和参数的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710091069.3A CN107038208B (zh) 2017-02-20 2017-02-20 解析和还原tns协议314版本中sql命令和参数的方法

Publications (2)

Publication Number Publication Date
CN107038208A true CN107038208A (zh) 2017-08-11
CN107038208B CN107038208B (zh) 2020-04-28

Family

ID=59534343

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710091069.3A Expired - Fee Related CN107038208B (zh) 2017-02-20 2017-02-20 解析和还原tns协议314版本中sql命令和参数的方法

Country Status (1)

Country Link
CN (1) CN107038208B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108629201A (zh) * 2018-04-24 2018-10-09 山东华软金盾软件股份有限公司 一种对数据库非法操作进行阻断的方法
CN112165478A (zh) * 2020-09-22 2021-01-01 北京景安云信科技有限公司 使用安全网关对OracleTNS协议登录用户名进行获取方法及系统
CN112187763A (zh) * 2020-09-22 2021-01-05 北京景安云信科技有限公司 使用安全网关对OracleTNS协议SQL执行进行审计和阻断方法和系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080134209A1 (en) * 2006-12-01 2008-06-05 Computer Associates Think, Inc. Automated grouping of messages provided to an application using string similarity analysis
CN102801714A (zh) * 2012-07-26 2012-11-28 杭州电子科技大学 旁路式解析和还原tns协议中sql命令的方法
US8473519B1 (en) * 2008-02-25 2013-06-25 Cisco Technology, Inc. Unified communication audit tool
CN104135492A (zh) * 2014-08-20 2014-11-05 国家电网公司 一种基于信息交换总线内外网信息交换的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080134209A1 (en) * 2006-12-01 2008-06-05 Computer Associates Think, Inc. Automated grouping of messages provided to an application using string similarity analysis
US8473519B1 (en) * 2008-02-25 2013-06-25 Cisco Technology, Inc. Unified communication audit tool
CN102801714A (zh) * 2012-07-26 2012-11-28 杭州电子科技大学 旁路式解析和还原tns协议中sql命令的方法
CN104135492A (zh) * 2014-08-20 2014-11-05 国家电网公司 一种基于信息交换总线内外网信息交换的方法

Non-Patent Citations (7)

* Cited by examiner, † Cited by third party
Title
JIN SHANGJIE ET AL: "Research and Design of Preprocessor plugin based on PCRE under Snort Platform", 《2011 INTERNATIONAL CONFERENCE ON CONTROL, AUTOMATION AND SYSTEMS ENGINEERING (CASE)》 *
KEHE WU ET AL: "The Design and Implementation of Database Audit System Framework", 《2014 IEEE 5TH INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING AND SERVICE SCIENCE》 *
LIHONG GUO ET AL: "Design and Implementation of TDS Protocol Analyzer", 《2009 2ND IEEE INTERNATIONAL CONFERENCE ON COMPUTER SCIENCE AND INFORMATION TECHNOLOGY》 *
张运明: "协议行为审计关键技术研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *
杨磊: "基于旁路监听的数据库安全审计系统", 《计算机工程与应用》 *
殷泰晖 等: "基于TNS协议的Oracle数据库安全性改进方法", 《合肥工业大学学报(自然科学版)》 *
王召: "基于数据库审计系统TNS协议解析的研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108629201A (zh) * 2018-04-24 2018-10-09 山东华软金盾软件股份有限公司 一种对数据库非法操作进行阻断的方法
CN112165478A (zh) * 2020-09-22 2021-01-01 北京景安云信科技有限公司 使用安全网关对OracleTNS协议登录用户名进行获取方法及系统
CN112187763A (zh) * 2020-09-22 2021-01-05 北京景安云信科技有限公司 使用安全网关对OracleTNS协议SQL执行进行审计和阻断方法和系统

Also Published As

Publication number Publication date
CN107038208B (zh) 2020-04-28

Similar Documents

Publication Publication Date Title
CN110505111B (zh) 基于流量重放的工控协议模糊测试方法
US7996523B2 (en) Free string match encoding and preview
EP2815536B1 (en) Method and system for generating transaction data from network traffic data for an application system
CN107038208A (zh) 解析和还原tns协议314版本中sql命令和参数的方法
US7672941B2 (en) Pattern matching using deterministic finite automata and organization of such automata
US20060280178A1 (en) Script-based parser
EP1507203A2 (en) Method and system for managing events
CN102801714B (zh) 旁路式解析和还原tns协议中sql命令的方法
CA2390201A1 (en) System and method for general purpose data parsing and analysis
US7353225B2 (en) Mechanism for comparing content in data structures
CN113923057B (zh) 卫星测运控平台的数据处理方法、装置、电子设备及介质
CN111222547B (zh) 一种面向移动应用的流量特征提取方法及系统
CN105376077A (zh) 网络行为信息的处理方法、日志的发送方法、装置及系统
CN109040028B (zh) 一种工控全流量分析方法及装置
WO2002086654A2 (en) Protocol monitor
Aldwairi et al. Efficient wu-manber pattern matching hardware for intrusion and malware detection
CN108199906B (zh) 一种sdn构架中异常流量处理方法、装置和用户终端
CN105868982A (zh) 一种改进的移动互联网支付系统及其控制方法
CN106909435A (zh) 一种网络安全设备命令行的解析方法和装置
CN113141341A (zh) 一种可编程的软件定义网络安全策略系统
CN104573040A (zh) 抓取网页数据的方法及系统
CN107426039A (zh) 一种日志上报和接收的方法及系统
CN107491538A (zh) 一种db2数据库的存储过程命令及参数值提取方法
US20100002704A1 (en) System and Method for End-User Custom Parsing Definitions
CN111080362A (zh) 广告监测系统及方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20200428

Termination date: 20210220

CF01 Termination of patent right due to non-payment of annual fee