具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请实施例提供一种基于流量的越权漏洞自动检测方法、装置及计算机设备。具体地,本申请实施例提供适用于计算机设备的漏洞自动检测装置。其中,该计算机设备可以为终端或服务器等设备,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
本申请实施例提供一种基于流量的越权漏洞自动检测方法,该方法可以由终端或服务器执行,也可以由终端和服务器共同执行;本申请实施例以漏洞自动检测方法由服务器执行为例来进行说明,具体的,由集成在服务器中的漏洞检测装置来执行。如图1和图2所示,该漏洞自动检测方法的具体流程可以如下:
S1、获取Web端的请求数据包、请求响应值以及请求响应包长度;
在一些实施例中,本实施例根据业务功能选取相应的请求数据包,通过代理工具Burp Suite中的Http history模块获取请求的响应码和响应包长度,其中响应码即对应请求响应值。例如在一些实施例中:HTTP/1.1 200OK,Content-Length:210;HTTP/1.1401Unauthorized,Content-Length:0;HTTP/1.1304Not Modified,Content-Length:0;例中HTTP/1.1 200OK表示请求包正常返回,返回包长度为210;HTTP/1.1 401Unauthorized表示请求需要有通过HTTP认证的认证信息,返回包长度为0;HTTP/1.1 304Not Modified表示服务器允许访问资源,但请求未满足某情况。
在一些实施例中,本实施例中的越权漏洞自动检测,可以是针对账号权限超出预先设定的异常检测,也即,检测账号是否可以访问或获取超出其预设权限范围的信息,在后台服务器中,每个账号具有预设好的权限,先获取需要进行测试的账号信息,后续通过这些账号信息进行越权漏洞的自动测试。
S2、将所述请求数据包按照用户及其对应的权限划分出检测分组,所述检测分组包括水平越权漏洞检测分组、垂直越权漏洞检测分组以及未授权访问漏洞检测分组;
在本发明实施例中,将获取的请求数据包进行分类处理,按照指定的权限规则将用户划分为普通用户和管理员用户;将不同普通用户的请求数据包划分为第一分组,将不同管理员用户的请求数据包划分为第二分组;将第一分组和第二分组的并集构成水平越权漏洞检测分组;将第一分组中的部分普通用户的请求数据包与第二分组中的部分管理员用户的请求数据包的并集分别构成垂直越权漏洞检测分组以及未授权访问漏洞检测分组。
在一些实施例中,假设管理员用户权限组表示为Admin={admin_A,admin_B,…},普通用户权限组表示为User={user_a,user_b,…},本实施例可以采用Admin={admin_A,admin_B,…}∪User={user_a,user_b,…}作为水平越权漏洞检测分组用于水平越权漏洞检测,其中admin_A和admin_B表示不同的管理员用户的请求数据包集合,即admin_A表示管理员用户A的数据包集合,admin_B表示管理员用户B的数据包集合;同样的,user_a和user_b表示不同的普通用户的请求数据包集合;即user_a表示普通用户a的数据包集合,user_b表示普通用户b的数据包集合;在所述管理员用户权限组Admin中提取管理员用户,同时在所述普通用户权限组User中提取普通用户,构建管理员-普通用户组Admin_User={admin_A,user_a}∪{admin_B,user_b}…,并可以选择其中一组管理员-普通用户组作为垂直越权漏洞检测分组以及未授权访问漏洞检测分组分别用于垂直越权漏洞检测和未授权访问漏洞检测。
可以理解的是,在本实施例中,考虑到在实际的检测时,针对水平越权漏洞检测和垂直越权漏洞检测仅需要不同用户即可,未授权访问仅需一个用户即可;同时考虑到对数据包进行归类处理的效率问题,因此本发明中仅选择两个普通用户和两个管理员用户进行分组。所以本发明中采用管理员用户权限组Admin={admin_A,admin_B}和普通用户权限组User={user_a,user_b}用于水平越权漏洞检测;Admin_User={admin_A,user_a}用于垂直越权漏洞检测和未授权访问漏洞检测。
需要说明的是,本实施例中,每个用户身份标识预设有对应的级别权限,级别越高,级别权限越大,级别权限的具体预设方式可根据实际需求进行设定,此处不作限制。例如,在一些实施例中,网站开发人员规定管理员权限的权限值为ID=0,普通用户的权限值为ID=1。
例如,在一更为具体实施方式中,获取到的账号信息集合中,用户身份标识包含:admin1、user2、user8和guest15,其中,admin1具有最高权限,user2和user8具有部分操作权限和自身账号信息对应的访问修改权限,guest具有极少部分操作权限。
本实施例中,账号信息集合的来源,可以是通过管理人员根据实际需求,从数据库中选取不同级别权限的账号信息,存入到账号信息集合中,或者是,通过对每个账号信息对应的历史操作记录进行分析,获取操作异常的账号信息存入到账号信息集合中。
S3、对所述请求数据包提取出cookie字段值,对所述cookie字段值进行建模,将所述cookie字段值中每个请求的参数采用字段名加字段类型进行归类处理;
在本发明实施例中,从所述请求数据包中提取出Cookie字段值,然后再对Cookie值进行建模。传统人工检测在身份认证信息确认时需要投入大量精力逐个对比猜测,而在建模归类后可直接提取归类好的身份验证参数而无需再一一对比,可有效提高漏洞检测效率。通过对相同请求的参数对比,将每个请求的参数表示为字段名加类型的模式,即:字段={类型}。例如在实际操作中获取的某一Cookie值如下:uid=1&uname=test1&phone=15111111111&islogin=1;其中uid为用户id,一般用作请求包的标识;uname为用户名,该字段也可作为请求;phone仅显示手机号码,一般不作为请求标识使用;islogin为登录状态标识,1为已登录状态,0为未登录状态,可用作未授权访问漏洞的验证。通过大量实践发现以下参数为常用的身份验证参数:xxxid、userId、user_id、username、islogin、check_code、status等,因此本发明在对cookie进行建模归类时,重点将以上参数作为主要分类依据。标识根据以上规则进行归类建模后的结果为:uid={num}&uname={string}&phone={num}&islogin={num},可以发现,所有的字段都划分成字段={类型}的格式,这种方式下能够减少内容对比所造成的资源浪费。
在本发明实施例中,将请求数据包进行归类处理后,处于不同检测分组中的请求数据包即拥有了字段={类型}的数据格式,在后续过程中,可以在所述管理员用户权限组Admin的集合admin_A和集合admin_B中分别提取使用模型Cookie的若干数据包以备管理员水平越权漏洞的检测;在所述普通用户权限组User的集合user_a和集合user_b中分别提取使用模型Cookie的若干数据包以备普通用户水平越权漏洞的检测;在所述管理员-普通用户组Admin_User的集合admin_A和集合user_a中分别提取使用模型Cookie的若干数据包以备垂直越权漏洞和未授权漏洞的检测。
S4、按照用户所属的漏洞检测分组中的预设规则,对当前分组中的不同用户的cookie字段值中的身份信息验证进行处理,重新访问该请求数据包;
在本发明实施例中,为每种漏洞检测分配至少一种预设规则,针对管理权限水平越权漏洞检测,从水平越权漏洞检测分组中将提取的第一管理员用户和第二管理员用户的身份信息验证参数值进行交换并重新访问该请求数据包;针对普通权限水平越权漏洞检测,从水平越权漏洞检测分组中将提取的第一普通用户和第二普通用户的身份信息验证参数值进行交换并重新访问该请求数据包;针对垂直越权漏洞检测,从垂直越权漏洞检测分组使用第一普通用户的身份信息验证参数值访问所述第一管理员用户独有的接口并重新访问该请求数据包;针对未授权访问漏洞,从未授权访问漏洞检测分组中将各用户中的身份验证信息删除后重新访问该请求数据包。
具体的,针对水平越权漏洞检测,本发明实施例交换不同用户的身份验证信息,例如uid,uname等字段,将这些字段的参数值更换后,可以调用Burp Suite中的Repeater模块接口重新访问该请求数据包;针对垂直越权漏洞,使用低权限用户的身份验证信息访问高权限用户独有的接口;针对未授权访问漏洞,将各权限用户中的身份验证信息删除后重放数据包。
S5、对比重新访问前后请求数据包的响应值及响应包长度,若与原响应值相同且响应包长度接近,则认为存在越权漏洞。
在本发明实施例中,当发现重新访问前后的请求数据包的响应值相同,且响应包长度的差距处于第一阈值范围内,那么则说明存在越权漏洞。
在一些实施例中,本发明实施例可以通过如下手段判断出具体的越权漏洞类型:
获取用户的请求内容,操作接口;
获取用户身份信息验证字段,参数值;
交换所述用户的身份验证信息参数值并重新访问该请求数据包;
根据重新访问后的响应值和响应包长度判断是否存在越权。
在一些优选实施例中,所述水平越权检测包括以下步骤:
通过将获取的所述请求数据包保存在对应用户的集合中,获取所述用户的请求内容,操作接口;
通过将获取的所述请求数据包保存在对应用户的集合中,获取所述用户的身份信息验证字段,参数值;
将某所述用户登录所述请求内容、操作接口的身份信息验证字段参数值替换为另一用户并重新访问该请求数据包;
判断重新访问请求数据包的响应值与原响应值是否相等,若相等则判断所述请求的响应包长度与原响应包长度是否接近,若接近则表明存在水平越权漏洞。
在一些优选实施例中,所述垂直越权检测包括以下步骤:
通过将获取的所述请求数据包保存在对应用户的集合中,获取所述高权限用户独有的请求内容,操作接口;
通过将获取的所述请求数据包保存在对应用户的集合中,获取所述低权限用户的身份信息验证字段,参数值;
将所述高权限用户登录所述请求内容、操作接口的身份信息验证字段参数值替换为所述低权限用户并重放所述请求;
判断所述高权限用户的请求响应值与所述低权限用户的请求响应值是否相等,若相等则判断所述高权限用户请求的响应包长度与所述低权限用户请求的响应包长度是否接近,若接近则表明存在垂直越权漏洞。
在一些优选实施例中,所述未授权访问检测包括以下步骤:
通过将获取的所述请求数据包保存在对应用户的集合中,获取所述用户的身份信息验证字段,参数值;
通过将获取的所述请求数据包保存在对应用户的集合中,获取所述用户的身份信息验证字段,参数值;
将某所述用户登录所述请求内容、操作接口的身份信息验证字段参数删除后重放所述请求;
判断所述请求的响应值与原响应值是否相等,若相等则判断所述请求的响应包长度与原响应包长度是否接近,若接近则表明存在未授权访问漏洞。
在一个具体的实施例中,假设存在四个用户,分别为管理员用户A,管理员用户B,普通用户C和普通用户D。步骤S1的具体操作为,使用代理工具Burp Suite截取请求数据包,分别使用四个用户身份登陆系统,正常使用各功能点,漏洞检测系统会通过Burp Suite中的Http history模块获取上述过程的请求数据包,其中包含有响应码和响应包长度。步骤S2的具体操作为,漏洞检测系统针对步骤S1中获得的数据包进行分类处理,根据特定规则自动将管理员用户A和管理员用户B分为管理员用户权限组Admin={A,B},将普通用户C和普通用户D分为普通用户权限组User={C,D},本实施例可以采用Admin={A,B,}∪User={C,D}作为水平越权漏洞检测分组用于水平越权漏洞检测,其中A和B表示不同的管理员用户的请求数据包集合,即A表示管理员用户A的数据包集合,B表示管理员用户B的数据包集合;同样的,C和表示不同的普通用户的请求数据包集合;即C表示普通用户C的数据包集合,D表示普通用户D的数据包集合;在所述管理员用户权限组Admin中提取管理员用户,同时在所述普通用户权限组User中提取普通用户,构建管理员-普通用户组Admin_User={A,C}∪{B,D},并可以选择其中一组管理员-普通用户组作为垂直越权漏洞检测分组以及未授权访问漏洞检测分组分别用于垂直越权漏洞检测和未授权访问漏洞检测。步骤S3的具体操作为,漏洞检测系统根据字段名获取数据包分组的Cookie值,不同请求对应Cookie可能不同,因此通过相同请求的参数对比,将每个请求的参数表示为字段名加类型的模式,即:字段={类型},后续有相同的请求则自动归为一类。
在一个更为具体的实施例中,获取请求包的Cookie为ID=1&username=lili&requestid=f5e1059396431415;PHPSESSID=o3gt74sm76ns1dghiarbnji3d1,对其进行建模,ID={int}&username={char}&requestid={char};PHPSESSID={char};后续将符合该Cookie模式的请求包归为一类。
步骤S4的具体操作为,针对管理权限水平越权漏洞检测,从水平越权漏洞检测分组中将提取的管理员用户A和管理员用户B的身份信息验证参数值进行交换并重新访问该请求数据包;针对普通权限水平越权漏洞检测,从水平越权漏洞检测分组中将提取的普通用户C和普通用户D的身份信息验证参数值进行交换并重新访问该请求数据包;针对垂直越权漏洞检测,从垂直越权漏洞检测分组使用普通用户C的身份信息验证参数值访问所述管理员用户A独有的接口并重新访问该请求数据包;针对未授权访问漏洞,从未授权访问漏洞检测分组中将各用户中的身份验证信息删除后重新访问该请求数据包。在一个更为具体的实施例中,提取管理员用户admin1的请求包,其中Cookie为ID=0&username=admin1&requestid=30bd3dcaefc96f40;PHPSESSID=53bglvnt6idtcci7a44mkclns4,请求包响应码为200,响应包长度为34544;提取管理员用户admin2的请求包,其中Cookie为ID=0&username=admin2&requestid=210194c475687be6;PHPSESSID=53bglvnt6idtcci7a44mkclns4,请求响应码为200,响应包长度为21866;提取普通用户lili的请求包,其中Cookie为ID=1&username=lili&requestid=f5e1059396431415;PHPSESSID=o3gt74sm76ns1dghiarbnji3d1,请求包响应码为200,响应包长度为5683;提取普通用户kobe的请求包,其中Cookie为ID=1&username=kobe&requestid=02a44259755d38e6;PHPSESSID=53bglvnt6idtcci7a44mkclns4,请求响应码为200,响应包长度为4776;漏洞检测系统将交换管理员用户admin1和admin2、普通用户lili和kobe的身份验证信息username进行重新访问,用于检测水平越权漏洞;交换管理员用户admin1和普通用户lili的身份验证信息username进行重新访问,用于检测垂直越权漏洞;删除管理员用户admin1和普通用户lili的身份验证信息username进行重新访问,用于检测未授权访问漏洞。步骤S5的具体操作为,对比上述各组别交换身份验证信息后重新访问所得的请求响应值及响应包长度,若与原响应值相同且响应包长度接近,则认为存在越权漏洞;在一个更为具体的实施例中,对比普通用户lili和kobe交换身份验证信息并重新访问后的请求响应值相同,响应值为200;进而对比响应包长度,交换后普通用户kobe的请求响应包长度为5609,原响应包长度为5683,交换后普通用户lili的请求响应包长度为4837,原响应包长度为4776,交换身份认证信息后重新访问的响应包接近;可得结论,该Web网站存在水平越权漏洞;同理检测其他两种类型漏洞。
为解决上述技术问题,本申请实施例还提供了一种基于流量的越权漏洞自动检测装置,具体请参阅图3,图3为本实施例越权漏洞自动检测装置结构框图。
所述越权漏洞自动检测装置包括:
请求数据包采集单元,用于获取Web端的请求数据包、请求响应值以及请求响应包长度;
数据包权限分组单元,用于将所述请求数据包按照用户及其对应的权限划分出检测分组,所述检测分组包括水平越权漏洞检测分组、垂直越权漏洞检测分组以及未授权访问漏洞检测分组;
请求参数归类单元,用于对所述请求数据包提取出cookie字段值,对所述cookie字段值进行建模,将所述cookie字段值中每个请求的参数采用字段名加字段类型进行归类处理;
漏洞预检测单元,用于按照用户所属的漏洞检测分组中的预设规则,对当前分组中的不同用户的cookie字段值中的身份信息验证进行处理,重新访问该请求数据包;
漏洞检测单元,用于对比重新访问前后请求数据包的响应值及响应包长度,若与原响应值相同且响应包长度接近,则认为存在越权漏洞。
为解决上述技术问题,本申请实施例还提供计算机设备。具体请参阅图4,图4为本实施例计算机设备基本结构框图。
所述计算机设备400包括通过系统总线相互通信连接存储器401、处理器402、网络接口403。需要指出的是,图中仅示出了具有组件连接存储器401、处理器402、网络接口403的计算机设备400,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,本技术领域技术人员可以理解,这里的计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机设备可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
所述存储器401至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或D界面显示存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器401可以是所述计算机设备400的内部存储单元,例如该计算机设备400的硬盘或内存。在另一些实施例中,所述存储器401也可以是所述计算机设备400的外部存储设备,例如该计算机设备400上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器401还可以既包括所述计算机设备400的内部存储单元也包括其外部存储设备。本实施例中,所述存储器401通常用于存储安装于所述计算机设备400的操作系统和各类应用软件,例如电子文件的控制的程序代码等。此外,所述存储器401还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器402在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器402通常用于控制所述计算机设备400的总体操作。本实施例中,所述处理器402用于运行所述存储器401中存储的程序代码或者处理数据,例如运行电子文件的控制的程序代码。
所述网络接口403可包括无线网络接口或有线网络接口,该网络接口403通常用于在所述计算机设备400与其他电子设备之间建立通信连接。
本申请还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有界面显示程序,所述界面显示程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的越权漏洞检测方法的步骤。
在本发明的描述中,需要理解的是,术语“同轴”、“底部”、“一端”、“顶部”、“中部”、“另一端”、“上”、“一侧”、“顶部”、“内”、“外”、“前部”、“中央”、“两端”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
在本发明中,除非另有明确的规定和限定,术语“安装”、“设置”、“连接”、“固定”、“旋转”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。