初识java代码审计(java web网站)

1.1、代码审计概述

代码审计是一种以发现安全漏洞、程序错误和违反程序规范为目标的源代码 分析。在实践时,可以通过人工审查或者自动化工具的方式。对程序源代码执行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。

代码审计对象包括并不限于windows和linux系统环境下的以下语言审核:java、c、c#、asp、php、jsp、.net (思路相似)

1.1.1 黑盒测试与白盒测试的区别

黑盒测试:就是把测试对象看作一个不能打开的黑盒子。测试时,测试人员完全不用考虑盒子里面的逻辑结构和具体运作,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明,检验输出结果对不对。

白盒测试:与黑盒测试恰恰相反,这种方式是把测试对象看作一个打开的透明盒子。测试时,测试人员会利用程序内部的逻辑结构及有关信息,通过在不同点检查程序状态,检验程序中的每条通路是否都按预定要求执行正确工作。

测试对象不同:

黑盒测试:主要针对的是程序所展现给用户的功能。

白盒测试:主要针对的是程序代码逻辑,简单的说,就是前者则是最终展示功能,后者测试后台程序。

测试方法不同:

黑盒测试:功能测试,是通过测试来检测每个功能是否都能正常使用。

白盒测试:成结构检测、透明盒检测、逻辑驱动测试或基于代码的测试。

1.1.2 网络安全领域中的黑盒、白盒与灰盒测试

接下来对黑盒、白盒、灰盒三个概念在渗透测试中的解释

黑盒测试:也称为外部测试。对攻击目标网络内部拓扑一无所知,完全模拟真实黑客有组织有步骤的渗透入侵过程。(对攻击者要求高,需要进行大量的信息收集)

白盒测试:也称为内部测试。对渗透攻击目标网络非常了解,以最小的代码开展系统安全探测。

灰盒测试:可以理解为白盒测试和黑盒测试的混合测试。

1.1.3 代码审计的重要意义

代码审计对攻防研究有着重要的意义。在攻击方面,可以从各个平台找到系统泄露的源代码,执行审计,然后利用审计的漏洞获取系统权限。在防御方面,代码审计可以发现更多更隐蔽的漏洞,在产品上线前将问题解决,有望在黑客发现利用web漏洞之前,找出安全隐患,并将其修复,提高系统安全性。在攻击方面,若渗透人员不了解代码审计,则可能在渗透测试实战中难以“观察入微”,渗透测试人员遇到的麻烦包括但是不仅限于:

(1)遗漏在网站代码里潜在的漏洞

(2)盲目测试,做无用功

(3)对于部分漏洞无法通过黑盒测试发现,如:反序列话漏洞、命令执行漏洞、代码执行漏洞等。

以往通过扫描器扫描站点或利用Nday执行渗透测试的方式已逐渐称为过去式,目前比较流行的渗透流程:确定站点指纹→通过旁站扫描备份或开源程序获取源码→代码审计→利用审计发现漏洞。

1.2 java代码审计基础

1.2.1 java代码审计基础能力

java代码审计要求代码审计人员能“动静结合”,即要求审计人员具备一定的编程基础,了解基本语法与面向对象思想。能够通过阅读代码理解代码逻辑,并善于查阅文档和资料就能解决大多数问题;“动”即要求代码审计人员具备调试程序的能力。

1.2.2 java代码审计技术基础

学习java代码审计必备技术栈与学习路线:

1.java SE基础:基础语法、面向对象编程、序列化、反射

2.javaweb基础知识:HTML、css、javascript、mysql、jdbc(与数据库进行交互的时候使用的API)、mvc、servlet、jsp、tomcat、xmldeng

3.java框架:ssm、springboot等

4.java安全漏洞与代码审计

1.3 java代码审计常用思路

1.接口排查:先找出接口外部接受的参数,并跟踪其传递过程,观察是否有参数校验不严传入高危方法(函数)中。或者在传递过程中是否有代码逻辑漏洞。

特点:相比逆向追中挖掘更全面,但效率相对较低。

2.危险方法硕源:检查敏感方法(函数)的参数,并查看参数的传递与处理。判断变量是否可控并且已经过严格的过滤:

优点:只需要搜索相应敏感关键字,即可以快速地挖掘想要的漏洞,具有定向挖掘和高效、高质量的优点。

缺点:由于没有读通代码,对程序代码理解不够深入,在挖掘漏洞时定位利用会花费一些时间,另外对逻辑漏洞挖掘覆盖不到。

3.功能定向审计:根据经验判断该类应用通常会在哪些功能中出现漏洞,直接审计该类功能的代码。

4.第三方

注入漏洞

1、定义:

注入漏洞,是指攻击方可以通过HTTP请求将Payload注入到代码中,导致payload被当作正常代码执行的漏洞。

例如:SQL注入漏洞,攻击方注入的payload插入SQL语句中,并且由SQL引擎解析成SQL代码,影响原SQL语句的逻辑,从而形成注入漏洞。存在数据泄露、数据丢失等风险。

同样,文件包含漏洞、命令执行漏洞、代码执行漏洞的原理也类似,也可以看作代码注入漏洞。

一、SQL注入漏洞

1.定义:

SQL注入(SQL injection)是因为程序中未能够正确对用户的输入执行检查,将用户输入以拼接的方式带入SQL语句中,导致了SQL注入的产生。攻击者可以通过SQL注入可直接窃取数据库信息,造成信息泄露,甚至获取web应用程序的权限。

所以SQL注入在多年的OWASP(开放式Web应用程序安全项目) top 10中。

SQL漏洞出现的常见位置(登录注册功能、搜索框、文章渲染、前后台)

造成SQL注入漏洞的分类:

JDBC拼接不当造成SQL注入:

JDBC有两种方法执行SQL语句,分别为PrepareStatement 和Statement。这两种方法区别在于PrepareStatement会对SQL语句进行预编译,而Statement方法在每次执行时都需要编译,会增大系统开销,理论上PrepareStatement的效率和安全性会比Statement要好。但并不意味着使用PrepareStatement就绝对安全,不会产生SQL注入。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值