0x01 等保测评项
GBT 22239-2019《信息安全技术 网络安全等级保护基本要求》中,8.1.4.4安全计算环境—入侵防范项中要求包括:
a)应遵循最小安装的原则,仅安装需要的组件和应用程序;
b)应关闭不需要的系统服务、默认共享和高危端口;
c)应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;
d)应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求;
e)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞;
f)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。
SQL注入测试对应访问控制项中要求d),所以安全控制点为 入侵防范d 。
GBT 28448-2019《信息安全技术 网络安全等级保护测评要求》中,测评单元( L3-CES1-20) ,该项测评单元包括以下要求:
a)测评指标:应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求。
b)测评对象:业务应用系统、中间件和系统管理软件及系统设计文档等。
c)测评实施包括以下内容:
1)应核查系统设计文档的内容是否包括数据有效性检验功能的内容或者模块;
2)应测试验证是否对人机接口或通信接口输入的内容进行有效性检验。
d)单元判定:如果1)和2)均为肯定,则符合本测评单元指标要求,否则不符合或部分符合本测评单元指标要求。
SQL注入测试属于测评单元(L3-CES1-20)中测评实施第2项,故测评单元为 L3-CES1-20.2 。
0x02 测试内容
通过手工或工具的方式,检测系统是否存在SQL注入漏洞,是否能通过SQL注入查询相关敏感信息或执行命令、获取权限等操作。
0x03 漏洞原理
WEB 应用程序对用户输入的数据没有进行合法性判断,前端传入后端的参数是攻击者可控的,并且能将参数带入数据库中查询,攻击者就可以通过构造不同的 SQL 语句实现对数据库的任意操作。
SQL注入漏洞的产生需要满足两个条件:
-
参数用户可控:前端传给后端的参数内容是用户可以控制的;
-
参数带入数据库查询:传入的参数拼接到SQL语句中,且带入数据库查询;
在实际环境中,凡是满足上述两个条件的参数皆可能存在SQL注入漏洞,因此开发者需秉持“外部参数皆不可信的原则”进行应用程序的开发。
0x04 代码示例
上述代码,程序获取GET参数id,对用户传过来的id值没有进行过滤,直接拼接到SQL语句中,在数据库中查询id对应的内容,并将这一条查询结果中的user和password 输出到页面。就可以进行常规的union注入。
0x05 限制绕过
WEB应用程序通常会使用输入过滤器,设计这些过滤器的目的是防御包括SQL注入内的常见攻击。这些过滤器可能位于应用的代码中(自定义输入验证方式),也可能在应用外部实现,形式为WEB应用防火墙(WAF)或入侵防御系统(IPS)。
我们还有可能遇到尝试将输入修改为安全内容的过滤器,这些过滤器使用的方法包括编码、消除有问题的字符或者从输入中剥去带有攻击性的项并按正常方式处理余下内容