由于对SQL注入不太熟悉,所以就自己搭建了一个sqli-labs的平台.
记录一下自己的学习过程
首先我们要了解一下常规mysql数据库的信息
information_schema() ------ 是mysql自带的数据库,记录了数据库各种信息
schemata ------ 包含各种数据库名信息
tables ------ 各种表名
columns ------ 字段名
下面开始注入
id=1时显示正常,加入单引号看看,报错了
报错的信息为 near ''1'' LIMIT 0,1' ,拆分开就是 ' '1' ' LIMIT 0,1 ' ,可以看到1的那里多了一个单引号而且已经闭合了.所以就要把后面的那个引号注释掉(ps:之前不理解的时候会想,可以直接不用加引号 然后构造payload,但是发现这样子构造语句不能查询到,是因为永远都在''里面了)
下面开始猜字段长度
猜到字段长度只有3
然后查看回显位置
发现并没有正确的显示回显位置,(当时候这里也不懂为什么,然后上网查看了一下,是源代码那里调用函数的问题)
百度了一下,mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有,大概意思就是说只显示一行的数据= =.因为他的查询语句是"SELECT * FROM users WHERE id='$id' LIMIT 0,1",所以把左边的弄为空集(即id那里不能大雨等于1,此外str,float等等都可以)
下面继续进行查询,构造payload为localhost/sqli-labs/Less-1/?id=-1' union select 1,2,3 from information_schema.schemata--+
可以看到回显位置了
下面进行常规的注入操作.先查看当前的数据库名和版本
可以看到当前的数据库名为security,版本是5.7
继续进行查询数据库名
查询到全部的数据库名,然后选security进行爆破
在security数据库中查询表名
看到存在users表,就直接破解
可以看到username和password,直接爆破
最后就把users中所有的用户名和密码查询出来了
总结:这次做了sqli-labs的lesson1,感觉思路清晰不少,一步步地进行注入,学会看报错信息和猜其本身的查询代码,不过还是要继续努力O(∩_∩)O~~