本次实验环境用的是Xampp,搭建的sqli-labs

配置环境:

下载路径https://github.com/Audi-1/sqli-labs,下载源代码,将解压好的文件夹放在xampp\htdocs文件夹下,然后修改/sqli-labs/sql-connections/db-credb.inc文件中mysql账号密码,使之能连接上数据库

开启apache/MySQL服务

访问http://localhost:8088/sqli-labs(我端口修改为8088)

点击创建数据库

接下来进入第一关

在开始之前,我们回忆一下Mysql基本操作命令。

开启MySQL服务,使用cmd命令行操作MySQL。使用mysql -u root -p,输入密码登录MySQL(-u是指输入用户,-p是输入密码)

查看所有数据库,show databases;

此时发现了刚刚,seli-labs创建的数据库security。查看数据库,use security;

查看当前数据库所有表,show tables;

查字段信息

查看user中数据用户信息,select * from user;

还可以使用万能的查询语句进行查库、查表、查列、查字段。

查库:select schema_name from information_schema.schemata;

查询security表:select table_name from information_schema.tables where table_schema='security';

查询users列:select column_name from information_schema.columns where table_schema='security' and table_name='users';

查字段:select id,username,password from security.users;

总结一下,我们可以使用

查库:select schema_name from information_schema.schemata;

查表:select table_name from information_schema.tables where table_schema='security';

查列:select column_name from information_schema.columns where table_name='users';

查字段:select id,username,password from security.users;

接下来我们可以进行实验了,首先打开Less-1第一关尝试输入数字型?id=1实验一下效果,就是这个样子的

在正式开始学习之前我们先打开源代码,将源代码进行调整

找到源代码中如下所示位置,加入代码echo $sql;将sql语句进行输出,方便我们更清晰的去学习

输入?id=1实验一下

这样就可以看到,SQL语句啦

我们将它放到数据库执行一下,发现得到了id=1的用户名/密码

查找所有内容来自users表条件是id=1的数据,那limit是什么意思呢?

我们去掉条件试一下select * from users limit 0,1;

发现没有变化

limit 1,1得到了id=2的用户名密码

limit 2,1得到了id=3的用户名密码

所以第一个参数是第几行开始,下面试一下第二个字段

可以看出第二个参数是展示多少行

所以limit 1,1第一个参数是从第几行开始,第二个参数是显示几个。

知道了sql语句之后,我们看一下第一题

刚刚输入?id=1得到了id=1的数据,现在我们输入?id=1'看一下

此时页面报错了,我因为我们多输入一个’sql语句变成了SELECT * FROM users WHERE id='1'' LIMIT 0,1无法执行所以报错了,所以此时就可以判断这里存在sql点

如果我们将原来语句中闭合的单引号后面的内容注释掉的话会怎么样呢?

此时select *from users where id='1'后面被注释所以他是可以执行成功的

下面可以使用order by来尝试猜他的列,首先输入order by 10试一下

此时提示是‘未知第10行’

而输入order by 1时页面显示正常

我们去mysql查看一下,order by是什么意思呢?

首先看一下user表正常显示情况

order by 10时,返回报错信息:未知第10行

order by 1时,显示和不加order by没有区别

下面试试order by 2,此时没有报错,但是显示顺序发生了变化,以第2列进行a-z的排序

order by 3时,以第三列进行了排序,原来order by是几就是以几列进行排序,那么,users表只有3列怎么办呢,接下来试一下order by 4;

order by 4时系统再次报错

这下我们知道了,使用order by函数对表的列进行猜解,直到页面显示正常为止。

知道了表的列之后,我们要做的就是查看哪一列可以进行利用。此时需要使用到union联合查询

但此时并没有什么效果,我们将sql语句复制到MySQL看一眼是什么原因

可以看到此时的意思应该就是:查询来自users表id=1的所有数据并且查询1,2,3,但是此时页面只能显示一行所以我们所想的并没有显示出来,此时我们可以查询一个users表中没有的数据,使第一句显示不出内容让mysql只显示我们union后面的信息。

这样就达到我们的目的啦

我们顺利的得到了两个回显。

接下来我们利用两个回显位置执行查询数据库版本操作

那么此时我们找到了可以利用的注入点,我们要做什么呢,查他的数据库、表、列、数据。

首先我们查询他的数据库呢,-1' union select 1,2,schema_name from information_schema.schemata  --+

得到了第一个数据库信息

使用limit控制一下要输出的信息

第二个数据库名

但是此时每次只能取到一个数据,使用group_concat()函数产生一个表名的组,进行查询

这样我们就一次得到了所有数据库名

下面我们查询表信息,使用?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables --+

但是此时查询到的是所有数据库的表所有表信息,我们只需要security表,只用where 添加条件就好了-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

