04.WebGoat之注入类漏洞

2019-03-13  本文已影响0人  imsilence

SQL

SQL全称为结构化查询语言,用于操作数据库,由数据库进行解析和执行,主要分为DDL(数据定义语言),DML(数据操作语言)和DCL(数据控制语言)

  1. DDL:create,alter,drop,truncate

  2. DML:select,insert,update,delete

  3. DCL: grant,revoke

SQL注入

介绍

SQl注入攻击通过攻击者提交包含恶意代码的数据到应用程序,应用程序将提交恶意数据当作SQL交给数据库服务进行执行,从而导致攻击者控制数据库服务执行

利用方式

  1. 从数据库中读取或修改敏感数据

  2. 对数据库执行管理操作,例如关闭审计和数据库,截断表或日志,添加用户

  3. 从数据库文件系统中获取的存在的文件内容

  4. 执行操作系统命令

危害

  1. 身份欺骗

  2. 篡改现有数据

  3. 抵赖,例如取消交易或修改交易金额

  4. 获取服务器上所有的数据信息

  5. 销毁数据或者导致数据不可用

严重性

取决于攻击者的技能和想象力,应用程序对输入的检查,数据库的执行权限
以及使用的数据库技术

原理

  1. 用户登录流程SQL:
$sql = 'SELECT * FROM user WHERE name="' + $_POST['name'] + '" AND
password="' + $_POST['password'] + '"';
  1. 用户获取/查询流程SQL:
$sql = 'SELECT * FROM user WHERE id=' + $_POST['id'];
$sql = 'SELECT * FROM user WHERE desc="' + $_POST['desc'] + '"';

攻击者可通过控制提交的数据name, password, id控制SQL的执行流程,例如一下payload:

分类

  1. 整数型注入

    拼接在SQL中的数据为整数类型,并可用于SQL注入

  2. 字符串型注入

    拼接在SQL中的数据为字符串类型,并可用于SQL注入

  3. 特殊字符注入

    拼接在SQL中的数据允许通过注释符(/**/, -- , #),SQL分隔符(;),运算符(+,||),数据库函数(char),并可用于SQL注入

  4. 盲注

    某些情况下不能直接错误回显和输出结果来判断是否存在注入,需要通过执行的结果的真假以及回显逻辑,或通过提交休眠SQL以及响应时间差异来判断是否存在注入

    • 基于内容的盲注:

    针对数据存在的请求,整数(字符串)类型分别拼接AND 1=1AND 1=2' AND '1'='1' AND '1' = '2)的请求结果来观察是否存在SQL注入,若AND 1=1' AND '1'='1)与未拼接时一致,但AND 1=2' AND '1'='2)无结果,可判断存在SQL注入

    针对数据不存在的请求,可通过拼接逻辑OR并观察请求结果来判断是否存在SQL注入OR 1=2' OR '1'='2)与未拼接时一致,但OR 1=1' OR '1'='1)有结果)

    利用方式:通过拼接AND substring(@@version,1,1) = '8'OR substring(@@version, 1, 1)='8')的逻辑返回结果来判断数据库主版本是否正确,类似可通过暴力破解来获取数据内容

    • 基于时间的盲注:

    通过拼接sleep(n); --等休眠语句,通过响应时间是否存在差异来判断是否存在SQL注入

  5. order by

    针对SQL查询语句中若使用order by可使用case when then end语句进行盲注

防御

  1. 使用静态SQL语句

  2. 使用参数化查询SQL(预处理方式)

  3. 使用安全的存储过程(在存储过程中禁止拼写SQL字符串进行执行)

  4. 数据参数检查

    • 数据是否为空

    • 数据格式(类型格式和正则格式)

    • 数据范围(大小,长度,可选值)

XML

Xml全称为可扩展标记语言,是一种有格式的文本数据

04.01.png

XML主要结构:

  1. XML声明

  2. XML文档定义类型

    a. XML约束

    b. XML实体

    在XML解析器解析XML过程中会将实体应用替换为定义的实体字符串

    分类:

    • 内部实体

    • 外部实体

    • 参数化实体

    c. XML文档

XXE

介绍

XXE全称XML外部实体注入,当XML解析器在解析引用外部实体时,可能导致数据泄露、拒绝服务、SSRF、端口扫描、远程代码执行等影响

攻击方式

  1. 获取服务器目录或文件

    04.02.png 04.03.png
  2. 拒绝服务攻击

    04.04.png
  3. 盲注

    在数据无回显时可以使用盲注方式将数据发送到远程攻击服务器

    04.05.png 04.06.png

防御

  1. 设置XML解析器禁用DTD

  2. 设置XML解析器禁用外部实体

  3. 不依赖与框架,对http头中content-type及accept进行验证

  4. 过滤提交数据中的<!DOCTPE<!ENTITY

解题

  1. SQL Injection 07

    04.07.png
  2. SQL Injection 08

    04.08.png
  3. SQL Injection(advanced) 03

    04.09.png 04.10.png
  4. SQL Injection(advanced) 05

    04.11.png 04.12.png 04.13.png 04.14.png 04.15.png 04.16.png 04.17.png 04.18.png 04.19.png 04.20.png 04.21.png 04.22.png 04.23.png 04.24.png 04.25.png 04.26.png 04.27.png 04.28.png
  5. SQL Injection(mitigation) 08

    04.29.png 04.30.png 04.31.png 04.32.png 04.33.png 04.34.png 04.35.png 04.36.png 04.37.png 04.38.png 04.39.png 04.40.png 04.41.png 04.42.png
  6. XXE 03

    04.43.png 04.44.png 04.45.png 04.46.png 04.47.png
  7. XXE 04

    04.48.png 04.49.png 04.50.png 04.51.png 04.52.png
  8. XXE 07

    04.53.png 04.54.png 04.55.png 04.56.png 04.57.png 04.58.png

    参数化实体执行顺序: %remote, %secret, %all, &ping

欢迎添加公众号【扯淡er】学习交流

扯淡er
上一篇下一篇

猜你喜欢

热点阅读