【网络安全】SQL注入、XML注入、JSON注入和CRLF注入科普文
SQL注入
所谓SQL注入,是将恶意SQL命令通过某种方式提交到服务器后台,并欺骗服务器执行这些恶意的SQL命令的一种攻击方式。 —— [ 百度百科 ]
造成SQL注入漏洞原因有两个:一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。
一些寻找SQL漏洞的方法
http://host/test.php?id=100 and 1=1 //返回成功
http://host/test.php?id=100 and 1=2 //返回失败
http://host/test.php?name=rainman ‘ and ‘1’=‘1 //返回成功
http://host/test.php?name=rainman ‘ and ‘1’=‘2 //返回失败
http://host/test.php?name=rainman ‘ and ‘1’=‘2 )) //使用括号进行语句闭合
//在具有模糊搜索的地方
1)先搜索('),如果出错,说明90%存在这个漏洞。
2)然后搜索(%),如果正常返回,说明95%有洞了。
3)然后再搜索一个关键字,比如(2006)吧,正常返回所有2006相关的信息。
4)再搜索(2006%'and 1=1 and '%'=')和(2006%'and 1=2 and '%'=')。
//看看能否绕过验证
(1) 用户名输入: ‘or 1=1 or’ 密码:任意
(2) Admin’ -- (或’or 1=1 or’ --)(admin or 1=1 --) (MSSQL)(直接输入用户名,不进行密码验证)
(3) 用户名输入:admin 密码输入:’ or ‘1’=‘1 也可以
(4) 用户名输入:admin' or 'a'='a 密码输入:任意
(5) 用户名输入:’ or 1=1 --
(6) 用户名输入:admin’ or 1=1 -- 密码输入:任意
(7) 用户名输入:1'or'1'='1'or'1'='1 密码输入:任意
//不同的SQL服务器连结字符串的语法不同,比如MS SQL Server使用符号+来连结字符串,而Oracle使用符号||来连结
http://host/test.jsp?ProdName=Book’ //返回错误
http://host/test.jsp?ProdName=B’+’ook //返回正常
http://host/test.jsp?ProdName=B’||’ook //返回正常说明有SQL注入
如果应用程序已经过滤了’和+等特殊字符,我们仍然可以在输入时过把字符转换成URL编码(即字符ASCII码的16进制)来绕过检查。
防御SQL注入
- 对输入进行过滤;
- 使用预编译的SQL语句,比如Java中的PreparedStatement;
- 使用存储过程(不是所有场景都使用,这个方法不是很推荐);
- MyBatis的SQL注入防护—模糊查询
-- MySQL
select * from table where name like concat('%',#{name},'%')
-- Oracle
select * from table where name like '%' || #{name} || '%'
-- SQL Server
select * from table where name like '%'+#{name}+'%'
-- DB2
select * from table where name like concat('%',#{name},'%')
SQL注入相关的优秀博客
- https://blog.csdn.net/wutianxu123/article/details/82718718
- https://blog.csdn.net/wutianxu123/article/details/82719212
XML注入
什么是XML注入
XML的设计宗旨是传输数据,而非显示数据。XML注入是一种古老的技术,通过利用闭合标签改写XML文件实现的。
下面举个最简单的例子
<?xml version="1.0" encoding="utf-8"?>
<USER>
<user Account="admin">用户输入</user>
<user Account="root">root</user>
</USER>
若攻击者刚好能掌控用户输入字段,输入 adminhacker ,最终修改结果为:
<?xml version="1.0" encoding="utf-8" ?>
<USER>
<user Account="admin">admin</user>
<user Account="hacker">hacker</user>
<user Account="root">root</user>
</USER>
这样我们可以通过XML注入添加一个管理员账户。
预防XML注入
- 对有改变XML结构的特殊输入进行过滤或者编码;
- 对["&","<",">","'".'"',"/"]这些特殊字符过滤。
JSON注入
什么是JSON注入
我们知道JSON是根据引号(")、冒号(
【网络安全】SQL注入、XML注入、JSON注入和CRLF注入科普文的更多相关文章
- WEB安全第五篇--其他注入的奇技淫巧:XML注入、Xpath注入、Json注入、CRLF注入
零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...
- XML外部实体(XXE)注入详解
###XML与xxe注入基础知识 1.XMl定义 XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言:可扩展的样式语言(Ex ...
- Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->使用spring framework的IoC容器功能----->方法一:使用XML文件定义beans之间的依赖注入关系
XML-based configuration metadata(使用XML文件定义beans之间的依赖注入关系) 第一部分 编程思路概述 step1,在XML文件中定义各个bean之间的依赖关系. ...
- [.NET] 使用Json.NET提供依赖注入功能(Dependence Injection)
[.NET] 使用Json.NET提供依赖注入功能(Dependence Injection) 前言 在一些小型项目的开发情景里,系统不需要大型DI Framework所提供的:单一对象生成.生命周期 ...
- 《11招玩转网络安全》之第五招:DVWA命令注入
首先还是将DVWA的安全级别设置为Low,然后单击DVWA页面左侧的Command Injection按钮. 图5-1 Low级别的命令注入 这个就是最典型的命令注入接口.在文本框中输入一个IP ...
- spring3: 依赖和依赖注入-xml配置-DI的配置
3.1.1 依赖和依赖注入 传统应用程序设计中所说的依赖一般指“类之间的关系”,那先让我们复习一下类之间的关系: 泛化:表示类与类之间的继承关系.接口与接口之间的继承关系: 实现:表示类对接口的实现 ...
- Bean XML 配置(3)- 依赖注入配置
Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...
- IoC容器-Bean管理XML方式(创建对象和set注入属性,有参构造注入属性)
Ioc操作Bean管理 1,什么是Bean管理 (0)Bean管理指的是两个操作 (1)Spring创建对象 (2)Spring注入属性 2,Bean管理操作有两种方式 (1)基于xml配置文件方式实 ...
- Spring注入值得2种方式:属性注入和构造注入
Spring是一个依赖注入(控制反转)的框架,那么依赖注入(标控制反转)表现在那些地方了? 即:一个类中的属性(其他对象)不再需要手动new或者通过工厂方法进行创建,而是Spring容器在属性被使用的 ...
随机推荐
- kafka报错:Invalid message size: 0
现象 1.kafka topic 部分分区积压 2.问题kafka 节点上一直报错:java.lang.IllegalStateException: Invalid message size: 0 [ ...
- Spring 梳理-Spring配置文件 -<context:annotation-config/>和<context:component-scan base-package=""/>和<mvc:annotation-driven /> 的区别
<context:annotation-config/> 在基于主机方式配置Spring时,Spring配置文件applicationContext.xml,你可能会见<contex ...
- Hadoop点滴-外围概念
有句话说的好“大数据胜于好算法” 硬盘存储容量在不断提升的同时,访问速度(硬盘数据读取速度)却没有同步增长:1990年,访问全盘需要5分钟,20年后,需要2.5小时 不同的业务大数据,存储在一套HDF ...
- 阿里云centos6.9搭建fastDFS文件服务器
准备压缩包: 1.fastdfs-nginx-module_v1.16.tar.gz 2.FastDFS_v5.05.tar.gz 3.libfastcommonV1.0.7.tar.gz 4.ngi ...
- 【福利】离散&C++&硬件一笔记合集
离散 C++ 硬件
- python——pyinstaller踩的坑 UnicodeDecodeError
程序本身运行没任何毛病,奈何用pyinstaller -w xx.py的时候提示——UnicodeDecodeError: 'ascii' codec can't decode byte 0xb3 i ...
- [Android Studio] 2019年Android Studio配置指北
Android Studio是我学习Android开发路上的第一块绊脚石,新建一个项目,一行代码没动,直接编译不起来,我太难了,所以本文叫指北 本文讲解在9102年如何在国内网络不通畅的情况下流畅的使 ...
- Scala 学习笔记之集合(3)
建立一个Java类,为了演示Java集合类型向Scala集合的转换: import java.util.ArrayList; import java.util.List; public class S ...
- Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用
前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...
- Mysql高手系列 - 第24篇:如何正确的使用索引?【高手进阶】
Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 这是Mysql系列第24篇. 学习索引,主要是 ...