sqli-labs(一)
第一关:第一关会讲的比较详细,后面的关卡中只有特殊的地方我会单独拿出来说。
第一关是一个很简单的string类型的sql注入,并且会报错,输入参数id=',页面会报错

值得注意的是:
1.报错信息中 near "1" limit 0,1' at line 1,但是我们输入的是1',所以说这半句中的单双引号和后台sql语句中的单双引号不是对应的关系,我们做测试的时候不能根据报错信息来判断后台sql语句是用的单引号还是双引号进行的拼接。(这里说错了,补充一下啊:实际上这里页面的报错信息不是双引符号,是两个单引符号最前面和最后面的代表这是一句话,也就是说sql中的字符串片段实际上是'1'' limit 0,1这里的''是两个单引符号,这样就解释得清楚了我们输入1’和sql中的'组成了1''所以报错了,写这段话得原因是我们可以根据这段报错信息推出后台是'还是")
2.如果输入的是中文的单引符号、中文的双引符号以及英文的双引符号都不会报错,只是查询不出数据来,因为后台将这些符号作为变量进行查询,比如输入id=1",那么后台会在数据库中寻找id为1"的用户信息,显然不存在嘛。
3.使用order by时一般需要在sql语句的后面,如下图中sql语句进行拼凑的后面还有 limit 0,1,需要进行注释掉,一般使用#或--

4.在get请求中的特殊字符如空格、#以及单双引号都需要用url编码,否则sql语句的执行可能报错、甚至时http请求出错(空格没编码时)。空格(%20)、单引号(%27)、双引号(%22)、#(%23).....
ok,现在正式开始sql注入。(post中最好也使用url编码)
一般单引符号报错后可以初步判断存在sql注入,接下来的
第一步:判断当前表有多少列,使用order by 来判断,一般使用夹逼法,先使用一个较大的列号,输入id=1'%20order%20by%209%23

可以看到当order by 后面的列号大于数据表的列数就会报错,如order by后面的列号时小于数据表的列数,页面则能正常显示。

这关中order by 4会报错,order by 3正常显示,可以看出该表中是三个字段。
第二步:判断该表中的三个字段分别是什么数据类型,且哪些字段会在页面中显示
注意:1.很多时候执行玩查询操作后,后台程序只取第一行显示出来,所以id后面的参数应该是-1或者为空,只有前面查询出的数据为空,这样才会将后面的联合查询的数据显示出来
2.实际场景中还需要判断哪显示在页面中的字段哪些是字符型,比如说我们用user()查询当前用户名,却放在一个int类似的字段上会报错。但第一关中users表中的字段都是string类型,所以不存在此类问题。实际场景中最好是先使用union select null,null,null# 然后再一个个试出数据类型。
3.但后面我们却是直接使用的union select 1,2,3# 然后查看页面中哪个数字在显示页面上,来判断是哪个字段被显示在页面。这是因为sqli-labs使用得是php搭建得,而php是弱语言类型,int类型传入后台拼凑在sql中时,如果表中该字段是string类型会自动转换数据类型。
这里需要使用union 联合查询,输入id=-1'%20union%20select%201,2,3%23

可以看到,是第二个和第三个字段被显示在页面上
第三步:
所以后面我们只需将第二三这两个字段中换成我们想要进行得查询操作即可,mysql中自带一些函数可以供我们使用
user() 当前用户名
database() 当前数据库名
version() 当前数据库名
这里有一处小技巧:比如说我们想一处查询出上面三个信息,当表单只显示两个字段中的数据,怎么办?
可以使用使用mysql中的连接函数concat_ws,concat_ws的第一个参数是分割符,后面的是需要拼接的字符串
例如输入id='%20union%20select%201,concat_ws(':',user(),database(),version()),3%23

不过,为了保险起见还是不要直接使用特殊字符,concat_ws(char(32,58,32),user(),database(),version())。空格的十进制ASCII是32,:的十进制ASCII是58
也可以使用group_concat将查询出来的多行连接起来
第四步:查询知道当前数据库名是security后,如何才能知道该数据库中有哪些表,表中又有哪些字段呢?
这里需要利用到mysql的系统数据库information_schema,需要利用到一下三个表
SCHEMATA表:储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等,show databases的结果取之此表。
TABLES表:储存mysql中的表信息,(当然也有数据库名这一列,这样才能找到哪个数据库有哪些表嘛)包括这个表是基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最后更新时间等。show tables from schemaname的结果取之此表
COLUMNS表:提供了表中的列信息,(当然也有数据库名和表名称这两列)详细表述了某张表的所有列以及每个列的信息,包括该列是那个表中的第几列,列的数据类型,列的编码类型,列的权限,猎德注释等。是show columns from schemaname.tablename的结果取之此表。
1.shemata表中有一个字段是需要记住的:schema_name,里面是所有的数据库名
输入id='%20union%20select%201,group_concat(schema_name),3%20from%20information_schema.schemata%23
这里使用的group_concat将多行连接起来,如下图

2.tables表中有两个字段需要记住:table_schema,table_name分别代表,数据库名和表面
现在已经知道所有数据库名后,这里查询security数据库中有哪些表
id='%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema='security'%23

3.columns表中有两个字段是需要记住的:table_name和column_name分别代表表名和字段名
现在想查询出users这个表有哪些字段
id='%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_name='users'%23

第五步:查询users表中用户的账号密码

sqli-labs(一)的更多相关文章
- SQLI LABS Basic Part(1-22) WriteUp
好久没有专门练SQL注入了,正好刷一遍SQLI LABS,复习巩固一波~ 环境: phpStudy(之前一直用自己搭的AMP,下了这个之后才发现这个更方便,可以切换不同版本的PHP,没装的小伙伴赶紧试 ...
- Sqli labs系列-less-3 。。。
原本想着找个搜索型的注入玩玩,毕竟昨天被实力嘲讽了 = = . 找了好长时间,我才发现,我没有 = = ,网上搜了一个存在搜索型注入的源码,我看了好长时间,楞没看出来从哪里搜索注入了....估计是我太 ...
- Sqli labs系列-less-2 详细篇
就今天晚上一个小插曲,瞬间感觉我被嘲讽了. SQL手工注入这个东西,杂说了吧,如果你好久不玩的话,一时说开了,你也只能讲个大概,有时候,长期不写写,你的构造语句还非常容易忘,要不我杂会被瞬间嘲讽了啊. ...
- Sqli labs系列-less-1 详细篇
要说 SQL 注入学习,网上众多的靶场,就属 Sqli labs 这个系列挺不错的,关卡达到60多关了,我自己也就打了不几关,一个挺不错的练习SQL注入的源码. 我一开始就准备等我一些原理篇总结完了, ...
- SQL注入系列:SQLi Labs
前言 关于注释 说明:在SQL中--[空格]表示注释,但是在URL中--空格在发送请求的时候会把最后的空格去掉,所以用--+代替,因为+在被URL编码后会变成空格 MYSQL有三种常用注释: --[空 ...
- Sqli - Labs 靶场笔记(一)
Less - 1: 页面: URL: http://127.0.0.1/sqli-labs-master/Less-1/ 测试: 1.回显正常,说明不是数字型注入, http://127.0.0.1/ ...
- SQLI LABS Challenges Part(54-65) WriteUp
终于到了最后一部分,这些关跟之前不同的是这里是限制次数的. less-54: 这题比较好玩,10次之内爆出数据.先试试是什么类型: ?id=1' and '1 ==>>正常 ?id=1' ...
- SQLI LABS Stacked Part(38-53) WriteUp
这里是堆叠注入部分 less-38: 这题啥过滤都没有,直接上: ?id=100' union select 1,2,'3 less-39: 同less-38: ?id=100 union selec ...
- SQLI LABS Advanced Part(23-37) WriteUp
继续继续!这里是高级部分! less-23: 提示输入id参数,尝试: ?id=1' and '1 返回的结果与?id=1相同,所以可以直接利用了. ?id=1' order by 5# 可是页面返回 ...
- Sqli labs系列-less-5&6 报错注入法(下)
我先输入 ' 让其出错. 然后知道语句是单引号闭合. 然后直接 and 1=1 测试. 返回正常,再 and 1=2 . 返回错误,开始猜表段数. 恩,3位.让其报错,然后注入... 擦,不错出,再加 ...
随机推荐
- React组件的State
React组件的State 1.正确定义State React把组件看成一个状态机.通过与用户的交互,实现不同状态,然后渲染UI,让用户界面和数据保持一致.组件的任何UI改变,都可以从State的变化 ...
- Java与面向对象之随感(1)
大一下学期上完了c++课程,当时自我感觉很良好,认为对面向对象编程已经是身经百战了,但是上了院里HuangYu老师的Java课之后,才发现自己对于面向对象的编程风格的理解只在皮毛,着实惭愧不已. 假设 ...
- lua--openresty--
lua-openresty---docker-- https://blog.csdn.net/boling_cavalry/article/details/79290944 lua-practice ...
- dp的斜率优化
对于刷题量我觉得肯定是刷的越多越好(当然这是对时间有很多的人来说. 但是在我看来我的确适合刷题较多的那一类人,应为我对知识的应用能力并不强.这两天学习的内容是dp的斜率优化.当然我是不太会的. 这个博 ...
- LeetCode 953 Verifying an Alien Dictionary 解题报告
题目要求 In an alien language, surprisingly they also use english lowercase letters, but possibly in a d ...
- Excel--数据透视图
原文:https://ke.qq.com/course/289406 1.数据源注意项 2. 3.选中数据源操作 任意选中数据源表格中的单元格(有值得单元格),插入数据透视表 默认数据源区域就是整个表 ...
- HTML5 自定义属性
先声明 HTML5的自定义属性浏览器支持性不太好 目前只有firefox6+和chrome浏览器支持 元素除了自带的属性外 另外也可以加自定义属性 不过需要在前面加上data- 下面举个例子 ...
- 洛谷 P3684 机棚障碍Hangar Hurdles [CERC2016] 图论
正解: 解题报告: 传送门! 首先不难想到这题主要有两个问题需要解决,一个是预处理出各个点的箱子半径最大值,一个是求ans 然后分别港下QwQ 首先关于预处理要说下昂 预处理有三种方法,分别港下 第一 ...
- 洛谷P3354 Riv河流 [IOI2005] 树型dp
正解:树型dp 解题报告: 传送门! 简要题意:有棵树,每个节点有个权值w,要求选k个节点,最大化∑dis*w,其中如果某个节点到根的路径上选了别的节点,dis指的是到达那个节点的距离 首先这个一看就 ...
- Git 常用命令和统计代码量
摘要 分享Git日常操作中常用的命令,分享如何统计在项目中贡献的代码量. 下面列出Git bash常用命令. 1. git clone **(项目地址) 克隆一个git项目到本地,将git项目拉取到本 ...