一、SQL是什么?
SQL(结构化查询语言)是操作数据库的核心工具,用于查询、更新、管理数据。几乎所有网站和应用都需要通过SQL与数据库交互,例如用户登录、商品搜索、订单查询等场景。
二、SQL注入的定义
SQL注入是一种黑客攻击技术,通过篡改用户输入的数据,将恶意代码"注入"到SQL语句中,欺骗数据库执行非授权的操作。其本质是将用户输入的数据当作代码执行,而非视为普通数据。
类比理解:
假设图书馆查询系统允许你输入书名,正常输入"百年孤独"会返回对应书籍。但如果输入' OR 1=1 --,系统误认为"所有书都符合条件",导致返回全部藏书信息。这就是SQL注入的典型逻辑。
三、SQL注入的核心原理
四、SQL注入的危害
SQL注入是危害WEB安全的主要攻击手段,存在SQL注入的网站一但被攻击成功,产生的后果将有可能毁灭性及不可恢复的。比如:
1.获取敏感数据:获取网站管理员帐号、密码等。
2.绕过登录验证:使用万能密码登录网站后台等。
3.文件系统操作:列目录,读取、写入文件等。
4.注册表操作:读取、写入、删除注册表等。
5.执行系统命令:远程执行命令。
五、SQL注入攻击的分类
1.根据注入位置分类
a. GET注入:通过URL参数进行注入
b. POST注入:通过表单提交数据进行注入
c. Head头注入:通过HTTP请求头(如User-Agent、Cookie等)进行注入
2.根据结果反馈分类
a. 有回显注入(显错注入):页面直接返回数据库错误信息或查询结果
1.打开phpstudy,输入127.0.0.1/dvwa,登录进入dvwa。如下图所示,把Security Level调为low,并点击Submit。
2.左侧列表切换至SQL注入,在User ID内输入“1”,点击Submit,可得到以下结果。
3.再输入“ 1' ”,点击Submit。
结果如下图所示,出现报错信息,即为有回显注入。
b. 无回显注入(盲注):需要通过逻辑判断或时间延迟等方式确认注入是否成功
1.如下图左侧列表切换至盲注(Blind),输入“ 1' ”,点击Submit,结果为下图红字,未出现报错信息,即为无回显注入。
3.根据数据类型分类
a. 字符型注入:当输入参数为字符串时,称为字符型。数字型与字符型注入最大的区别在于:数字型不需要单引号闭合,而字符串类型一般要使用单引号来闭合。
b. 数字型注入:当输入的参数为整型时,如ID、年龄、页码等,如果存在注入漏洞,则可以认为是数字型注入。
还有一些根据数据库不同进行分类等。
六、注入方法
根据返回的结果来判断提交的测试语句是否成功被数据库引擎执行,如果测试语句被执行了,说明存在注入漏洞。