SQL注入攻击与防护

这篇具有很好参考价值的文章主要介绍了SQL注入攻击与防护。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、SQL注入攻击概述

1.1 SQL注入概念

1.1.1 标准查询过程

1.1.2 SQL注入定义

1.2 SQL注入根本原因

1.3 SQL注入条件

1.4 SQL注入防范

1.4.1 根本原因:过滤不严

1.4.2 安全设计原则:数据与代码分离

1.5 SQL注入流程

1.6 SQL注入分类

1.6.1 回显注入

1.6.2 盲注

二、回显注入攻击

2.1 寻找注入点

2.1.1 常用语句

2.1.2 页面反馈 

2.2 查字段数

2.2.1 常用的命令

2.2.2 代码语句

2.3 MySQL数据库

2.3.1 MySQL系统函数

三、SQL盲注攻击

3.1 SQL盲注特点

3.1.1 只有true和false

3.1.2 无数据库有效信息

3.2 SQL盲注分类

3.2.1 布尔盲注

3.2.2 时间盲注

3.2.3 报错盲注

3.3 盲注总体思路

四、SQL注入攻击防护

4.1 SQL注入防护思想

4.1.1 SQL注入关键条件

4.1.2 SQL注入本质

4.1.3 安全设计原则

4.2 SQL注入防护方法

4.2.1 参数过滤

4.2.2 预编译处理

五、SQLMap使用

5.1 SQL注入工具

5.1.1 SQLMap

5.1.2 阿D

5.1.3 名小子

5.2 SQLMap的使用

5.2.1 SQLMap介绍

5.2.2 具体使用步骤(GET型)


一、SQL注入攻击概述

1.1 SQL注入概念

1.1.1 标准查询过程

SQL注入攻击与防护

1.1.2 SQL注入定义

攻击者把SQL命令插入到Web表单的输入域页面请求的查询字符串,并且插入的恶意SQL命令会导致原有SQL语句作用发生改变,从而得到欺骗服务器执行恶意SQL命令的一种攻击方式。

1.2 SQL注入根本原因

没有对用户输入数据的合法性进行判断

1.3 SQL注入条件

  • 用户能够控制输入的参数,前端传给后端的参数内容是用户可以控制的。
  • 用户输入的参数被拼接到SQL语句,且带入数据库查询,成为了要执行的代码

1.4 SQL注入防范

1.4.1 根本原因:过滤不严

1.4.2 安全设计原则:数据与代码分离

1.5 SQL注入流程

  • 判断Web系统使用的脚本语言,发现注入点,并确定是否存在SQL注入漏洞
  • 判断Web系统的数据库类型
  • 判断数据库中判断表及相应字段的结构
  • 构造注入语句,得到表中数据内容
  • 查找网站后台,并用SQL注入得到的管理员账号和口令登陆
  • 结合其他漏洞,上传Webshell并持续连接
  • 进一步提权得到服务器的系统权限
  • 查找注入点
  • 查库名
  • 查表名
  • 查字段名
  • 查重点数据

1.6 SQL注入分类

1.6.1 回显注入

即用户发起查询请求,服务器将查询结果返回到页面中进行显示

1.6.2 盲注

盲注的特点是用户发起请求,这个请求不一定是查询,服务器响应请求进行数据库查询,将结果返回但不显示具体的查询结果。典型的场景如用户注册,我们只会得到是否注册成功提示,并不会显示出数据库内容。

二、回显注入攻击

2.1 寻找注入点

2.1.1 常用语句

' //单引号测试
1' and '1'='1 //恒真测试
1' and '1'='2 //恒假测试

2.1.2 页面反馈 

  • 页面无变化。以上三种情况页面都没有任何不同,那么说明后台针对此查询点的过滤比较严格,是否存在SQL注入漏洞还需要进行后续测试。
  • 页面中少了部分内容。如果前两种情况正常,而第三种情况明显页面有缺失,则基本可以确定存在SQL注入漏洞,用下一步继续进行判断。
  • 错误回显。如果访问第三个连接后出现数据库报错信息,明显可以判断存在注入,用回显注入法进行注入。
  • 跳转默认界面。第一种情况正常,而第二、三个直接跳转到首页后者默认页面,那么可能后台有验证逻辑。
  • 直接关闭连接。如果上述的第二、三种情况出现访问失败,那么就可能时开启了防护类工具在线阻断了。

2.2 查字段数

