【从入门到放弃系列学习笔记8】web应用安全基础整理-SQL注入漏洞利用

一、SQL简介

  结构化查询语言(structured Query language),是一种特殊的编程语言,用于数据库中的标准数据查询。

  是关系型数据库的查询语言,例如mysql,oracle,sqlserver都要使用SQL。

       问:什么是关系型数据库?

二、漏洞原理

  针对SQL注入的攻击行为可描述为通过用户可控参数中注入SQL语法,破坏原有SQL结构,达到编写程序时意料之外结果的攻击行为。

  其原因可归结为以下两个原因叠加造成的:

  1. 程序编写在处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句。

  2. 未对用户可控参数进行足够的过滤便将参数内容拼接进SQL语句中。

 

三、注入点可能存在的位置

  根据sql注入原理,在用户“可控参数”中注入SQL语法,也就是说Web应用在获取用户数据的地方,只要带入数据库查询,都有存在SQL注入的可能。

  通常有:

    • GET数据
    • POST数据
    • HTTP头部
    • Cookie数据

  常见GPC,只要和数据库有交互的地方

四、漏洞注入的危害

  有多种信息会被获取,如管理员后台密码,从而脱取数据库中内容(脱库)。

  如果数据库本身存在缺陷,获取数据库权限有问题,那么攻击者可以通过SQL注入漏洞直接获取webshell或服务器系统权限。

 

五、SQL注入的分类

  SQL注入漏洞根据不同的标准,有不同的分类。但从数据类型来分,可以分为数字型或字符型。

  • 数字型注入:注入点的数据,拼接语句中是以数字型出现的,即数据两边没有被单引号、双引号包括。
  • 字符型注入:根据注入手法,分为以下几类
    • 可联合查询注入(联合查询)
    • 报错型注入(报错注入)
    • 布尔型盲注入(布尔盲注)
    • 基于时间延迟注入(延时注入)
    • 可多语句查询注入

  

六、SQL注入点的判断

  • 先利用暴力工具扫描网页,搜到有哪些比较明显是网站后台的页面(工具很多)
  • 还有些GET的参数进行sql注入测试
    • 比如 网址?id=35  +1/-1页面发生变化了
    •         网址?id=35'  会产生报错,可以判断是字符型还是数字型,可尝试的闭合符号有' " )及其各种组合方式
    •    网址?id=35 and 1=1   是否有布尔类型的状态
    •         网址?id=35 and 1=2  
    •    网址?id=35 and sleep(5) 是否有延时
  • 除了GET、POST还有很多其他的情况下可能存在注入,比如HTTP的Header里XFF,HOST,Cookie,都可以尝试

七、如何利用SQL注入获取数据库资料

  • 当已知一个网址存在注入点后,可进行联合查询注入尝试爆库
    • ?id=35 order by  4....
    • ?id=35 union select 1,2,3,4.....   
    • ?id=35 union select null,null......
    • ?id=-35 union select xxxx   
    • ?id=-35 union select xxxx from 表名 可以暴力查表名,实现跨库
  • 如果不支持联合查询可进行报错注入(如果页面有报错回显的话),Mysql常见以下三种函数
    • floor()
    • updatexml()
    • extractvalue()
  • 如果上述两种方式均不支持,则可用大招延时注入

 八、如何利用SQL注入进行文件读写

  • 读写文件有一定的前提条件
    • 1.secure-file-priv
      • 该参数在高版本的mysql数据库中限制了文件的导入导出操作。该参数可以写在my.ini配置文件中[mysqld]下。
      • secure-file-priv参数配置                含义
      • secure-file-priv=                            不对mysqld的导入导出操作做限制
      • secure-file-priv=‘c:/a/’                    限制mysqld的导入导出操作发生在c:/a/下(子目录有效)
      • secure-file-priv=null                       限制mysqld不允许导入导出操作
    • 2.当前用户具有文件权限
      • select File_priv from mysql.user where user="root" and host="localhost"
    • 3.知道

 

posted @ 2020-11-24 17:58  大狼崽子Lanking  阅读(67)  评论(0)    收藏  举报