sql注入攻击

SQL注入攻击和防御

风流意气都作罢 提交于 2019-12-23 19:20:37
SQL注入攻击和防御 部分整理。。。 什么是SQL注入? 简单的例子, 对于一个购物网站,可以允许搜索,price小于某值的商品 这个值用户是可以输入的,比如,100 但是对于用户,如果输入,100' OR '1'='1 结果最终产生的sql, SELECT * FROM ProductsTbl WHERE Price < '100.00' OR '1' = '1' ORDER BY ProductDescription; 这样用户可以获取所有的商品信息 再看个例子, 对于用户身份认证,需要输入用户名和密码 但是如果用户在密码里面加入注入代码, SELECT userid FROM CMSUsers WHERE user = 'foo' AND password = 'password' OR '1' = '1'; 这样就一定可以通过验证 注入类型 内联 SQL 注入(Inline SQL Injection) 内联注入是指向查询注入一些SQL 代码后,原来的查询仍然会全部执行 字符串内联注入 例子, 通过下面的sql,把users 表中所有密码都更新为new_password,相当严重 UPDATE users SET password = 'new_password' WHERE username = 'Bob' and password = 'old_password' OR

sql注入问题

被刻印的时光 ゝ 提交于 2019-12-23 05:16:07
SQL注入问题想必大家都会有所听闻,因为也许大家都听过某某学长通过攻击学校数据库修改自己成绩的事情,这些学长们一般用的就是SQL注入方法。SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一。 SQL注入的发生,通常是恶意用户通过在表单中填写包含SQL关键字的数据,来使数据库执行非常规逻辑的过程。简单来说,就是数据库越界做了超出代码控制范围的事情。这个问题的来源是,SQL数据库的操作是通过SQL语句来执行的,而无论是执行代码还是数据项都必须写在SQL语句之中,这就导致如果我们在数据项中加入了某些SQL语句关键字(比如说SELECT、DROP等等),这些关键字就很可能在数据库写入或读取数据时得到执行。 SQL注入的场景还原 假设有一个用户表users,往用户表中插入一条数据的语句是: insert into users(name) values('yanggb'); 其中的name字段来源于表单页面中的input,这时有一个不怀好意的用户填写的name字段为【'yanggb');drop table users;--】,那么这时候上面的语句就变成: insert into users(name) values('yanggb');drop table users;--); 一整行可能有点看不清楚,我们来格式化看一下: insert into

jdbc之防sql注入攻击

