—————— 昨日回顾 ——————
红日安全出品|转载请注明来源
文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!(来源:红日安全)
—————— —————— —————
WEB安全注入类漏洞
SQL
SQL全称为结构化查询语言,用于操作数据库,由数据库进行解析和执行,主要分为DDL(数据定义语言),DML(数据操作语言)和DCL(数据控制语言)
1) DDL:create,alter,drop,truncate
2) DML:select,insert,update,delete
3) DCL: grant,revoke
SQL注入
1) 介绍
SQl注入攻击通过攻击者提交包含恶意代码的数据到应用程序,应用程序将提交恶意数据当作SQL交给数据库服务进行执行,从而导致攻击者控制数据库服务执行
2) 利用方式
a) 从数据库中读取或修改敏感数据
b) 对数据库执行管理操作,例如关闭审计和数据库,截断表或日志,添加用户
c) 从数据库文件系统中获取的存在的文件内容
d) 执行操作系统命令
3) 危害
a) 身份欺骗
b) 篡改现有数据
c) 抵赖,例如取消交易或修改交易金额
d) 获取服务器上所有的数据信息
e) 销毁数据或者导致数据不可用
4) 严重性
取决于攻击者的技能和想象力,应用程序对输入的检查,数据库的执行权限 以及使用的数据库技术
5) 原理
a) 用户登录流程SQL:
$sql = ‘SELECT * FROM user WHERE name=”‘ + $_POST[‘name’] + ‘” AND password=”‘ + $_POST[‘password’] + ‘”‘;
b) 用户获取/查询流程SQL:
$sql = ‘SELECT * FROM user WHERE id=’ + $_POST[‘id’];
$sql = ‘SELECT * FROM user WHERE desc=”‘ + $_POST[‘desc’] + ‘”‘;
攻击者可通过控制提交的数据name, password, id控制SQL的执行流程,例如一下payload:
a) 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)
b) id: 1 or 1=1
$sql = ‘SELECT * FROM user WHERE id=1 or 1=1’;
执行语义: 查询所有用户信息(逻辑or 1=1为逻辑or True)
c) desc: ” or “1”=”1
$sql = ‘SELECT * FROM user WHERE desc=”” or “1”=”1″‘;
执行语义: 查询所有用户信息(逻辑or “1”=”1″为逻辑or True)
d) 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
6) 分类
a) 整数型注入
拼接在SQL中的数据为整数类型,并可用于SQL注入
b) 字符串型注入
拼接在SQL中的数据为字符串类型,并可用于SQL注入
c) 特殊字符注入
拼接在SQL中的数据允许通过注释符(/**/, — , #),SQL分隔符(;),运算符(+, ||),数据库函数(char),并可用于SQL注入
d) 盲注
某些情况下不能直接错误回显和输出结果来判断是否存在注入,需要通过执行的结果的真假以及回显逻辑,或通过提交休眠SQL以及响应时间差异来判断是否存在注入
l 基于内容的盲注:
针对数据存在的请求,整数(字符串)类型分别拼接AND 1=1和AND 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’)的逻辑返回结果来判断数据库主版本是否正确,类似可通过暴力破解来获取数据内容
l 基于时间的盲注:
通过拼接sleep(n); –等休眠语句,通过响应时间是否存在差异来判断是否存在SQL注入
l order by
针对SQL查询语句中若使用order by可使用case when then end语句进行盲注
7) 防御
a) 使用静态SQL语句
b) 使用参数化查询SQL(预处理方式)
c) 使用安全的存储过程(在存储过程中禁止拼写SQL字符串进行执行)
d) 数据参数检查
l 数据是否为空
l 数据格式(类型格式和正则格式)
l 数据范围(大小,长度,可选值)
XML
Xml全称为可扩展标记语言,是一种有格式的文本数据
XML主要结构:
1) XML声明
2) XML文档定义类型
a) XML约束
b) XML实体
在XML解析器解析XML过程中会将实体应用替换为定义的实体字符串
分类:
l 内部实体
l 外部实体
l 参数化实体
3) XML文档
XXE
1) 介绍
XXE全称XML外部实体注入,当XML解析器在解析引用外部实体时,可能导致数据泄露、拒绝服务、SSRF、端口扫描、远程代码执行等影响
2) 攻击方式
a) 获取服务器目录或文件
b) 拒绝服务攻击
c) 盲注
在数据无回显时可以使用盲注方式将数据发送到远程攻击服务器
3) 防御
a) 设置XML解析器禁用DTD
b) 设置XML解析器禁用外部实体
c) 不依赖与框架,对http头中content-type及accept进行验证
d) 过滤提交数据中的<!DOCTPE和<!ENTITY
题解
1) SQL Injection 07
2) SQL Injection 08
3) SQL Injection(advanced) 03
4) SQL Injection(advanced) 05
5) SQL Injection(mitigation) 08
6) XXE 03
7) XXE 04
8) XXE 07
海量安全课程 点击以下链接 即可观看
http://qiyuanxuetang.net/courses/
来源:freebuf.com 2020-03-24 09:47:15 by: Setup
请登录后发表评论
注册