首页> 中国专利> 一种执行结果回显方法、装置、电子设备及可读存储介质

一种执行结果回显方法、装置、电子设备及可读存储介质

摘要

本申请公开了一种执行结果回显方法、装置、设备及计算机可读存储介质,该方法包括:获取索引节点组,并在目标目录下获取索引节点组内的元素对应的文件描述符;利用文件描述符尝试打开对应的套接字;若目标套接字被打开,则获取代码执行结果,并利用目标套接字传输代码执行结果;由于进程中的每个线程仅能打开自己对应的套接字。因此在得到文件描述符后,可以一一利用各个文件描述符尝试打开对应的套接字;若目标套接字被打开,则说明目标套接字为用于执行远程代码的线程对应的套接字,可以用于传输该线程得到的代码执行结果;该方法通过对目标套接字进行确定并利用目标套接字传输代码执行结果,可以不需要利用外网进行回显,提高了回显成功率。

著录项

  • 公开/公告号CN112214265A

    专利类型发明专利

  • 公开/公告日2021-01-12

    原文格式PDF

  • 申请/专利权人 杭州安恒信息技术股份有限公司;

    申请/专利号CN202011079824.4

  • 发明设计人 邢俞炜;范渊;黄进;

    申请日2020-10-10

  • 分类号G06F9/448(20180101);G06F21/57(20130101);

  • 代理机构11227 北京集佳知识产权代理有限公司;

  • 代理人郄晨芳

  • 地址 310000 浙江省杭州市滨江区西兴街道联慧街188号

  • 入库时间 2023-06-19 09:32:16

说明书

技术领域

本申请涉及网络技术领域,特别涉及一种执行结果回显方法、执行结果回显装置、电子设备及计算机可读存储介质。

背景技术

在JAVA WEB应用中,时常需要利用远程代码对漏洞进行利用,即在没有指定绝对路径的情况下通过漏洞执行任意想要的代码,得到执行结果。由于JAVA WEB程序往往无法直接回显代码利用后的结果,即无法直接发送执行结果。因此相关技术通常采用间接回显的方式,即通过外部网络或设备将利用后的结果进行转发回传。但是,运行JAVA WEB应用的服务器向外网传输数据时,都会受到防火墙、防护设备、或者网络本身的限制(例如运行JAVA WEB应用的服务器无法连接外网的限制),无法向外网传输数据,或传输的数据受到限制,使得执行结果无法成功发送,回显成功率较低。而得到执行结果才能够对远程代码执行漏洞进行有效利用,因此同样会导致漏洞利用效率较低。

因此,相关技术存在的回显成功率和漏洞利用效率较低的问题,是本领域技术人员需要解决的技术问题。

发明内容

有鉴于此,本申请的目的在于提供一种执行结果回显方法、执行结果回显装置、电子设备及计算机可读存储介质,提高了回显成功率。

为解决上述技术问题,本申请提供了一种执行结果回显方法,包括:

获取索引节点组,并在目标目录下获取所述索引节点组内的元素对应的文件描述符;

利用所述文件描述符尝试打开对应的套接字;

若目标套接字被打开,则获取代码执行结果,并利用所述目标套接字传输所述代码执行结果。

可选地,所述获取索引节点组,包括:

从连接信息文件中获取索引节点信息;

从索引节点信息中过滤IP地址为远程地址的目标索引节点信息,得到所述索引节点组。

可选地,所述从连接信息文件中获取索引节点信息,包括:

对所述连接信息文件进行格式筛选,将通过所述格式筛选的信息确定为所述索引节点信息。

可选地,所述在目标目录下获取所述索引节点组内的元素对应的文件描述符,包括:

在所述目标目录下查找所述元素,确定所述元素所处的目录项;

在所述目录项内获取所述元素对应的所述文件描述符。

可选地,所述利用所述目标套接字传输所述代码执行结果,包括:

利用所述文件描述符将所述代码执行结果写入所述目标套接字;

利用所述目标套接字向目标设备发送所述代码执行结果。

可选地,所述获取代码执行结果,包括:

获取所述目标设备发送的远程代码;

执行所述远程代码,得到所述代码执行结果。

可选地,所述获取代码执行结果,包括:

从预设路径下获取所述代码执行结果。

本申请还提供了一种执行结果回显装置,包括:

获取模块,用于获取索引节点组,并在目标目录下获取所述索引节点组内的元素对应的文件描述符;

打开尝试模块,用于利用所述文件描述符尝试打开对应的套接字;

回显模块,用于若目标套接字被打开,则获取代码执行结果,并利用所述目标套接字传输所述代码执行结果。

本申请还提供了一种电子设备,包括存储器和处理器,其中:

所述存储器,用于保存计算机程序;

