ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql注入系列之Sqli-labs(less-2)

2021-11-30 17:58:52  阅读:177  来源: 互联网

标签:语句 less union 数据库 查询 labs Sqli order select


判断注入点

http://192.168.81.210/sqli/Less-2/?id=1’输入单引号发现出现了sql语句报错,可以知道单引号已经进入到数据库里执行了,语句类似于

select * from users where id =1' limit 0,1

因为正常的情况下,用户只能将搜索的参数传入到数据库里面进行查询,是不可能去修改查询语句的,上方的报错就是由于用户修改了查询的语句而引起的,将以上语句代入到自己的数据库里执行也是会报错的,因为多了一个单引号。

判断注入类型

输入1 and 1=1页面正常,输入1 and 1=2页面无回显,为什么呢?

  • and 逻辑与

当条件表达式两边都为真才是真,有一边为假则是假
从下方图中可以发现,当and有一边为假的时候,是没有返回内容的
回到题目,我们输入上方字符串的时候,传入到数据库执行的语句就变成了

select user from users where id=1 and 1=1 limit 0,1
 select user from users where id=1 and 1=2 limit 0,1

1等于1,逻辑与两边都成立,为真,所以页面返回内容;1不等于2,逻辑与两边有一边不成立,为假,所以页面不返回内容,由此可以判断属于数字型注入。

判断查询列数

ORDER BY 语句用于根据指定的列对结果集进行排序。

  • 当order by的数字大于当前的列数时候就会报错,sql注入利用这个特性来判断列数

输入1 order by 41 order by 3发现等于3的时候正常,等于4的时候报错,由此可以知道一共有三列。可以使用二分法进行判断,即第一次可以是order by 1,第二次可以是order by 10。如果都是正常的则在10的基础上x2;如果不正常则在10的基础上/2也就是order by 5,如果5正常6不正常,则列数为6列。

确定显示位

从上一步知道一共有三列,下面就需要知道哪些列是可以显示数据的,这里可以使用union操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名,并且UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

这里虽然查询的123都可以查询到,但是回到程序里查询1 union select 1,2,3可以发现并没有查询到123,这里的123实际上就是前面的order by 3
这是因为程序在展示数据的时候通常只会取结果集的第一行数据,所以,只要让第一行查询的结果是空集,即union左边的select子句查询结果为空,那么union右边的查询结果自然就成为了第一行,打印在网页上了,即-1 union select 1,2,3
可以发现查询的123只有23可以查询到,所以接下来只需要把我们想要查询的东西填充到23里即可。

获取数据

获取数据库名

查询当前数据库select database();
问题来了,在sql注入中如何查询当前的数据库名呢?只需把database()填充到2或3里-1 union select 1,2,database()就可以查询到数据库名了。

获取表名

从上一个步骤中得到了数据库名,接下来就获取数据库中的表名
可以发现查询到了emails数据表,但是一个数据库里肯定不止个数据表,可以发现security这个数据库里除了emails表之外,还有referers,uagents,users表,如何将这几行数据一起获取呢?
这里需要用到group_concat()函数,将多行合并成一行
获取全部数据表-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'这里的security数据库名、表名等的字符串表示,需要用单引号、双引号包裹住,或者可以使用对应的的十六进制的形式。

获取列名

获取某个表的所有列名-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'

获取最终数据

-1 union select 1,2,group_concat(username,password) from users

标签:语句,less,union,数据库,查询,labs,Sqli,order,select
来源: https://blog.csdn.net/BetsyMyGirl/article/details/121638689

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有