SQL注入学习
本次实验环境用的是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注入学习的更多相关文章
- SQL注入学习资料总结
转载自:https://bbs.ichunqiu.com/thread-12105-1-1.html 什么是SQL注入 SQL注入基本介绍 结构化查询语言(Structured Query Lang ...
- sql注入学习笔记,什么是sql注入,如何预防sql注入,如何寻找sql注入漏洞,如何注入sql攻击 (原)
(整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文章最后关于如何预防sql注入) (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文 ...
- SQL学习之SQL注入学习总结
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 测试数据库 我们本文就以如下数据库作为测试数据库,完成我们的注入分析 ...
- sql注入学习笔记 详解篇
sql注入的原理以及怎么预防sql注入(请参考上一篇文章) https://www.cnblogs.com/KHZ521/p/12128364.html (本章主要针对MySQL数据库进行注入) sq ...
- SQL注入学习-Dnslog盲注
1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...
- 从零开始的sql注入学习(挖坑不填)
首先,本人是小白,这篇文章也只是总结了一下大佬们的sql注入方法,要是有错,请各位大佬指出,以便学习. 虽然我是菜鸡,但是太过基础的sql注入问题也就不再重复的解释了.直接从常用的说起. 实战中常用的 ...
- 简单sql注入学习
sql注入是什么? 所谓SQL注入,就是通过把SQL命令插入到Web表单提 交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQ ...
- SQL注入学习(一)
注入攻击的本质:web应用程序没有过滤用户输入或过滤不严谨,直接把用户输入的恶意数据当做代码执行 两个条件: 1.用户能够控制输入 2.原本程序要执行的代码,拼接了用户输入的数据 注入类型 SQL注入 ...
- Java SQL注入学习笔记
1 简介 文章主要内容包括: Java 持久层技术/框架简单介绍 不同场景/框架下易导致 SQL 注入的写法 如何避免和修复 SQL 注入 2 JDBC 介绍 JDBC: 全称 Java Databa ...
- sql注入学习心得与sqlmap使用心得
做题是最好的老师 首先先来分享一下我用来练手的题目,实验吧中的简单的sql注入1,2,3 不得不说,sql注入真是一个神奇的东西,至少我以前看起来一点头绪都没有的题目能入手了 首先是简单的sql注入3 ...
随机推荐
- keil 编译器V6 定义函数在ram中运行-和在指定地址定义常量
之前一直是用v5编译,编译速度慢,换成V6编译速度差不多快50% ,而且arm后期只维护v5编译器不在更新v5编译器.切换到V6编译器大势所趋,把之前v5且换到v6需要如下更改: 1. CMSIS包需 ...
- soup.select的用法
1.通过标签选择 # 选择所有title标签 soup.select("title") # 选择所有p标签中的第三个标签 soup.select("p:nth-of-ty ...
- 【转载】 C#中常见的泛型集合类有哪些
在C#语言编程过程中,List集合类是最常见的泛型集合类,其实除了List集合,还有其他一些常用的泛型集合类,如字典类型Dictionary泛型集合类.先进先出的队列类型Queue泛型集合类.后进先出 ...
- JCEF-tab形式展示浏览器
当我们点击target值为_blank的链接时,JCEF默认以弹出窗口的形式打开新页面,要实现tab栏形式,可参考以下步骤 1.创建一个实现CefLifeSpanHandlerAdapter的类,重写 ...
- rabbitmq:配置rabbitmq-management插件
rabbitmq提供了一个图形的管理界面,用于管理.监控rabbitmq的运行情况,它是以插件的形式提供的,如果要启用需要启用插件 一.启用插件 rabbitmq-plugins enable rab ...
- Centos7 rsync+inotify实现实时同步更新
inotify slave部署 把master上指定文件下载到本地的主机指定目录 yum install rsync –y [root@localhost ~]# useradd rsync ...
- Elasticsearch使用DateHistogram聚合
date_histogram是按照时间来构建集合(桶)Buckts的,当我们需要按照时间进行做一些数据统计的时候,就可以使用它来进行时间维度上构建指标分析. 在前面几篇中我们用到的hitogr ...
- JavaScript一些对象。
Function对象: 1.创建方式: function f(a) { alert(a); } var f=function(a){ alert(a); } 2.方法: 3.属性: 1.length: ...
- 机器学习笔记8:XGBoost
目录 1 回顾一下决策树 2 XGBoost举例 2.1 问题和结果 2.2 第一棵树的计算方法 2.3 第二棵树的计算方法 3 XGBoost公式推导 3.1 第一种理解公式 3.2 第二种理解公式 ...
- prometheus学习系列二: Prometheus安装
下载 在prometheus的官网的download页面,可以找到prometheus的下载二进制包. [root@node00 src]# cd /usr/src/ [root@node00 src ...