2.2.1 常用的命令

  • order by(确认表的列数)
  • union(判断回显的具体字段位,一般构造前面的语句为假)

2.2.2 代码语句

1' order by 1 #
1' order by 5 #

注释:#、(%23)、--+

2.3 MySQL数据库

SQL注入攻击与防护

2.3.1 MySQL系统函数

version() //返回当前数据库的版本信息
user() //返回当前用户
database() //返回当前数据库名
Group_concat() //将查询结果连接成字符串

2.3.2 SQL注入危害

  • 绕过检测非法登陆
  • 非法查询关键信息

三、SQL盲注攻击

3.1 SQL盲注特点

3.1.1 只有true和false

3.1.2 无数据库有效信息

回显注入语句中加入判断方式,使得返回结果为true或false。

3.2 SQL盲注分类

3.2.1 布尔盲注

布尔盲注是构造SQL判断语句

1' and length(database())>=5 #
1' and substr(database(),1,1)=d #
" and ord(substr(database(),3,1))=119 #

3.2.2 时间盲注

  • 时间盲注是利用时间函数,观察不同条件的等待时长。利用Sleep()或 benchmark() 等函数让MySQL的批行时间变长。
  • 时间盲育注入多与 if( expr1,expr2,expr3) 函数结合使用,其中若 expr1 为True,则返回值为 expr2 的值,否则是 expr3 的值。
If(length(database())>3, sleep(5),1)
lf(substr(database() ,1,1)='d', sleep(5),1)

3.2.3 报错盲注

构造特殊参数形式,利用某些函数的报错信息进行注入。如 updatexml(XML_document,XPath_string, new_value) 用 new_value 替换 XML_document 中符合 XPath_ string 的值。其中:

  • XML_document:String格式,为XML文档对象的名称
  • XPath_string:Xpath格式的字符串
  • new_value:String格式,替换查找到的符合条件的数据
updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) //0x7e是~的十六进制ASCLL值
→ ERROR 1105 (HY000): XPATH syntax error: '~dvwa~'

获取数据库 dvwa下的表名:

updatexml(1,concat(0x7e,(SELECT table_name from information_schema,tables where 
table_schema='dvwa' limit 0,1),0x7e),1) //报错注入只显示一条结果,故使用 limit 语句

3.3 盲注总体思路

将想要查询的数据作为目标,构造SQL条件判断语句,与要查询的数据进行比较,并让数据库告之当前语句批行是否正确。

四、SQL注入攻击防护

4.1 SQL注入防护思想

4.1.1 SQL注入关键条件

  • 用户可控输入
  • 参数带入数据库查询

4.1.2 SQL注入本质

把用户输入当作代码执行

4.1.3 安全设计原则

数据与代码分离

4.2 SQL注入防护方法

SQL注入攻击与防护

4.2.1 参数过滤

① 参数类型限制

  • 参数类型限制:类型判定函数,如数字型判定 is_numeric(),cytpe_digit() 等
  • 参数长度限定:如 strlen() 等

② 危险字符处理

  • 黑名单过滤:针对参数中敏感字符进行过滤,用到 preg_replace() 函数,如union,\,' ,select等
  • 白名单过滤:符合白名单的方能通过
  • 参数转义:使用函数 mysgli_real_escape_string 对特殊符号转义

4.2.2 预编译处理

预编译语句,绑定变量,进行参数化查询。数据库服务器在数据库完成SQL指令的编译,才套用参数运行,参数不会被数据库运行,且仅当它是一个参数而言。

五、SQLMap使用

5.1 SQL注入工具

5.1.1 SQLMap

5.1.2 阿D

5.1.3 名小子

5.2 SQLMap的使用

5.2.1 SQLMap介绍

① 概述

开源的自动化SQL注入工具,由Python写成

② 主要功能

扫描、发现、利用给定URL的SQL注入漏洞

③ 特点

  • 完全支持多种数据库管理系统:MySQL、 Oracle、PostgreSQL、 Microsoft SQL Server.Microsoft Access、IBM DB2、SQLite、 Firebird、Sybase.SAP MaxDB、HSQLDB和Informix等
  • 支持 5 种SQL注入技术联合查询注入:市尔盲注、时间盲注、报错盲注、堆查询注入
  • 支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列
  • 支持自动识别密码哈希格式并通过字典破解密码哈希

5.2.2 具体使用步骤(GET型)

① 判断是否存在注入

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1"

