美文网首页
04.WebGoat之注入类漏洞

04.WebGoat之注入类漏洞

作者: imsilence | 来源:发表于2019-03-13 09:45 被阅读0次

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:

  • name: " or 1=1 #

    $sql = 'SELECT * FROM user WHERE name="" or 1=1 #" AND password=""';

    解释: #为MySQL注释符,最终执行SQL为:

    $sql = 'SELECT * FROM user WHERE name="" or 1=1';

    执行语义: 查询所有用户信息(逻辑or 1=1为逻辑or True)

  • id: 1 or 1=1

    $sql = 'SELECT * FROM user WHERE id=1 or 1=1';

    执行语义: 查询所有用户信息(逻辑or 1=1为逻辑or True)

  • desc: " or "1"="1

    $sql = 'SELECT * FROM user WHERE desc="" or "1"="1"';

    执行语义: 查询所有用户信息(逻辑or "1"="1"为逻辑or True)

  • name, desc: ";drop table user; #;

    $sql = 'SELECT * FROM user WHERE name="";drop table user; #" AND password=""';

    $sql = 'SELECT * FROM user WHERE desc="";drop table user #"';

    解释: #为MySQL注释符,最终执行SQL为:

    $sql = 'SELECT * FROM user WHERE name="";drop table user;';

    $sql = 'SELECT * FROM user WHERE desc="";drop table user';

    执行语义: 查下用户信息后删除掉表user

分类

  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

相关文章

  • 04.WebGoat之注入类漏洞

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

  • Web安全之SQL注入漏洞[1]

    Web安全之SQL注入漏洞 本节知识点 SQL注入原理 前言 结构化查询语句(Structured Query L...

  • PHP宽字节注入

    在PHPMySql语句中存在着宽字节注入漏洞,MySQL宽字节注入漏洞是SQL注入漏洞攻防技术相互促进的一个典型例...

  • 二次注入

    二次注入漏洞是一种在Web应用程序中广泛存在的安全漏洞形式。相对于一次注入漏洞而言,二次注入漏洞更难以被发现,但是...

  • Web 开发常见安全问题

    前端安全XSS 漏洞CSRF 漏洞 后端安全SQL 注入漏洞权限控制漏洞SESSION 与 COOKIEIP 地址...

  • ecology/泛微

    近来,公司上线新oa,找了一堆漏洞,记之。 注入 问题出再 ***/services/MobileService?...

  • Python中该怎么防止SQL注入

    SQL注入 SQL攻击(SQL injection),简称注入攻击,是发生于应用程序之数据库层的安全漏洞。简而言之...

  • 漏洞挖掘之Spring Cloud注入漏洞

    漏洞描述 Spring框架为现代基于java的企业应用程序(在任何类型的部署平台上)提供了一个全面的编程和配置模型...

  • sqlmap从入门到精通-第六章-6-8 利用sqlmap渗透某

    6.8 利用sqlmap渗透某站点 6.8.1 发现并测试SQL注入漏洞 1. SQL注入漏洞发现思路 (1) 通...

  • web常见漏洞的成因和修复

    1.SQL注入 漏洞描述:SQL 注入攻击( SQL Injection ),简称注入攻击、SQL 注入,主要用于...

网友评论

      本文标题:04.WebGoat之注入类漏洞

      本文链接:https://www.haomeiwen.com/subject/rcznpqtx.html