wsxk / wsxk.github.io

MIT License
5 stars 0 forks source link

web security2: 注入攻击 #175

Open wsxk opened 5 months ago

wsxk commented 5 months ago

https://wsxk.github.io/web_learn2/

前言

  1. 注入攻击

    7.1 SQL注入

      7.1.1 盲注(Blind Injection)
      7.1.2 Timing Attack

    7.2 数据库攻击技巧

前言 书接上回https://wsxk.github.io/web_learn/ 前面主要讲的是浏览器的安全问题,这回主要讲服务端应用安全

  1. 注入攻击 注入攻击是Web安全领域中一种最为常见的攻击方式 注入攻击的本质,是把用户输入的数据当做代码执行。 这里有两个关键条件,第一个是用户能够控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。 7.1 SQL注入 SQL是经典的用户输入和代码拼接的例子。 在SQL注入的过程中,如果网站的Web服务器开启了错误回显,则会为攻击者提供极大的便利,比如攻击者在参数中输入一个单引号“’”,引起执行查询语句的语法错误,服务器直接返回了错误信息,就能推测是哪种数据库 SQL注入有许多高级技巧可以利用 7.1.1 盲注(Blind Injection) 但很多时候,Web服务器关闭了错误回显,这时就没有办法成功实施SQL注入攻击了吗?攻击者为了应对这种情况,研究出了“盲注”(Blind Injection)的技巧。 所谓盲注,就是在服务器没有错误回显时完成的注入攻击。服务器没有 错误回显,对于攻击者来说缺少了非常重要的“调试信息”,所以攻击者必 须找到一个方法来验证注入的SQL语句是否得到执行。 最常见的盲注验证方法是,构造简单的条件语句,根据返回页面是否发生变化,来判断SQL语句是否得到执行。 7.1.2 Timing Attack 在MySQL中,有一个BENCHMARK()函数,它是用于测试函数性能的。它有两个参数:

count是指定函数执行的次数,expr是指定函数执行的内容。 因此,利用BENCHMARK()函数,可以让同一个函数执行若干次,使得结果返回的时间比平时要长;通过时间长短的变化,可以判断出注入语句是否执行成功。

7.2 数据库攻击技巧 SQL注入是基于数据库的一种攻击。不同的数据库有着不同的功能、不同的语法和函数,因此针对不同的数据库,SQL注入的技巧也有所不同。

  1. 利用sql注入猜测数据库版本,确认表名、列名是否存在等等(可以用自动化工具 sqlmap.py来执行)

  2. 在注入攻击的过程中,常常会用到一些读写文件的技巧。比如在MySQL 中,就可以通过LOAD_FILE()读取系统文件,并通过INTODUMPFILE写入 本地文件。当然这要求当前数据库用户有读写系统相应文件或目录的权限。

  3. 以利用“用户自定义函数”的技巧,即UDF(User-Defined Functions)来执行命令。