内容简介:Java代码审计连载之SQL注入本文原创作者:黑客小平哥,本文属i春秋原创奖励计划,未经许可禁止转载!
前言
近日闲来无事,快两年都没怎么写代码了,打算写几行代码,做代码审计一年了,每天看代码都好几万行,突然发现自己都不会写代码了,真是很 DT。想当初入门代码审计的时候真是非常难,网上几乎找不到什么 java 审计的资料,摸索了很长时间,搜到的也仅仅讲了点原理,为了给想学java代码审计的朋友门一点入门资料,就开始写《java代码审计连载》系列文章,本文章适合初学者,大牛留下脚印后请绕过, 若代码有什么其他问题请忽略,因为那不是重点 ,此片只讲述 SQL 注入。本次写了两个简单的页面,一个登陆页面,一个查询id界面,如下:
废话不多说,开始!
SQL注入原理
先看下百度百科对SQL注入的介绍:
所谓SQL注入,就是通过把SQL命令插入到Web 表单 提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到 SQL注入式攻击 。
SQL注入的表现形式
原理说的很正式,但是对初学者来说很笼统,对代码审计的来说也是不怎么明白。你那么总结起来,SQL注入在代码中体现的有以下3点:
1、传递的参数为用户可控;
什么叫参数为用户可控?其实前端传入的一切参数均为用户可控,包括:
这里的一切数据,参数传入后台后,接收的形式是什么样的呢?代码如下
request.getParameter("searchWord")是从前端获取参数的一种方式(当然还有其他方式,此处不赘述),而从前端获取的参数名为“searchWord”,也就是此处jsp页面中input标签中的id为“searchWord”的值,如下:
因此“searchWord”就是前端我们输入的“id”值。
2.系统未对传入后台的参数做任何特殊字符过滤,或者字符过滤不全。
什么是特殊字符,对SQL注入而言,特殊字符包括(注意大小写):
--,#,//(注释符)
and
or
select
update
delete
drop
declare
insert
xp_shell
(,)括号
||,+,(空格) 连接符
'单引号
|(竖线符号)
&(&符号)
;(分号)
$(美元符号)
%(百分比符号)
@(at符号)
'(单引号)
"(引号)
\'(反斜杠转义单引号)
\"(反斜杠转义引号)
<>(尖括号)
CR(回车符,ASCII 0x0d)
LF(换行,ASCII 0x0a)
,(逗号)
\(反斜杠)
3、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
最后在数据库中执行的时候就是
想必大牛们都明白这一点,就不赘述了。
以上3点就是造成SQL注入产生的根本原因。
SQL页面展示
下面贴上SQL注入漏洞页面:
搜索框输入:1
查看执行结果:
搜索框输入:1’
查看执行结果:
搜索框输入:1’ and ‘a’=’a
查看执行结果:
尝试爆出数据库长度(过程忽略):
表示数据库长度为:8
顺便贴上SqlMap截图:
剩下的不深入,你们比我懂。
SQL注入的修复
SQL注入在java代码中的修复其实也是非常简单,主要有两个方式:
1、添加全局过滤器,过滤特殊字符;方式如下:
Web.xml:
SQLFilter.java中:
2.SQL语句使用参数化查询方式,代码如下:
使用参数化查询才是SQL注入最根本的修复方式。
修复后SqlMap截图:
结论:
本篇文章没有多少技术含量,希望对安全开发人员和学习代码审计人员有一点可取之处。本《java代码审计连载篇》会继续编写,希望大家多多支持,若有错误和不足之处,请指出来,谢谢!
以上所述就是小编给大家介绍的《Java代码审计连载之SQL注入》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- [代码审计]Metinfo 6.1.2 SQL注入
- 某租车系统Java代码审计之后台注入漏洞
- Etouch2.0 分析代码审计流程 (二) 前台SQL注入
- 代码审计--源代码审计思路
- Java代码审计丨某开源系统源码审计
- 【代码审计】PHP代码审计之CTF系列(1)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
密码学概论(中文版)
wade trappe、lawrence C.washington / 特拉普 / 人民邮电出版社 / 2004-6-1 / 38.00
本书全面讲解了密码学基本知识以及相关的基础数学理论,介绍了椭圆曲线、AES和量子密码体制等密码学前沿知识,详细地阐述了数字签名、数字现金等应用问题。另外,书中每章均给出了相应的习题,在附录中给出了相关Mathematica、Maple和 MATLAB实例。 本书可供高等院校就用数学、通信和计算机等专业用作密码学、通信安全和网络安全等课程的教材或参考书,也可供信息安全系统设计开发人......一起来看看 《密码学概论(中文版)》 这本书的介绍吧!