所述处理器,用于执行所述计算机程序,以实现上述的执行结果回显方法。

本申请还提供了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现上述的执行结果回显方法。

本申请提供的执行结果回显方法,获取索引节点组,并在目标目录下获取索引节点组内的元素对应的文件描述符;利用文件描述符尝试打开对应的套接字;若目标套接字被打开,则获取代码执行结果,并利用目标套接字传输代码执行结果。

可见,该方法在想要对代码执行结果进行回显时,可以获取索引节点组,索引节点组中的元素分别对应于当前进程中各个线程对应的TCP连接信息。文件描述符与各个线程相对应,可以用于打开线程对应的套接字,套接字在传输数据时基本不受限制。由于代码执行结果由线程执行相应的远程代码得到,而进程中的每个线程仅能打开自己对应的套接字,因此在得到文件描述符后,为了利用套接字对代码执行结果进行传输,可以一一利用各个文件描述符尝试打开对应的套接字。若目标套接字被打开,则说明目标套接字为用于执行远程代码的线程对应的套接字,可以用于传输该线程得到的代码执行结果。因此获取代码执行结果,并利用目标套接字传输该代码执行结果,完成代码执行结果的回显。通过对目标套接字进行确定并利用目标套接字传输代码执行结果,可以不需要利用外网进行回显,提高了回显成功率,同时使得漏洞利用效率较高。

此外,本申请还提供了一种执行结果回显装置、电子设备及计算机可读存储介质,同样具有上述有益效果。

附图说明

为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例提供的一种执行结果回显方法流程图;

图2为本申请实施例提供的一种目标目录的内容示意图;

图3为本申请实施例提供的一种具体的执行结果回显方法流程图;

图4为本申请实施例提供的一种执行结果回显装置的结构示意图;

图5为本申请实施例提供的一种电子设备的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

请参考图1,图1为本申请实施例提供的一种执行结果回显方法流程图。该方法包括:

S101:获取索引节点组,并在目标目录下获取索引节点组内的元素对应的文件描述符。

需要说明的是,可以利用指定的电子设备执行本申请提供的执行结果回显方法的全部或部分步骤,该指定的电子设备具体可以为指定的计算机或服务器。可以理解的是,该电子设备为被进行远程代码执行漏洞的电子设备,即执行远程代码并将得到的代码执行结果回显给其他设备的电子设备。在本实施例中,该指定的电子设备可以为Linux操作系统,或者可以为unix操作系统。

索引节点组内包括多个元素,元素即为索引节点inode,也可以称为inode号。索引节点是一种数据结构,其本质是结构体,包含了与文件系统中各个文件相关的一些重要信息。而在Linux/unix操作系统中,所有的事物均可以被视为文件。在向JAVA WEB应用发起一次HTTP(HyperText Transfer Protocol,超文本传输协议)请求时,在linux/unix操作系统的连接信息文件中会储存有当前进程的(包括本次HTTP请求在内的)所有开放的TCP连接的索引节点(inode)。对于TCP连接来说,其可以被视为socket:[XXXX]文件,因此索引节点即为套接字对应的编号XXXX,即inode号。在这种情况下,索引节点组内的各个元素分别为当前进程中各个线程对应的TCP连接信息。

在一种可行的实施方式中,获取索引节点组的步骤可以包括:

步骤11:从连接信息文件中获取索引节点信息。

步骤12:从索引节点信息中过滤IP地址为远程地址的目标索引节点信息,得到索引节点组。

本实施例中,连接信息文件具体可以为/proc/self/net/tcp6。连接信息文件的具体内容不做具体限定,其中可以记录有多个索引节点信息,这些索引节点信息并不一定全部都是有效信息,例如可能存在IP地址为远程地址的无效信息。具体的,远程地址可以为0.0.0.0或127.0.0.1等类似的IP地址。远程地址对应的TCP连接并不会向外界发送信息,因此无法实现回显的功能。故而在获取到索引节点信息后,从中过滤掉IP地址为远程地址的目标索引节点信息,利用剩余的索引节点信息生成索引节点组。具体的,可以从索引节点信息中提取索引节点,具体形式为正整数。

其中,从连接信息文件中获取索引节点信息的步骤可以包括:

步骤21:对连接信息文件进行格式筛选,将通过格式筛选的信息确定为索引节点信息。

连接信息文件中可能存储有多种不同类型的信息,即在索引节点信息以外,连接信息文件中可能还存在其他信息。为了准确地获取索引节点信息,可以采用格式筛选的方式,即利用格式匹配规则对连接信息文件中的内容进行检测,若该内容符合格式匹配规则,则说明该内容为索引节点信息。

