sql注入攻击

【SQL注入】

余生长醉 提交于 2019-12-18 04:40:10
1.什么是SQL注入 一种注入攻击,可以执行恶意SQL语句。 通过将任意 SQL代码插入数据库查询 ,使攻击者能够 完全控制 Web应用程序后面的 数据库服务器 。 犯罪分子可能会利用它来未经授权访问用户的敏感数据: 客户信息 , 个人数据 , 商业机密 , 知识产权 等。SQL注入攻击是最古老,最流行, 最危险的Web应用程序漏洞之一 。 2.SQL注入攻击的类型 SQL注入分为多种类型 1.带内注入 2.盲注入 3.带外注入 3.带内注入 1. 基于 错误的SQL 注入:从显示的错误消息中获取有关数据库的信息 2.基于 联合的SQL 注入:依赖于攻击者能够将UNION ALL被盗信息的结果与合法结果连接起来。 这两种技术都 依赖于 攻击者 修改应用程序发送的SQL, 以及浏览器中显示的 错误和返回的信息 。 如果应用程序开发人员或数据库开发人员无法正确地 参数化 他们在查询中使用的值,那么它会成功。 4.例子 举一个 简单的例子 在我们没有使用任何安全框架的情况下, 比如在一个登陆界面,要求用户输入用户名和密码, 以mybatis为例 ,登陆页面的sql写成了这样 如果 list的size不为0 就放行~ 数据库里的user 表中有两条记录 username password a 1 b 2 尝试输入 正确的用户名密码 显示我们登陆成功 尝试输入 错误的密码 我们登录失败

信息安全常见漏洞类型汇总

℡╲_俬逩灬. 提交于 2019-12-17 04:29:54
一、SQL 注入漏洞 SQL 注入攻击( SQL Injection ),简称注入攻击、SQL 注入,被广泛用 于非法获取网站控制权, 是发生在应用程序的数据库层上的安全漏洞。在设计程序, 忽略了对输入字符串中夹带的SQL 指令的检查,被数据库误认为是正常的SQL 指 令而运行,从而使数据库受到攻击,可能导致数据被窃取、更改、删除,以及进一 步导致网站被嵌入恶意代码、被植入后门程序等危害。 通常情况下, SQL 注入的位置包括: (1)表单提交,主要是POST 请求,也包括GET 请求; (2)URL 参数提交,主要为GET 请求参数; (3)Cookie 参数提交; (4)HTTP 请求头部的一些可修改的值,比如Referer 、User_Agent 等; (5)一些边缘的输入点,比如.mp3 文件的一些文件信息等。 SQL 注入的危害不仅体现在数据库层面上, 还有可能危及承载数据库的操 作系统;如果SQL 注入被用来挂马,还可能用来传播恶意软件等,这些危害包括但 不局限于: (1)数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。作为数据 的存储中心,数据库里往往保存着各类的隐私信息, SQL 注入攻击能导致这些隐私 信息透明于攻击者。 (2)网页篡改:通过操作数据库对特定网页进行篡改。 (3)网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链 接,进行挂马攻击。

CSRF攻击

…衆ロ難τιáo~ 提交于 2019-12-17 02:57:22
django攻击 csrf攻击 xss攻击 clickjacking攻击 sql注入 CSRF攻击: CSRF攻击概述: CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一。其他安全隐患,比如 SQL 脚本注入,跨站域脚本攻击等在近年来已经逐渐为众人熟知,很多网站也都针对他们进行了防御。然而,对于大多数人来说,CSRF 却依然是一个陌生的概念。即便是大名鼎鼎的 Gmail, 在 2007 年底也存在着 CSRF 漏洞,从而被黑客攻击而使 Gmail 的用户造成巨大的损失。 CSRF攻击原理: 网站是通过 cookie 来实现登录功能的。而 cookie 只要存在浏览器中,那么浏览器在访问这个 cookie 的服务器的时候,就会自动的携带 cookie 信息到服务器上去。那么这时候就存在一个漏洞了,如果你访问了一个别有用心或病毒网站,这个网站可以在网页源代码中插入js代码,使用js代码给其他服务器发送请求(比如ICBC的转账请求)。那么因为在发送请求的时候,浏览器会自动的把 cookie 发送给对应的服务器,这时候相应的服务器(比如ICBC网站),就不知道这个请求是伪造的,就被欺骗过去了。从而达到在用户不知情的情况下,给某个服务器发送了一个请求(比如转账)。 防御CSRF攻击:

DWVA-关于SQL注入的漏洞详解