为君一笑 提交于 2019-12-22 13:01:54
1、SQL注入攻击:   由于dao中执行的SQL语句是拼接出来的,其中有一部分内容是由用户从客户端传入,所以当用户传入的数据中包含sql关键字时,就有可能通过这些关键字改变sql语句的语义,从而执行一些特殊的操作,这样的攻击方式就叫做sql注入攻击    PreparedStatement利用预编译的机制将sql语句的主干和参数分别传输给数据库服务器,从而使数据库分辨的出哪些是sql语句的主干哪些是参数,这样一来即使参数中带了sql的关键字,数据库服务器也仅仅将他当作参数值使用,关键字不会起作用,从而从原理上防止了sql注入的问题 PreparedStatement主要有如下的三个优点: 1.可以防止sql注入 2.由于使用了预编译机制,执行的效率要高于Statement 3.sql语句使用?形式替代参数,然后再用方法设置?的值,比起拼接字符串,代码更加优雅. PreparedStatement 与Statment比较 1)语法不同: PreparedStatement可以使用预编译的 sql,而 Statment只能使用静态的 sql 2)效率不同: PreparedStatement可以使用 sql缓存区,效率比 Statment高 3)安全性不同: PreparedStatement可以有效防止 sql注入,而 Statment不能防止 sql注入。 /** *

29_java之JDBC|SQL注入

随声附和 提交于 2019-12-22 13:01:35
01JDBC概念和数据库驱动程序 * A: JDBC概念和数据库驱动程序 * a: JDBC概述 * JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API, 可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范 * JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。 * JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定, 设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。 * 我们使用的是mysql的驱动mysql-connector-java-5.1.39-bin.jar * b: 总结 * JDBC是java提供给开发人员的一套操作数据库的接口 * 数据库驱动就是实现该接口的实现类 02JDBC原理 * A: JDBC原理 * a: 描述 * Java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动 * DBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库! 每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。 * 图解见 03准备数据 * A: 准备数据

sql注入原理详解(一)

别等时光非礼了梦想. 提交于 2019-12-21 14:44:12
我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入?   所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问 数据库 时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。 黑客通过SQL注入攻击可以拿到网站 数据库 的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉。做为网络开发者的你对这种黑客行为恨之入骨,当然也有必要了解一下SQL注入这种功能方式的原理并学会如何通过代码来保护自己的网站数据库 sql注入原理:  下面我们来说一下sql注入原理,以使读者对sql注入攻击有一个感性的认识,至于其他攻击,原理是一致的。 SQL注射能使攻击者绕过认证机制,完全控制远程服务器上的数据库。 SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL数据库来存放应用程序的数据

SQL注入GET参数

别来无恙 提交于 2019-12-21 10:08:05
1、SQL注入漏洞介绍 sql注入攻击指的是通过特殊的输入作为参数拆入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句中进而执行攻击者所要的操作,起主要原因是程序没有细致地过滤用户输入的数据,致使非法数据入侵系统。 SQL注入的产生原因通常表现在以下几个方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。   2、信息探测 扫描主机服务信息以及服务版本 —nmap -sV 靶场IP地址 快速扫描主机全部信息 –nmap -T4 -A -v 靶场IP地址 探测敏感信息 –nikto -host http://靶场IP地址:端口   3、深入挖掘 分析nmap、nikto扫描结果,并对结果进行分析,挖掘可以利用的信息; 在nikto扫描的结果下,发现用户登录页面的信息 使用浏览器打开 http://ip:port/敏感页面,查看敏感信息,找到可利用的位置; 尝试admin,发现并不能直接登录到系统当中 我们想要进入系统后台,想到能不能来挖掘到系统当中的漏洞   4、漏洞扫描 web漏洞扫描器 owasp-zap(因为这个工具不更新,已经无法在新版本的Kali中运行了。所以被移除了,在命令行执行这个就可以使用了) 打开owasp-zap 输入靶场的IP地址,点击攻击(Attack)

见招拆招:绕过WAF继续SQL注入常用方法

瘦欲@ 提交于 2019-12-19 04:12:11
Web Hacker总是生存在与WAF的不断抗争之中的,厂商不断过滤,Hacker不断绕过。WAF bypass是一个永恒的话题,不少基友也总结了很多奇技怪招。那今天我在这里做个小小的扫盲吧。先来说说WAF bypass是啥。 WAF呢,简单说,它是一个Web应用程序防火墙,其功能呢是用于过滤某些恶意请求与某些关键字。WAF仅仅是一个工具,帮助你防护网站来的。但是如果你代码写得特别渣渣,别说WAF帮不了你,就连wefgod都帮不了你…所以不能天真的以为用上WAF你的网站就百毒不侵了。开始正题—- 1>注释符 相信很多朋友都知道SQL的注释符吧,这算是绕WAF用的最广泛的了。它们允许我们绕过很多Web应用程序防火墙和限制,我们可以注释掉一些sql语句,然后让其只执行攻击语句而达到入侵目的。 常用注释符: //, -- , /**/, #, --+, -- -, ;%00 2>情况改变 然而,以前审计的一些开源程序中,有些厂商的过滤很不严谨,一些是采用黑名单方式过滤,但是有些只过滤了小写形式,然而在传参的时候并没有将接收参数转换为小写进行匹配。针对这种情况,我们很简单就能绕过。 比如它的过滤语句是: /union\sselect/g 那么我们就可以这样构造: id=1+UnIoN/**/SeLeCT 3>内联注释 有些WAF的过滤关键词像/union\sselect/g,就比如上面说的

