网络安全Java代码审计实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 常见漏洞审计

2.1 SQL注入漏洞

2.1.1 SQL注入漏洞简介

SQL注入攻击是黑客利用SQL注入漏洞对数据库进行攻击的常用手段之一。攻击者通过浏览器或者其他客户端将恶意SQL语句插入到网站参数中,网站应用程序未经过滤,便将恶意SQL语句带入数据库执行。SQL注入过程如图2-1所示。

图2-1 SQL注入过程

SQL注入漏洞可能会造成服务器的数据库信息泄露、数据被窃取、网页被篡改,甚至可能会造成网站被挂马、服务器被远程控制、被安装后门等。

SQL注入的分类较多,一般可笼统地分为数字型注入与字符串型注入两类;当然,也可以更加详细地分为联合查找型注入、报错注入、时间盲注、布尔盲注等。更加详细的分类,读者可自行参考《SQL注入攻击与防御(第2版)》一书。本章将以最简单的联合查找为案例进行具体讲解。

造成SQL注入一般需要满足以下两个条件:

(1)输入用户可控。

(2)直接或间接拼入SQL语句执行。

对于SQL注入漏洞审计,常见的方法是,根据SELECT、UPDATE等SQL关键字或是通过执行SQL语句定位到存在SQL语句的程序片段,随后通过查看SQL语句中是否存在变量的引用并跟踪变量是否可控。因SQL注入漏洞特征性较强,在实际的审计过程中我们往往可以通过一些自动化审计工具快速地发现这些可能存在安全问题的代码片段。如使用奇安信代码卫士、Fortify等自动化工具。

Java语言本身是一种强类型语言,因此在寻找SQL注入漏洞的过程中,可以首先找到所有包含SQL语句的点,随后观察传参类型是否是String类型,只有当传参类型是String类型时我们才可能进行SQL注入。