返回首页  设为首页  加入收藏  今天是:
网站首页电脑主板电脑cpu电脑内存电脑硬盘电脑显卡电脑电源显示器电脑配件电脑维修
相关文章
 16 编写双管道ShellCode
 显存、内存、外存带你了解电…
 微星推出暗黑骑士电脑主机 采…
 严打严罚:消息称微星显卡将…
 显卡市场暴跌27%
 华硕 ProArt RTX 4060 Ti 16…
 聊一聊:你用了最久的显卡是…
 就挺秃然的消失的朋友攻略
 地表最强机械硬盘!希捷酷狼…
 win11如何分区硬盘 win11分区…
 为什么电脑都从c盘开始算盘符…
 大伙有机械硬盘坏过经历的吗…
 win10电脑安装固态硬盘后频繁…
 求助我的雅俊e6装华硕b450m上…
 华硕好屏 无忧换新 年度4+4无…
 羊城文史——广州工业文化遗…
 华硕售后服务网点查询华硕笔…
 没有电脑怎么领取(现在电脑…
 150W开关电源电路图详解
 开关电源轻载啸叫解决
 SA-PD400M拍击式无菌均质器不…
 ATX玩家福音金牌全模组也能有…
 电动汽车电池充电器电路原理…
 国内“4S店”不再一统天下 盘…
 天润乳业获3家机构调研:公司…
 中国月饼文化节推出“月饼趋…
 水羊股份获190家机构调研:E…
 洽洽食品获173家机构调研:公…
 华硕轻薄笔记本(超薄笔记本电…
 2023年4月轻薄本推荐指南
 如何评价售价17999的华硕灵耀…
 华硕笔记本选购攻略|2023年…
 华硕UX30
 台式电脑主板维修方法有哪些…
 电脑主板维修的检修流程和方…
 郑州笔记本维修培训_爱维
 台式电脑主板维修方法有哪些…
 硬件维护
 华为系列——PSLRAI设计修图…
 2023年8月 装机配置推荐打游…
 AMD Zen5跑分逆天!Zen架构诞…
 聊一台游戏性能超强的笔记本
 繁琐但不困难笔记本升级CPU实…
 购32G内存电脑到手变16G续 联…
 win11检测工具在哪 win11检测…
 Win11怎么看内存频率 Win11系…
 win11虚拟内存设置哪个盘 wi…
 电脑的内存条挑选要注意什么…
 i7-13700K能带的动40系显卡吗…
 GTX 1630显卡性能怎么样 和G…
专题栏目
网络
您现在的位置: 电脑评测网 >> 电脑内存 >> 正文
高级搜索
16 编写双管道ShellCode
作者:佚名 文章来源:本站原创 点击数: 更新时间:2023/8/30 22:41:23 | 【字体:

  康有为曾孙女惊艳球赛本文将介绍如何将绑定到双向管道上,这是一种常用的黑客反弹技巧,可以让用户在命令行界面下与其他程序进行交互,我们将从创建管道、启动进程、传输数据等方面对这个功能进行详细讲解。此外,本文还将通过使用汇编语言一步步来实现这个可被注入的后门,并以此提高代码通用性。最终,我们将通过一个实际的漏洞攻击场景来展示如何利用这个后门实现内存注入攻击。

  首先管道是一种IPC机制,用于在同一台计算机上进行进程间通信。它可以让一个进程将数据写入到管道中,然后另一个进程可以从管道中读取这些数据。一般而言管道可以分为匿名管道或命名管道两种形式。

  •匿名管道是一种临时的管道,只能用于父子进程之间或兄弟进程之间的通信。它是一个双向的、无名的、半双工的通道,只能在创建它的进程及其子进程之间进行通信。

  •命名管道是一种具有名称的管道,可以用于在不同的进程之间进行通信。命名管道可以在不同的进程之间共享,并可以在多个进程之间传递数据。它可以是单向的或双向的,可以使用同步或异步方式进行通信。

  在实现中,管道通常是由操作系统提供的一段共享内存区域。在管道创建时,操作系统会为管道分配一段内存区域,该内存区域由创建管道的进程和与其通信的进程共享。当进程往管道中写入数据时,数据会被存储在管道的内存缓冲区中,然后等待另一个进程从管道中读取数据。当另一个进程读取管道中的数据时,数据将从内存缓冲区中被读取并且被删除,从而保证数据传输的正确性和可靠性。

  有了管道的支持,我们向其他进程传输数据时就可像对普通文件读写那样简单。管道操作的标识符是句柄,当管道被正确创建时则,我们可以直接使用等文件读写函数来读写它,读者无需了解网络间进程间通信的细节部分;

  一般匿名管道的创建需要调用函数实现,它可以创建一个管道,并返回两个句柄,一个用于读取管道数据,另一个用于写入管道数据。

  其中,和是类型的指针,用于接收读取和写入管道的句柄。是指向结构的指针,用于指定管道的安全属性,通常设置为。是管道缓冲区的大小,若为0则使用默认大小。在使用函数创建匿名管道后,读者可以使用函数往管道中写入数据,也可以使用函数从管道中读取数据。读取和写入管道的操作需要使用相应的句柄。

  接着来简单介绍一下函数,该函数用于创建一个新的进程,返回值非0表示成功,为0表示失败。为了让2个进程产生父子及继承关系,参数应设置为True,该函数的原型如下所示;

  实现匿名管道通信,我们还需要了解最后一个函数,该函数用于检查命名管道中的是否有数据,函数返回值为类型,如果函数调用成功,则返回,否则返回

  在调用成功的情况下,参数返回实际读取的字节数,参数返回管道中可用的字节数,参数返回下一条消息剩余的字节数。如果命名管道为空,则函数会阻塞等待数据到来,当接收到数据时则读者即可通过调用在管道中读取数据,或调用来向管道写入数据,至此关键的API函数已经介绍完了;

  其实匿名管道反弹CMD的工作原理可以理解为,首先攻击机发命令并通过传给目标机的父进程,目标机的父进程又通过一个匿名管道传给子进程,这里的子进程是,CMD执行命令后,把结果通过另一个匿名管道返给父进程,父进程最后再通过返回给攻击机,以此则实现了反弹Shell的目的;

  接着我们就来实现这个双向匿名管道功能,在实现管道之前需要先建立套接字,首先使用函数初始化库,并使用函数创建一个套接字。然后,使用函数将套接字绑定到特定的IP地址和端口号。函数将套接字设置为侦听传入的连接,而函数会一直阻塞直到建立客户端连接。一旦连接建立,代码会返回客户端的套接字描述符clientFD。

  有了套接字功能,则第二步需要创建两个管道,其中第一个管道用于输出执行结果,第二个管道用于输入命令,把CMD子进程输出句柄用管道1的写句柄替换,此时主进程就可以通过读管道1的读句柄来获得输出;另外,我们还要把CMD子进程的输入句柄用2的读句柄替换,此时主进程就可以通过写管道2的写句柄来输入命令。

  为了得到上述绑定效果,我们在设置CMD子进程启动参数时就应该做好绑定工作,通过填入如下所示的变量值,并调用实现对进程的绑定,通过替换进程的输出句柄为管道1的写句柄,输入句柄为管道2的读句柄。最后再开启CMD命令就实现了绑定功能,代码如下所示;

  当CMD子进程启动后,则下一步则是和远程攻击机之间建立通信,如下代码通过使用和函数不断检查从远程客户端或CMD进程接收到的数据。如果从CMD进程中有可读数据,则使用函数读取该数据并使用函数发送回远程客户端。如果没有数据可读,则程序接收从远程客户端发来的命令,并将命令写入管道2,即传给CMD进程。这个过程不断循环执行,直到出现错误或收到退出命令。

  如上代码所示就是完整的双向匿名管道的实现原理,我们通过整合并编译,打开编译后的可执行程序,此时读者可使用工具执行则可连接到该后门内部,并以此获得一个Shell后门,此时读者可执行任意命令,输出效果如下图所示;

  在之前文章中我们介绍了如何使用C语言创建一个双管道通信后门,而对于在实战中,往往需要直接注入后门到内存,此时将后门转换为是一个不错的选择,首先为了保证文章的篇幅不宜过长,此处暂且不考虑生成汇编代码的通用性,首先我们需要得到在当前系统中所需要使用的函数的动态地址,至于如何提取这些动态地址,在之前的文章通用提取中有过详细的介绍,此处我们就直接给出实现代码;

  当读者运行这段程序时,则会输出及的模块基址,同时还会输出这些我们所需要的函数的内存地址,输出效果如下图所示;

  接着我们需要将这些函数内存地址依次填充到汇编代码中,将其动态压入堆栈保存,如下是笔者填充过的汇编代码片段,此处的十六进制数读者电脑中的与笔者一定不一致,请读者自行替换即可;

  小提示:STDcall是一种调用约定,用于指定函数参数的传递方式、函数返回值的处理方式以及函数调用后堆栈的清理方式,它在Windows平台上广泛使用。该调用规定,函数的参数从右到左依次入栈,函数返回值存储在EAX寄存器中。在函数调用后,由调用方负责清理堆栈上的参数,因此被调用函数不需要执行额外的堆栈清理操作。

  在源程序的第一句指令,是执行。我们按照下函数的调用规范,首先将参数从右至左依次压入栈中,其中该函数的第二个参数表示一个地址,因为WS地址已经不再使用了,所以此处我们就随意压入一个地址即可,第一个参数时则此时我们直接使用压入,至此函数的参数已经填充完毕了,接下来则是调用该函数,因的地址保存在中,所以我们通过就可以调用到该地址啦。

  接着是原程序中的第二个函数读者需要先将依次入栈,最后再的地址,也就是调用即可实现调用。

  读者是否会有疑问,此处为什么会传递这些参数呢,读者可在源程序的开头位置设置断点,并打开反汇编窗口,观察建立的参数传递情况,即可一目了然;

  接着我们继续提取第三个关键函数绑定函数,相比于前两个函数而言,绑定函数要显得更加复杂一些,原因是该函数需要填充一个的结构体变量,所以在填充参数之前还需要具体分析;

  我们还是借助VS工具,在函数上下断点,并打开反汇编窗口(Ctrl+Alt+D),观察编译器是如何编译处理的,如下图所示;

  第二个参数是结构的地址。在结构中,包括了绑定的等值。和在堆栈中构造字符串一样,我们也在栈中构造出的结构,那么就是结构的地址了。

  为了能够更好的提取到第二个参数的压入信息,我们需要将调试器运行到处,并打开内存窗口,输出跳转到当前结构体填充位置处,读者可看到如下内存数据;

  从上图中可看出,如下执行后其实就是得到了,知道了确切要赋的值,我们就依葫芦画瓢,开始压栈此时我们就在堆栈中构造出了结构的值,而且就正好是结构的地址。我们把它保存给作为第二个参数压入堆栈。

  好了,剩下就简单了,最后一个参数是。上面执行了后,我们把的值保存在了中,所以将压入就可以了。最后调用函数。函数地址存放在中,将这段汇编代码结合起来就像如下所示。

  好了根据上述方法,读者需要依次跟踪代码执行流程,并嫁给你所需要的参数依次提取出来,最终将这些参数组合在一起,即可得到如下方所示的一段汇编代码片段;

  接下来则是提取特征码,提取时读者可以使用如下程序实现,将上方汇编代码放入到区域内,运行后则可提取出特定特征码参数;

  当读者运行该程序时,则会弹出服务端请求网络创建功能,此时我们的就算成功提取出来了,输出效果图如下所示;

电脑内存录入:admin    责任编辑:admin 
  • 上一个电脑内存:

  • 下一个电脑内存: 没有了
  •  
     栏目文章
    普通电脑内存 16 编写双管道ShellCode (08-30)
    普通电脑内存 显存、内存、外存带你了解电脑存储类型 (08-30)
    普通电脑内存 微星推出暗黑骑士电脑主机 采用B760M主板和DD… (08-30)
    普通电脑内存 购32G内存电脑到手变16G续 联想:给出多种解决… (08-30)
    普通电脑内存 win11检测工具在哪 win11检测工具位置介绍【详… (08-30)
    普通电脑内存 Win11怎么看内存频率 Win11系统查看内存频率方… (08-30)
    普通电脑内存 win11虚拟内存设置哪个盘 win11虚拟内存设置方… (08-30)
    普通电脑内存 电脑的内存条挑选要注意什么(一) (08-30)
    普通电脑内存 win11内存完整性关闭有什么危害 win11内存完整… (08-29)
    普通电脑内存 苹果iPhone14会进水吗 苹果验机步骤怎么样? (08-29)
    普通电脑内存 这家韩国芯片巨头靠人工智能火了 它统治了一个… (08-29)
    普通电脑内存 内存彻底“白菜价”12GB+256GB仅1149元还有1亿… (08-29)
    普通电脑内存 苹果iPhone14能扩内存吗 Pro新机什么时候店里… (08-29)
    普通电脑内存 运行内存是什么 (08-28)
    普通电脑内存 红米note54G的运行内存和6G的在使用上感受差别… (08-28)
    普通电脑内存 ram是什么意思是运行内存吗 (08-28)
    普通电脑内存 手机运行内存+8G是什么意思 (08-28)
    普通电脑内存 我们在购买手机时该如何选择运行内存 (08-28)
    普通电脑内存 i5 13490F 支持多少内存 (08-27)
    普通电脑内存 iPhone 15机皇升级8GB+2TB 苹果太会省钱:内存… (08-27)