深入了解SQL注入绕过waf和过滤机制

匆匆过客 提交于 2019-12-19 02:32:39
深入了解SQL注入绕过waf和过滤机制 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 0x05 本文小结 0x06 参考资料 0x00 前言 笔者前几天在做测试时输入攻击向量后页面发生了重定向甚至异常输入也是重定向怀疑其中有WAF在作怪。之前对WAF接触比较少纯粹是新手趁此科普了一下并查阅了一些绕过WAF的方法。所找到的资料中主要分为两类SQL注入和XSS绕过笔者SQL注入同样是新手因此集中了不少资料并进行整理和总结因此有本文的产生。 目前能看到的绕过WAF的SQL注入技术大致有八、九种但是完整的、详细的内容却分布在互联网各个角落。另外我们谈绕过WAF其实也是谈如何绕过过滤机制如果在讨论bypass技术的时候明确一下现有的一些filter的实现及其evasion对于笔者这样的初学者来说是不是更好还有就是如果在文章后面可以提供一些测试向量提供思路和参考虽然内容看起来很杂但是也会比较方便呢?抱着这些想法尽管前人的分享已经比较充分了还是壮着胆自己进行总结这样更能适应自己的需求也可能更加适合一些朋友的需求。 本文所讨论的技术大都几年以前就已经存在了不能保证每种方法在实际测试中都能生效另外为简便起见笔者对形如http://www.site.com的URL约定为z.com。

commons-lang常用工具类StringEscapeUtils使用

折月煮酒 提交于 2019-12-18 18:39:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在apache commons-lang(2.3以上版本)中为我们提供了一个方便做转义的工具类,主要是为了防止sql注入,xss注入攻击的功能。总共提供了以下几个方法: 1.escapeSql 提供sql转移功能,防止sql注入攻击,例如典型的万能密码攻击' ' or 1=1 ' ' 1 StringBuffer sql = new StringBuffer("select key_sn,remark,create_date from tb_selogon_key where 1=1 "); 2 if(!CommUtil.isEmpty(keyWord)){ 3 sql.append(" and like '%"+ StringEscapeUtils.escapeSql(keyWord) +"%'"); 4 } 2.escapeHtml /unescapeHtml 转义/反转义html脚本 1 System.out.println(StringEscapeUtils.escapeHtml("<a>dddd</a>")); 2 输出结果为:<a>dddd</a> 1 System.out.println(StringEscapeUtils.unescapeHtml("<a>dddd</a>")); 2 输出为:

SQL注入学习(一)

有些话、适合烂在心里 提交于 2019-12-18 12:41:22
SQL注入(SQL Injection)是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。 SQL注入基础 漏洞原理 针对SQL注入的攻击行为可描述为通过用户可控参数中注入SQL语法,破坏原有SQL结构,达到编写程序时意料之外结果的攻击行为。其成因可以归结外以下两个原因叠加造成的: 1、程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句。 2、未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句中。 注入点可能存在的位置 根据SQL 注入漏洞的原理,在用户“可控参数”中注入SQL 语法,也就是说Web 应用在获取用户数据的地方,只要带入数据库查询,都有存在SQL 注入的可能,这些地方通常包括: @ GET 数据 @ POST 数据 @ HTTP 头部(HTTP 请求报文其他字段) @ Cookie 数据 … 漏洞危害 攻击者利用SQL注入漏洞,可以获取数据库中的多种信息(例如:管理员后台密码),从而脱取数据库中内容(脱库)。在特别情况下还可以修改数据库内容或者插入内容到数据库,如果数据库权限分配存在问题,或者数据库本身存在缺陷,那么攻击者可以通过SQL注入漏洞直接获取webshell或者服务器系统权限。 注入分类 SQL 注入漏洞根据不同的标准,有不同的分类。但是从数据类型分类来看,SQL