Java代码审计连载之SQL注入

栏目: 数据库 · 发布时间: 7年前

内容简介:Java代码审计连载之SQL注入
本文原创作者:黑客小平哥,本文属i春秋原创奖励计划,未经许可禁止转载!

前言

近日闲来无事,快两年都没怎么写代码了,打算写几行代码,做代码审计一年了,每天看代码都好几万行,突然发现自己都不会写代码了,真是很 DT。想当初入门代码审计的时候真是非常难,网上几乎找不到什么 java 审计的资料,摸索了很长时间,搜到的也仅仅讲了点原理,为了给想学java代码审计的朋友门一点入门资料,就开始写《java代码审计连载》系列文章,本文章适合初学者,大牛留下脚印后请绕过, 若代码有什么其他问题请忽略,因为那不是重点 ,此片只讲述 SQL 注入。本次写了两个简单的页面,一个登陆页面,一个查询id界面,如下:

Java代码审计连载之SQL注入

Java代码审计连载之SQL注入

废话不多说,开始!

SQL注入原理

先看下百度百科对SQL注入的介绍:

所谓SQL注入,就是通过把SQL命令插入到Web 表单 提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到 SQL注入式攻击

SQL注入的表现形式

原理说的很正式,但是对初学者来说很笼统,对代码审计的来说也是不怎么明白。你那么总结起来,SQL注入在代码中体现的有以下3点:

1、传递的参数为用户可控;

什么叫参数为用户可控?其实前端传入的一切参数均为用户可控,包括:

Java代码审计连载之SQL注入

这里的一切数据,参数传入后台后,接收的形式是什么样的呢?代码如下

Java代码审计连载之SQL注入

request.getParameter("searchWord")是从前端获取参数的一种方式(当然还有其他方式,此处不赘述),而从前端获取的参数名为“searchWord”,也就是此处jsp页面中input标签中的id为“searchWord”的值,如下:

Java代码审计连载之SQL注入

因此“searchWord”就是前端我们输入的“id”值。

2.系统未对传入后台的参数做任何特殊字符过滤,或者字符过滤不全。

什么是特殊字符,对SQL注入而言,特殊字符包括(注意大小写):

--,#,//(注释符)

and

or

select

update

delete

drop

declare

insert

xp_shell

(,)括号

||,+,(空格) 连接符

'单引号

|(竖线符号)

&(&符号)

;(分号)

$(美元符号)

%(百分比符号)

@(at符号)

'(单引号)

"(引号)

\'(反斜杠转义单引号)

\"(反斜杠转义引号)

<>(尖括号)

CR(回车符,ASCII 0x0d)

LF(换行,ASCII 0x0a)

,(逗号)

\(反斜杠)

3、SQL语句是以拼接的形式执行,代码如下所示:

Java代码审计连载之SQL注入

SQL语句一旦以拼接的方式执行,就表示拼接的参数“word”是表示一个SQL语句,而不仅仅是作为一个参数执行,什么意思呢?详细如下:

如果word的值为1,那么SQL语句变成:

Select * from test where id = 1

如果word的值为1’ and ‘a’=’a,那么SQL语句变成:

Select * from test where id = 1’ and ‘a’=’a

最后在数据库中执行的时候就是

Java代码审计连载之SQL注入

想必大牛们都明白这一点,就不赘述了。

以上3点就是造成SQL注入产生的根本原因。

SQL页面展示

下面贴上SQL注入漏洞页面:

搜索框输入:1

Java代码审计连载之SQL注入

查看执行结果:

Java代码审计连载之SQL注入

搜索框输入:1’

查看执行结果:

Java代码审计连载之SQL注入

搜索框输入:1’ and ‘a’=’a

查看执行结果:

Java代码审计连载之SQL注入

尝试爆出数据库长度(过程忽略):

Java代码审计连载之SQL注入

Java代码审计连载之SQL注入

表示数据库长度为:8

顺便贴上SqlMap截图:

Java代码审计连载之SQL注入

Java代码审计连载之SQL注入

剩下的不深入,你们比我懂。

SQL注入的修复

SQL注入在java代码中的修复其实也是非常简单,主要有两个方式:

1、添加全局过滤器,过滤特殊字符;方式如下:

Web.xml:

Java代码审计连载之SQL注入

SQLFilter.java中:

Java代码审计连载之SQL注入

2.SQL语句使用参数化查询方式,代码如下:

Java代码审计连载之SQL注入

使用参数化查询才是SQL注入最根本的修复方式。

修复后SqlMap截图:

Java代码审计连载之SQL注入

结论:

本篇文章没有多少技术含量,希望对安全开发人员和学习代码审计人员有一点可取之处。本《java代码审计连载篇》会继续编写,希望大家多多支持,若有错误和不足之处,请指出来,谢谢!


以上所述就是小编给大家介绍的《Java代码审计连载之SQL注入》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Computer Age Statistical Inference

Computer Age Statistical Inference

Bradley Efron、Trevor Hastie / Cambridge University Press / 2016-7-21 / USD 74.99

The twenty-first century has seen a breathtaking expansion of statistical methodology, both in scope and in influence. 'Big data', 'data science', and 'machine learning' have become familiar terms in ......一起来看看 《Computer Age Statistical Inference》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具