大城市里の小女人 提交于 2019-12-16 20:40:31
low等级 代码如下: 1 <?php 2 3 if( isset( $_REQUEST[ 'Submit' ] ) ) { 4 // Get input 5 $id = $_REQUEST[ 'id' ]; 6 7 // Check database 8 $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; 9 $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' ); 10 11 // Get results 12 while( $row = mysqli_fetch_assoc( $result ) ) { 13 // Get values 14 $first = $row["first_name"]; 15 $last = $row["last

注入攻击

心不动则不痛 提交于 2019-12-16 15:44:54
数据与代码未分离 用户能控制数据的输入,代码与数据拼接 SQL 注入 1. 试探 SQL 注入漏洞是否存在——简单盲注 常规 URL:http://www.example.com/test.php?id=2 试探 URL 1:http://www.example.com/test.php?id=2 AND 1=1 试探 URL 2:http://www.example.com/test.php?id=2 AND 2=1 如果 URL 1 返回结果,而 URL 2 查询结果为空,说明存在 SQL 注入 2. Timing Attack——高级盲注 MySQL:BENCHMARK(count, function),SLEEP(5) PostgreSQL:PG_SLEEP(5),GENERATE_SERIES(1, count) MS SQL Server:WAITFOR DELAY '0:0:5' 以上函数可以让数据库在执行某条指令的时候延迟一定长度的时间,通过时间长短的变化,可以判断注入语句是否执行成功。 用法举例:1170 UNION SELECT IF ( SUBSTRING(current, 1, 1)=CHAR(119) , BENCHMARK(5000000, ENCODE('MSG', 'by 5 seconds')) , null ) FROM ( SELECT

安全测试基础

这一生的挚爱 提交于 2019-12-15 05:30:32
转载网上一篇关于安全测试的文章 转载文章标题名为“ 安全测试基础(Ⅰ) 安全测试概述 ” 转载地址: https://www.cnblogs.com/rd-ddddd/p/7718206.html#4367070 一般来说,版本功能测试完成,对应的用例也实现了自动化,性能、兼容、稳定性测试也完成了以后,我们就需要考虑到系统的安全问题,特别是涉及到交易、支付、用户账户信息的模块,安全漏洞会带来极高的风险。 一.安全测试原则与常见的安全威胁: 1.安全需求: ※认证:对认证的用户的请求返回 ※访问控制:对未认证的用户的权限控制和数据保护 ※完整性:用户必须准确的收到服务器发送的信息 ※机密性:信息必须准确的传递给预期的用户 ※可靠性:失败的频率是多少?网络从失败中恢复需要多长时间?采取什么措施来应对灾难性的失败?(个人理解这个地方应该更偏向于容错容灾测试的范畴) ※不可抵赖:用户应该能证明接收到的数据来自特定的服务器 2.常见的安全测试内容 权限控制 SQL注入 URL安全测试 XSS(跨站脚本攻击) CSRF(跨站请求伪造) URL跳转漏洞 其他安全方面的考量 接下来,我们以一个C#实现的下常见的MVC架构网站为例,来分析具体的各个安全测试角度。 二.权限控制 权限控制相对来说比较简单,功能测试的过程中也接触过不少,主要就是考虑以下方面: 1.用户权限:我们假设存在两个用户A,B

Mybatis—mapper.xml配置文件

百般思念 提交于 2019-12-14 18:26:11
目录 select Select 元素的属性 insert, update 和 delete 示例 sql 参数 (parameterType...) 字符串替换(${} 和 #{}区别) 结果映射 高级结果映射 id & result 关联association (实体类的属性是个实体类) 集合 集合的嵌套 Select 查询 集合的嵌套结果映射 集合的多结果集(ResultSet) 自动映射 缓存 (未完待续) MyBatis 的真正强大在于它的映射语句,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 为聚焦于 SQL 而构建,以尽可能地为你减少麻烦。 SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出): cache – 对给定命名空间的缓存配置。 cache-ref – 对其他命名空间缓存配置的引用。 resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。 parameterMap – 已被废弃!老式风格的参数映射。更好的办法是使用内联参数,此元素可能在将来被移除。 sql – 可被其他语句引用的可重用语句块。 insert – 映射插入语句 update – 映射更新语句 delete –

SQL注入之SQLmap入门

情到浓时终转凉″ 提交于 2019-12-13 17:00:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 什么是SQLmap? SQLmap是一款用来检测与利用SQL注入漏洞的免费开源工具,有一个非常棒的特性,即对检测与利用的自动化处理(数据库指纹、访问底层文件系统、执行命令)。 读者可以通过位于SourceForge的官方网站下载SQLmap源码: http://sourceforge.net/projects/sqlmap/ SQLmap的作者是谁? Bernardo DameleAssumpcao Guimaraes (@inquisb),读者可以通过 bernardo@sqlmap.org 与他取得联系,以及Miroslav Stampar (@stamparm)读者可以通过 miroslav@sqlmap.org 与他联系。 同时读者也可以通过dev@sqlmap.org与SQLmap的所有开发者联系。 执行SQLmap的命令是什么? 进入sqlmap.py所在的目录,执行以下命令: #python sqlmap.py -h (译注:选项列表太长了,而且与最新版本有些差异,所以这里不再列出,请读者下载最新版在自己机器上看吧) SQLmap命令选项被归类为目标(Target)选项、请求(Request)选项、优化、注入、检测、技巧(Techniques)、指纹、枚举等。 如何使用SQLmap: 为方便演示

Mapper XML 文件

我只是一个虾纸丫 提交于 2019-12-11 16:12:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好。 SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 给定命名空间的缓存配置。 cache-ref – 其他命名空间缓存配置的引用。 resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。 parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除,这里不会记录。 sql – 可被其他语句引用的可重用语句块。 insert – 映射插入语句 update – 映射更新语句 delete – 映射删除语句 select – 映射查询语句 下一部分将从语句本身开始来描述每个元素的细节。 select 查询语句是 MyBatis 中最常用的元素之一,光能把数据存到数据库中价值并不大,如果还能重新取出来才有用,多数应用也都是查询比修改要频繁。对每个插入、更新或删除操作,通常对应多个查询操作。这是 MyBatis

JDBC

让人想犯罪 __ 提交于 2019-12-10 13:53:36
JDBC的开发步骤 1.实现驱动注册(DriverManager) 2.建立连接 3.创建以及发送SQL指令 4.获取以及处理响应 5.释放资源 增删改查案例 增 public static void insert(int deptno,String dname,String loc) throws Exception{ Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/db1711", "root", "123456"); Statement stmt = conn.createStatement(); String sql = "INSERT INTO dept VALUES("+deptno+",'"+dname+"','"+loc+"')"; int num = stmt.executeUpdate(sql); System.out.println(num); stmt.close(); conn.close(); } 删 public static void delete(int deptno) throws Exception{ Class.forName("com.mysql.jdbc