② 爆库

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1" --dbs

③ 爆表

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1" --tables -D security

④ 爆列

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1"--columns -T users -D security

⑤ 爆数据

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1” --dump -cpassword,username -T users -D security

POST型:sqlmap.py -r 3.txt --dbs

cookie型:sqlmap.py -u “127.0.0.1/sqli-1abs/Less-20/" --cookie "uname=admin" --level 2文章来源地址https://www.toymoban.com/news/detail-498405.html

到了这里,关于SQL注入攻击与防护的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL 注入漏洞攻击

    假设你用自己的用户名和密码登录了一个付费网站,网站服务器就会查询一下你是不是 VIP 用户,而用户数据都是放在数据库中的,服务器通常都会向数据库进行查询,要向数据库进行增删改查操作,就需要用到 SQL 语言。 但是,作为 SQL 的注入攻击者,我们并不知道网站的密

    2024年02月09日
    浏览(34)
  • SQL注入攻击方法

    SQL注入攻击是一种利用Web应用程序中存在的安全漏洞,通过在输入框中插入恶意的SQL代码,从而实现对数据库的非法操作。以下是一些常见的SQL注入攻击方法: 使用单引号(\\\')进行字符串拼接:在输入框中插入带有单引号的字符串,使得原始SQL语句结构发生变化,从而实现

    2024年02月03日
    浏览(34)
  • 【SQL注入攻击介绍】

    目录 前言 本质和危害  分类 注入一般步骤 注入实战   sql注入一直以来都稳居owasp-top10榜首,近年来更是爆出很多的数据库泄露攻击事件,如最近上海某公安存在数据库泄露事件。今天简单的分析以下sql注入的一些特性和方式:   owasp-top10   一、sql注入的危害包括但不局限

    2024年02月06日
    浏览(33)
  • SQL注入攻击原理 实战

    我来进行实战了,总在看教程。 提示:这里可以添加本文要记录的大概内容: 前言,前言,前言(挠头)啊,我终于打实战了 提示:以下是本篇文章正文内容,下面案例可供参考 看这样子,应该是不存在的 如果没有就继续吧, 哎,你看它变了, 又回来了,没有那就试试这个

    2024年02月12日
    浏览(34)
  • SQL注入攻击与防御

    一、SQL注入原理及危害         SQL注入漏洞是指攻击者通过浏览器或者其他客户端将恶意SQL语句插入到网站参数中,而网站应用程序未对其进行过滤,将恶意SQL语句带入数据库使恶意SQL语句得以执行,从而使攻击者通过数据库获取敏感信息或者执行其他恶意操作。     

    2023年04月15日
    浏览(63)
  • 网络安全---SQL注入攻击

            SQL 注入是一种代码注入技术,可利用 Web 应用程序和数据库服务器之间接口中的漏洞。当用户的输入在发送到后端数据库服务器之前未在 Web 应用程序中正确检查时,该漏洞就存在。         许多 Web 应用程序从用户处获取输入,然后使用这些输入构建 SQL 查询

    2024年04月12日
    浏览(34)
  • 一文搞懂SQL注入攻击

    随着互联网的发展和普及,网络安全问题越来越突出,网络在为用户提供越来越多服务的同时,也要面对各类越来越复杂的恶意攻击。SQL注入(SQL Injection)攻击是其中最普遍的安全隐患之一,它利用应用程序对用户输入数据的信任,将恶意SQL代码注入到应用程序中,从而执行

    2023年04月09日
    浏览(23)
  • SQL注入漏洞复现:探索不同类型的注入攻击方法

    这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。  准备环境 sqlilabs靶场 安装:Sqli-labs靶场搭建(适合新手小白围观)_sqlilabs靶场搭建-CSDN博客   注入讲解 介绍         基于错误的注入(Error-based Injection)是一种 利用应用程序返回的错误信息来

    2024年02月11日
    浏览(33)
  • SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

    数据来源         本文仅用于信息安全的学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。 介绍         联合查询注入是SQL注入的一种,通过在原有的SQL语句中添加UNION(联合)操作,将恶意构造的

    2024年02月06日
    浏览(40)
  • SQL注入攻击实战演示(附源码)

    SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一。大家也许都听过某某学长通过攻击学校数据库修改自己成绩的事情,这些学长们一般用的就是SQL注入方法。 文章目录: 何谓SQL注入? SQL数据库操作示例 SQL数据库注入示例 如何防止S

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包