思路:

1、访问连接,输入“admin”、“admin”显示如图

1658587148_62dc080c8750a88523fc2.png!small

2、在admin后面加入单引号发现报错,可能存在SQL注入

1658587172_62dc0824e4170fddde454.png!small

3、重新输入“admin’ or ‘1’=’2—”、“111”,发现返回正常结果

1658587202_62dc0842c66cdfa2554bf.png!small

4、利用Burpsuit拦截POST包

1658587264_62dc08808c5513698bc3d.png!small

5、保存POST包到txt文本中,放入sqlmap目录下

1658587282_62dc08926253e1b3ca1f7.png!small

6、利用sqlmap

➜  ~ sqlmap -r 2.txt

注入利用成功

1658587333_62dc08c50ddc19986df9e.png!small

获取数据库敏感信息:

➜  ~ sqlmap -r 2.txt -dbs

1658587353_62dc08d96eaa67e6f001c.png!small

修复建议:

修改相关问题页面,对用户输入进行检验,过滤或转换可疑字符串,可以通过正则表达式,对单引号和双“-”进行转换,SQL查询语句不要使用动态拼装;使用存储过程进行参数化查询,在执行SQL查询命令前处理,可以有效的防止SQL注入,尤其注意对“select”、“from”、“+”等敏感字符的过滤或者转换。

建议修改Web应用服务的软件部分,增加对客户端提交数据的合法性验证,至少严格过滤SQL语句中的关键字,并且所有验证都应该在服务器端实现,以防客户端(IE页面代码部分)控制被绕过。

验证部分为get方法中URL后面跟的参数,及post方法中Post的数据参数,需过滤的关键字为:

[1] ‘ 单引号

[2] ” 双引号

[3] \’ 反斜行单引号

[4] \” 反斜杠双引号

[5] ) 括号

[6] ; 分号

[7]—双减号

[8]+  加号

[9]SQL关键字,如select,delete,drop等等,注意对于关键字要对大小写都识别,如:select ;SELECT;seLEcT等都应识别。

建议降低Web应用访问使用较低权限的用户访问数据库。不要使用数据库管理员等高权限的用户访问数据库。