在获取索引节点组后,在目标目录下获取索引节点组内的元素对应的文件描述符,本实施例中,目标目录可以为/proc/self/fd/。文件描述符即为file descriptor,简称为fd。文件描述符是非负整数,打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件时也需要使用文件描述符来指定待读写的文件。目标目录用于记录文件描述符和索引节点之间的对应关系,记录的具体形式不做限定。例如可以参考图2,图2为本申请实施例提供的一种目标目录的内容示意图。其中记录了各个文件以及对应的文件描述符之间的对应关系。具体的,文件描述符可以被看过链接文件,目标目录中的文件描述符即为当前打开的文件描述符,其分别指向其对应可操作性的文件,例如指向/dev/sda1、/dev/sdb1、socket:[7341066]等。除此之外,还可以包括其他信息,例如可以包括当前时间Nov 21 09:44。

在一种可行的实施方式中,在目标目录下获取索引节点组内的元素对应的文件描述符的步骤可以包括:

步骤31:在目标目录下查找元素,确定元素所处的目录项。

步骤32:在目录项内获取元素对应的文件描述符。

目标目录中包括多个目录项,在目标目录中查找索引节点组内的各个元素,确定各个元素所处的目录项。由于各个元素,即索引节点,在本实施例中具体为socket文件对应的inode号,因此若某一目录项中包括某一inode号,则说明该目录项中记录了与该inode号对应的套接字的文件描述符,可以从目录项中获取到与元素对应的文件描述符。请参考图2,若元素具体为22460,则可以确定其所处的目录项为第四个目录项。在该目录项内获取文件描述符,获取到的文件描述符为137。本实施例并不限定文件描述符的具体获取方式,例如可以检测指向符号,即“->”符号,并将指向符号前的非负整数确定为文件描述符。

S102:利用文件描述符尝试打开对应的套接字。

在获取各个文件描述符后,可以利用文件描述符尝试打开对应的套接字,即利用文件描述符尝试打开索引节点对应的套接字。由于各个线程分别对应于不同的套接字,且各个线程仅能打开自身对应的套接字。因此当某一线程用于执行远程代码实现漏洞利用时,同样只能利用该线程的套接字实现回显功能。而各个线程分别对应于哪一个套接字并不清楚,所以需要利用各个文件描述符进行打开对应套接字的尝试。可以理解的是,尝试打开套接字的方式即为正常的套接字打开方式,套接字打开方式的具体方式不做限定。

S103:若目标套接字被打开,则获取代码执行结果,并利用目标套接字传输代码执行结果。

若目标套接字被打开,则说明目标套接字为本线程对应的套接字,可以利用目标套接字进行代码执行结果回显。本实施例并不限定获取代码执行结果的具体方式,在一种具体的实施方式中,可以先确定目标套接字,在执行远程代码,进而得到代码执行结果,此时获取代码执行结果的步骤可以包括:

步骤41:获取目标设备发送的远程代码。

步骤42:执行远程代码,得到代码执行结果。

需要说明的是,步骤41中获取远程代码可以是从发送远程代码的目标设备处获取;或者可以在先前获取到远程代码后在本地存储,此时从本地获取;或者可以由其他电子设备转发,即从其他电子设备处获取。远程代码的具体内容不做限定,在获取后执行该远程代码,得到对应的代码执行结果。

在另一种具体的实施方式中,可以先对远程代码进行执行,在得到代码执行结果后再确定目标套接字,在确定目标套接字后再获取代码执行结果并进行回显。在这种情况下,代码执行结果可以存储于预设路径,此时获取代码执行结果的步骤可以包括:从预设路径下获取代码执行结果。

在获取代码执行结果后,利用目标套接字传输代码执行结果的步骤可以包括:利用文件描述符将代码执行结果写入目标套接字;利用目标套接字向目标设备发送代码执行结果。需要说明的是,将代码执行结果写入目标套接字的具体方式可以参考相关技术,本实施例在此不做赘述。在写入目标套接字后可以利用其发送代码执行结果,实现代码执行结果的回显。

应用本申请实施例提供的执行结果回显方法,在想要对代码执行结果进行回显时,可以获取索引节点组,索引节点组中的元素分别对应于当前进程中各个线程对应的TCP连接信息。文件描述符与各个线程相对应,可以用于打开线程对应的套接字,套接字在传输数据时基本不受限制。由于代码执行结果由线程执行相应的远程代码得到,而进程中的每个线程仅能打开自己对应的套接字,因此在得到文件描述符后,为了利用套接字对代码执行结果进行传输,可以一一利用各个文件描述符尝试打开对应的套接字。若目标套接字被打开,则说明目标套接字为用于执行远程代码的线程对应的套接字,可以用于传输该线程得到的代码执行结果。因此获取代码执行结果,并利用目标套接字传输该代码执行结果,完成代码执行结果的回显。通过对目标套接字进行确定并利用目标套接字传输代码执行结果,可以不需要利用外网进行回显,提高了回显成功率,同时使得漏洞利用效率较高。

