freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Web安全 | Java-SQL注入实战
2020-03-24 09:47:15
所属地 河北省

v2-29a2c0fc3c187e2191f0747884d3cc1f_1440

——————   昨日回顾  ——————  

红日安全出品|转载请注明来源

文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!(来源:红日安全)

Web安全 |Java靶场基础搭建实战(一)

0 (1).jpeg

—————— —————— —————

d3hfZm10PXBuZw==WEB安全注入类漏洞

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9wd3hfZm10PXBuZw==

SQL

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

1) DDL:create,alter,drop,truncate

2) DML:select,insert,update,delete

3) DCL: grant,revoke

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9wd3hfZm10PXBuZw==

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 数据范围(大小,长度,可选值)

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9wd3hfZm10PXBuZw==

XML

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

XML主要结构:

1) XML声明

2) XML文档定义类型

a) XML约束

b) XML实体

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

分类:

l 内部实体

l 外部实体

l 参数化实体

3) XML文档

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9wd3hfZm10PXBuZw==

XXE

1) 介绍

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

2) 攻击方式

a) 获取服务器目录或文件image.pngimage.png

b) 拒绝服务攻击image.png

c) 盲注

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

3) 防御

a) 设置XML解析器禁用DTD

b) 设置XML解析器禁用外部实体

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

d) 过滤提交数据中的<!DOCTPE和<!ENTITY

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9wd3hfZm10PXBuZw==

题解

1) SQL Injection 07image.png

2) SQL Injection 08

image.png

3) SQL Injection(advanced) 03image.pngimage.png

4) SQL Injection(advanced) 05image.png

image.png

image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

5) SQL Injection(mitigation) 08

image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

6) XXE 03

image.pngimage.pngimage.pngimage.pngimage.png

7) XXE 04

image.pngimage.pngimage.pngimage.pngimage.png

8) XXE 07

image.pngimage.pngimage.pngimage.pngimage.pngimage.png

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w



banner.jpg

海量安全课程   点击以下链接   即可观看 

http://qiyuanxuetang.net/courses/

# SQL注入 # webgoat # Java靶场 # XXE实战 # 代码讲解
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者