任务目标:
设无法接触到后端数据库,如何通过前端验证的方法判断注入点是数字型注入还是字符型注入?
练习测试环境
系统:centOS 7
搭建工具:docker
靶场名称:DVWA
概念理解:
首先先理解SQL注入中这两种注入类型区别
数字型注入
- 定义:参数在 SQL 语句中直接作为数字使用,无需引号包裹。
示例:-- 原始SQL(数字型) SELECT * FROM users WHERE id = 123;
- 注入点:
id
参数直接替换数字值,如id=123
→id=123 OR 1=1
。
- 注入点:
字符型注入
定义:参数在 SQL 语句中作为字符串使用,需用引号包裹。
示例:
-- 原始SQL(字符型)
SELECT * FROM users WHERE username = 'admin';
开始测试
1.对于dvwa靶场注入点也是满足以上判断方法(数字型/字符型)
功能是输入id号查询姓名,由此直接判断此为数字型
2.进一步测试判断
输入1 and 1=1回显正常
输入1 and 1=2回显居然还正常???
说明dvwa对此进行了处理,继续测试
3.加上 ' 测试
报错了,提示sql语法错误,由此猜测DVWA,在输入内容两边加上了单引号
猜测原语句:SELECT First_name,Surname from XXX where id='1'
现在:SELECT First_name,Surname from XXX where id='1'’
后一个 ‘ 被闭合,语法错误
4.输入1' and 1=1# 尝试用 # 注释掉多余的 ' 发现回显正常
输入1' and 1=2#
回显为空,异常,说明就是如猜测的一般,在输入参数两边加上了 ' '
结论:
1.此注入点为数字型(因为接收参数为数字)
2.常规数字型测试不行,是因为dvwa靶场做了特殊处理,在接收参数两边加上了 ' '