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注入相关的优秀博客
XML注入
什么是XML注入
XML的设计宗旨是传输数据,而非显示数据。XML注入是一种古老的技术,通过利用闭合标签改写XML文件实现的。
下面举个最简单的例子
用户输入
root
若攻击者刚好能掌控用户输入字段,输入 adminhacker ,最终修改结果为:
admin
hacker
root
这样我们可以通过XML注入添加一个管理员账户。
预防XML注入
对有改变XML结构的特殊输入进行过滤或者编码;
对["&","","'".'"',"/"]这些特殊字符过滤。
JSON注入
什么是JSON注入
我们知道JSON是根据引号(")、冒号(WEB安全第五篇--其他注入的奇技淫巧:XML注入、Xpath注入、Json注入、CRLF注入
零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...
XML外部实体(XXE)注入详解
###XML与xxe注入基础知识 1.XMl定义 XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言:可扩展的样式语言(Ex ...
[.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 ...
Spring注入值得2种方式:属性注入和构造注入
Spring是一个依赖注入(控制反转)的框架,那么依赖注入(标控制反转)表现在那些地方了? 即:一个类中的属性(其他对象)不再需要手动new或者通过工厂方法进行创建,而是Spring容器在属性被使用的 ...
Spring依赖注入的Setter注入(通过get和set方法注入)
Spring依赖注入的Setter注入(通过get和set方法注入) 导入必要的jar包(Spring.jar和commonslogging.jar) 在src目录下建立applicationCont ...
随机推荐
Android 强烈推荐:程序员接私活那点事
今天周末在家宅着,并不是我不想运动,是因为北京的雨雪交加导致我想在家写文章,不过想想给大家写文章还是蛮惬意的,望一眼窗外,看一眼雪景,指尖在键盘上跳动,瞬间有种从屌丝程序员转变成了小姑娘们都羡慕的文艺 ...
BLE链路层状态机
BLE的Link层,应当是了解BLE需要首先熟悉的一部分,BLE的Controller部分主要都在围绕这一部分实现的.Link层的内容规定了BLE底层是怎么实现蓝牙设备之间的控制,数据传输等等的.Li ...
Fiddler对安卓应用手机抓包图文教程
http://www.cr173.com/html/37625_1.html 做开发需要抓取手机app的http/https的数据包,想看APP发出的http请求和响应是什么,这就需要抓包了,这可以得 ...
通讯录C++console application
#include #include #include #include #inc ...
【SQL注入】mysql中information_schema详解
在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库.其中保存着关于MySQL服务器所维护的所有其他数据库的信息.如数据库名,数据库的表,表栏的数据类型与访问 ...
基于Metronic的Bootstrap开发框架--工作流模块功能介绍(2)
本篇继续,继续介绍基于Metronic的Bootstrap开发框架的工作模块功能,介绍工作流模块中相关业务表单的界 ...
Docker学习笔记-Docker for Windows 安装
前言: 环境:windows10专业版 64位 正文: 官方下载地址:https://hub.docker.com/editions/community/docker-ce-desktop-windo ...
Oracle date 详解
oracle 数据类型详解---日期型 oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享:注:由于INTERV ...
Eclipse 不能build, pom文件上面有叉叉 解决办法
Error message: [html] view plaincopy execution not covered by lifecycle configuration: org.apache. ...
MySQL 字符串拼接
MySQL 字符串拼接 在Mysql 数据库中存在两种字符串连接操作.具体操作如下 1. CONCAT(string1,string2,…) 说明 : string1,string2代表字符串,c ...