从1开始的Java代码审计·第三弹·SQL注入

前言

SQL注入是什么,有什么用,就不多介绍了。总结下漏洞的原因,主要是由于开发者对用户的输入没有做好过滤,直接将用户的输入带入到 SQL语句中,导致恶意用户可以控制服务器执行的SQL语句。

在 Java 中,操作SQL的主要有以下几种方式:

  1. java.sql.Statement

  2. java.sql.PrepareStatement

  3. 使用第三方 ORM 框架 —— MyBatisHibernate

下面我们来分析以上几种执行SQL的方式。

从1开始的Java代码审计·第一弹·基础篇(上)

基本环境

JDK

目前,JDK已经出到11了,JDK每个版本都会有些新特性出来。很多情况下JDK并不向下兼容,导致一些软件在较新的JDK中无法正常运行,所以推荐用现在比较主流的JDK8。而且有些漏洞需要在低版本的JDK上才能复现出来,比如反序列化用到的JNDI Bean Property类型的Gadget,需要在小于JDK8_113的版本下才可以利用,所以在安装的时候建议再安装一个低版本的JDK。JDK安装时自带的控制面板程序,可以帮助我们很方便的切换版本。

从1开始的Java代码审计·序

小组经常有小伙伴问我Java该怎么审计,其实我也挺头大的。因为我觉得审Java的代码和审PHP的代码,相差不大。WEB 漏洞就那些,只是换了门语言实现而已,只要漏洞原理知道了,审起来是很容易的。

很多学安全的同学,应该是从PHP入门的。PHP作为一门脚本语言,跨平台、语法简单、易上手、开源框架多、用户量大。但是,PHP语言本身的特性,它在后期的拓展和维护困难,而且支持所有漏洞(抖个机灵)。很多对系统稳定性、安全性要求较高的厂商不太会去选择PHP,而是Java或者别的语言。

Java是纯正的面向对象的语言,适合团队协作开发,重构、维护相对轻松,语言生态好,且在高性能、高并发、分布式的场景吊打某语言。(虽然PHP也是支持面向对象的写法,不过身边真的在用面向对象的方法写PHP的同学真的很少,可能是不太理解面向对象的概念,也可能是因为写起来代码太长了?)

目前,网上关于 WEB 代码审计的文章很多都是PHP的,和Java相关的很少,而且质量一般。所以我打算做一个Java代码审计的系列,分享Java代码审计相关的小姿势。

在这个系列里,我假设每个读者都对 Java 和 WEB 安全方面的知识都有一定的了解,所以可能不会对漏洞的原理做很深的分析。

如果你觉得看起来有些累,或者对某个漏洞不理解,建议先去找些相关资料学习下。

|