基于上述实施例,本实施例将说明一种具体的回显过程。请参考图3,图3为本申请实施例提供的一种具体的执行结果回显方法流程图。首先查看/proc/self/net/tcp6文件,并根据IP过滤inode,删除IP地址为远程地址(例如0.0.0.0和127.0.0.1)的索引节点,得到inode数组,即索引节点组。然后依次从中去除一个元素,并利用该元素在/proc/self/fd/中查找对应的fd。在得到fd后尝试用Java代码操作fd打开socket,并判断是否能够操作,即是否能够打开socket。若能够操作,则利用fd打开socket,利用代码执行系统命令得到代码执行结果,并将代码执行结果写入socket,并利用socket对代码执行结果进行回显。

在一种具体的实施方式中,整个回显过程可以采用如下代码实现:

Class clazz=Class.forName("java.io.FileDescriptor");

Constructor m=clazz.getDeclaredConstructor(new Class[]{Integer.TYPE});

m.setAccessible(true);

String[]fdArr=f.toString().split("/");

//获得fd

FileDescriptorfd=(FileDescriptor)m.newInstance(new Object[]{newInteger(fdArr[fdArr.length-1];)});

byte[]out=new byte[1024*10];

//执行的命令

Runtime.getRuntime().exec("ifconfig").getInputStream().read(out);

String body=new String(out);

FileOutputStreamos=new FileOutputStream(fd);

//将命令执行的结果写入scoket

new FileOutputStream(fd).write(body.getBytes());

下面对本申请实施例提供的执行结果回显装置进行介绍,下文描述的执行结果回显装置与上文描述的执行结果回显方法可相互对应参照。

请参考图4,图4为本申请实施例提供的一种执行结果回显装置的结构示意图,包括:

获取模块110,用于获取索引节点组,并在目标目录下获取索引节点组内的元素对应的文件描述符;

打开尝试模块120,用于利用文件描述符尝试打开对应的套接字;

回显模块130,用于若目标套接字被打开,则获取代码执行结果,并利用目标套接字传输代码执行结果。

可选地,获取模块110,包括:

信息获取单元,用于从连接信息文件中获取索引节点信息;

过滤单元,用于从索引节点信息中过滤IP地址为远程地址的目标索引节点信息,得到索引节点组。

可选地,信息获取单元,包括:

格式筛选子单元,用于对连接信息文件进行格式筛选,将通过格式筛选的信息确定为索引节点信息。

可选地,获取模块110,包括:

目录项确定单元,用于在目标目录下查找元素,确定元素所处的目录项;

文件描述符获取单元,用于在目录项内获取元素对应的文件描述符。

可选地,回显模块130,包括:

写入单元,用于利用文件描述符将代码执行结果写入目标套接字;

传输单元,用于利用目标套接字向目标设备发送代码执行结果。

可选地,回显模块130,包括:

代码获取单元,用于获取目标设备发送的远程代码;

代码执行单元,用于执行远程代码,得到代码执行结果。

可选地,回显模块130,包括:

结果获取单元,用于从预设路径下获取代码执行结果。

下面对本申请实施例提供的电子设备进行介绍,下文描述的电子设备与上文描述的执行结果回显方法可相互对应参照。

请参考图5,图5为本申请实施例提供的一种电子设备的结构示意图。其中电子设备100可以包括处理器101和存储器102,还可以进一步包括多媒体组件103、信息输入/信息输出(I/O)接口104以及通信组件105中的一种或多种。

其中,处理器101用于控制电子设备100的整体操作,以完成上述的执行结果回显方法中的全部或部分步骤;存储器102用于存储各种类型的数据以支持在电子设备100的操作,这些数据例如可以包括用于在该电子设备100上操作的任何应用程序或方法的指令,以及应用程序相关的数据。该存储器102可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,SRAM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、只读存储器(Read-OnlyMemory,ROM)、磁存储器、快闪存储器、磁盘或光盘中的一种或多种。

多媒体组件103可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器102或通过通信组件105发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口104为处理器101和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件105用于电子设备100与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near Field Communication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件105可以包括:Wi-Fi部件,蓝牙部件,NFC部件。

电子设备100可以被一个或多个应用专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、数字信号处理器(Digital Signal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field ProgrammableGate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述实施例给出的执行结果回显方法。

下面对本申请实施例提供的计算机可读存储介质进行介绍,下文描述的计算机可读存储介质与上文描述的执行结果回显方法可相互对应参照。

本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述的执行结果回显方法的步骤。

该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本领域技术人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应该认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系属于仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语包括、包含或者其他任何变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。

本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号