SQL注入攻击与防御学习笔记(一) ----什么是SQL注入

Web应用工作原理

MCV架构

表示层(浏览器)、逻辑层(编程语言)、存储层(数据库)
SQL注入攻击与防御学习笔记(一) ----什么是SQL注入

理解SQL注入

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

SQL注入的主要方式是将恶意代码插入参数中,这些参数会被置入SQL命令中加以执行;
间接的攻击方式是将恶意代码插入到字符串中,之后再将这些字符串保存到数据库中的数据表或将其当作元数据,当将存储的字符串置入动态SQL命令中时,恶意代码就将被执行。

举例:

目标:http://www.victim.com/products.php?val=100
payload: http://www.victim.com/products.php?val=100 'OR'1'='1
目的:查看数据库中的所有商品

理解SQL注入的产生过程

构造动态字符串

  1. 转义字符串处理不当:SQL数据库将单引号字符(')解析成代码与数据间的分界线,单引号外面的内容都是需要运行的代码,单引号内的内容都是数据。

    转义字符

    单引号
    空格
    双竖线
    逗号
    点号

    在URL或者Web页面的字段输入一个单引号,即可辨别网站是否可进行SQL注入攻击

  2. 类型处理不当:处理数字数据时,不需要使用单引号将数字数据引起来。

    举例:

    SELECT * FROM TABLE
    WHERE
    USERID = 1 UNION ALL SELECT LOAD_FILE('etc/passwd') --
  3. 查询语句组装不当:在程序开发阶段,不知道要查询的表或字段,故表与字段为用户可控的。
    http://www.victim.com/user_details.php?table=users&column1=user&column2=password&column3=Super_priv

    其中table,column1,column2,column3均为可控的。

  4. 错误处理不当:将详细的内部错误消息显示给攻击者,为攻击者提供与网站潜在缺陷相关的重要线索。
  5. 多个提交处理不当:存在多个表单提交时,只对第一个表单做了验证。

    不安全的数据库配置

    系统管理员账户:
    SQL Server --> sa
    MySQL --> root / anonymous
    Oracle --> SYS / SYSTEM / DBSNMP / OUTLN

猜你喜欢

转载自blog.51cto.com/13737045/2114172