【从入门到放弃系列学习笔记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.知道
- 1.secure-file-priv

浙公网安备 33010602011771号