代码审计——SQL注入详解

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 代码审计——SQL注入详解

01 漏洞描述

当应用程序将用户输入的内容,拼接到SQL语句中,一起提交给数据库执行时,就会产生SQL注入威胁。攻击者通过控制部分SQL语句,可以查询数据库中任何需要的数据,利用数据库的一些特性,甚至可以直接获取数据库服务器的系统权限。

简单来说就是用户输入的内容拼接到SQL语句中,当当前数据库权限为低权限时可以进行查数据,如果时高权限就可以根据数据库特点写文件、执行命令获取数据库服务器权限等。

image.png

02 审计要点

SQL注入漏洞发生的根本原因是"用户可控的"、”未经净化“的数据直接拼接至SQL语句中进行执行。“用户可控数据”可能来源于http请求、数据库、Http Header或cookie等。

当判断代码中是否存在SQL注入漏洞时,可从以下4点进行判断:

1、参数是否用户可控?如参数的来源是来自于用户输入的http请求,某功能点为检索功能,检索的关键字需要用户自行输入等。

2、是否使用了预编译?预编译是指在将数据传入SQL语句前明确指定传输数据的类型,以执行必要的转换。

在Java中预编译的调用方式为prepareStatement。在mybatis框架中,使用#{}进行预编译,在ibatis框架中使用#param#进行预编译。

3、是否存在SQL语句拼接?尤其注意某些特殊的查询难免用到SQL语句拼接,遇到这种情况,就需要检查拼接是否有可能导致注入。

4、是否存在全局参数过滤器?检查过滤器的配置,是否所有的SQL查询请求都经过过滤器处理,过滤器的过滤规则是否符合安全要求?

03 漏洞特征

SQL注入产生的根本原因就是将“未经净化”的数据“拼接”进入SQL语句中,然后提交进入数据库获得执行结果。

若参数可控,那么就可确定漏洞的存在,若参数不可控,那么拼接参数的SQL语句编写方式也会存在风险,属于不规范的编码,可进行风险提示。

Java

如下代码是根据用户名查询用户收支情况的一条数据库查询语句,存在SQL注入安全风险,其中user_name参数来自未经任何处理的HTTP请求:

String query = "SELECT account_balance FROM user_data WHERE user_name = ‘"
     + request.getParameter("customerName")+"’"; 
try {
   
   
    Statement statement = connection.createStatement();
    ResultSet results = statement.executeQuery( query );
}

攻击者通过控制http请求中的customerName参数值来对Web服务器进行SQL注入攻击。

Java(jdbc)

HttpServletRequest request, HttpServletResponse response) {
   
   
JdbcConnection conn = new JdbcConnection();
final String sql = "select * from product where pname like '%"
        + request.getParameter("pname") + "%'";
conn.execqueryResultSet(sql);

Java(ibatis)

<select id="unsafe" resultMap="myResultMap">
select * from table where name like '%$value$%'
</select> 
UnSafeBean b = (UnSafeBean)sqlMap.queryForObject("value", request.getParameter("name"));

PHP

$sql = "select * from product where pname like '%"
        .$_REQUEST["pname"] . "%'";
mysqli_query({
   
   mathJaxContainer[1]}sql);

04 漏洞案例

image.png

在代码中搜索“select”或“from”或者“where”等字符,搜索出所有的与数据库操作相关的代码,查看是否存在拼接参数的情况。

image.png


搜索“from",分析SQL语句,对于拼凑SQL,疑似SQL注入的地方提高警惕。

image.png


查找相应类的相应方法调用,确定传入的id参数未经转义或任何过滤处理,可确定此处存在SQL注入。搭建环境,爆破用户名成功验证SQL注入漏洞真实存在,如下图所示:

image.png


05 修复方案

SQL注入产生的根本原因就是将“未经净化”的数据“拼接”进入SQL语句中,然后提交进入数据库获得执行结果。修复可以从以下几个方面去考虑:

1、对用户输入的特殊字符进行严格过滤,如’、”、<、>、/、*、;、+、-、&、|、(、)、and、or、select、union。

2、使用参数化查询(PreparedStatement),避免将未经过滤的输入直接拼接到SQL查询语句中。

3、Web应用中用于连接数据库的用户与数据库的系统管理员用户的权限有严格的区分(如不能执行drop等),并设置Web应用中用于连接数据库的用户不允许操作其他数据库。

4、设置Web应用中用于连接数据库的用户对Web目录不允许有写权限。

目录
相关文章
|
4天前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
31 5
|
6天前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
25 5
|
5天前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
38 1
|
5天前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
18 1
|
7天前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
19 3
|
14天前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【9月更文挑战第13天】在开发Python Web应用时,安全性至关重要。本文通过问答形式,详细介绍如何防范SQL注入、XSS及CSRF等常见威胁。通过使用参数化查询、HTML转义和CSRF令牌等技术,确保应用安全。附带示例代码,帮助读者从入门到精通Python Web安全。
37 6
|
15天前
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【9月更文挑战第12天】在Web开发中,安全漏洞如同暗礁,尤其对初学者而言,SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)是常见挑战。本文通过实战案例,展示如何利用Python应对这些威胁。首先,通过参数化查询防止SQL注入;其次,借助Jinja2模板引擎自动转义机制抵御XSS攻击;最后,使用Flask-WTF库生成和验证CSRF令牌,确保转账功能安全。掌握这些技巧,助你构建更安全的Web应用。
16 5
|
1月前
|
SQL 安全 API
PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
59 4
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
【7月更文挑战第27天】在 Web 开发中,Python 面临着如 SQL 注入、XSS 和 CSRF 等安全威胁。
60 0
|
2月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
【7月更文挑战第27天】在 Python Web 开发中, 安全至关重要。
50 0