下面是取列的数据

SQL注入学习的更多相关文章

  1. SQL注入学习资料总结

    转载自:https://bbs.ichunqiu.com/thread-12105-1-1.html  什么是SQL注入 SQL注入基本介绍 结构化查询语言(Structured Query Lang ...

  2. sql注入学习笔记,什么是sql注入,如何预防sql注入,如何寻找sql注入漏洞,如何注入sql攻击 (原)

    (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文章最后关于如何预防sql注入) (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文 ...

  3. SQL学习之SQL注入学习总结

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 测试数据库 我们本文就以如下数据库作为测试数据库,完成我们的注入分析 ...

  4. sql注入学习笔记 详解篇

    sql注入的原理以及怎么预防sql注入(请参考上一篇文章) https://www.cnblogs.com/KHZ521/p/12128364.html (本章主要针对MySQL数据库进行注入) sq ...

  5. SQL注入学习-Dnslog盲注

    1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...

  6. 从零开始的sql注入学习(挖坑不填)

    首先,本人是小白,这篇文章也只是总结了一下大佬们的sql注入方法,要是有错,请各位大佬指出,以便学习. 虽然我是菜鸡,但是太过基础的sql注入问题也就不再重复的解释了.直接从常用的说起. 实战中常用的 ...

  7. 简单sql注入学习

    sql注入是什么? 所谓SQL注入,就是通过把SQL命令插入到Web表单提 交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQ ...

  8. SQL注入学习(一)

    注入攻击的本质:web应用程序没有过滤用户输入或过滤不严谨,直接把用户输入的恶意数据当做代码执行 两个条件: 1.用户能够控制输入 2.原本程序要执行的代码,拼接了用户输入的数据 注入类型 SQL注入 ...

  9. Java SQL注入学习笔记

    1 简介 文章主要内容包括: Java 持久层技术/框架简单介绍 不同场景/框架下易导致 SQL 注入的写法 如何避免和修复 SQL 注入 2 JDBC 介绍 JDBC: 全称 Java Databa ...

  10. sql注入学习心得与sqlmap使用心得

    做题是最好的老师 首先先来分享一下我用来练手的题目,实验吧中的简单的sql注入1,2,3 不得不说,sql注入真是一个神奇的东西,至少我以前看起来一点头绪都没有的题目能入手了 首先是简单的sql注入3 ...

随机推荐

  1. 10. Scala数据结构(上)-集合操作

    10.1 数据结构特点 10.1.1 Scala集合基本介绍 uml => 统一建模语言 1) Scala同时支持不可变集合和可变集合,不可变集合可以安全的并发访问 两个主要的包 不可变集合:s ...

  2. Ubuntu18 安装搭建Harbor

    1.安装docker-compose1.下载docker-compose的最新版本 sudo curl -L "https://github.com/docker/compose/relea ...

  3. 关于redis key命名规范的设计

    一.实现目标 简洁,高效,可维护 二.键值设计规约 1 . Redis key命名风格 [推荐]Redis key命名需具有可读性以及可管理性,不该使用含义不清的key以及特别长的key名: [强制] ...

  4. 用Python程序温度转换实例

    实例:温度转换 (1)分析问题:利用程序进行温度转换,由用户输入温度值,程序给出输出结果:通过语音识别,图像识别等方法自动监听并获得温度信息发布渠道(如收音机.电视机)给出的温度播报源数据,再由程序装 ...

  5. kafka controller脑裂(多个controller)问题

    问题:情况一:创建topic成功,但是produce的时候,却报unknown partition的错误,但zk上却显示了每个partition的leader信息:情况二: 给某个topic增加分区, ...

  6. Introducing KSQL: Streaming SQL for Apache Kafka

    Update: KSQL is now available as a component of the Confluent Platform. I’m really excited to announ ...

  7. 一个简单便捷的树形显示Ztree

    这是本人在闲时研究的一个用于显示树形列表的小玩意. zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. 下面就说说怎么用吧 ...

  8. Docker安装Consul集群

    Docker 安装Consul集群 使用windows 环境,Docker desktop community 构建consul集群. 1.docker 容器网络 docker安装后,默认会创建三种网 ...

  9. Oracle使用中的常规操作总结

    写一篇在使用Oracle过程中一些常用的操作,以便于忘记的时候查看 一.创建用户和给用户赋予权限 create user 用户名 identified by 密码; --12c一下版本 create ...

  10. Mysql之索引(六)

    1.思考 在图书馆是怎么找到一本书的? 一般的应用系统对比数据库的读写比例在10:1左右(即有10次查询有1次写操作),而且插入操作和更新操作很少出现性能问题. 遇到最多,最复杂的还是一些复杂的查询操 ...