0基础入门代码审计-3 sql注入

admin 2023年8月28日01:46:44评论62 views字数 913阅读3分2秒阅读模式

0x01 漏洞描述

当应用程序将用户输入的内容,拼接到SQL语句中,一起提交给数据库执行时,就会产生SQL注入威胁。攻击者通过控制部分SQL语句,可以查询数据库中任何需要的数据,利用数据库的一些特性,甚至可以直接获取数据库服务器的系统权限。
简单来说就是用户输入的内容拼接到SQL语句中,当前数据库权限为低权限时可以进行查数据,高权限可以根据数据库特点写文件、执行命令获取数据库服务器权限等。

0x02 审计要点

当判断代码中是否存在SQL注入漏洞时,可从以下4点进行判断:
1、参数是否用户可控?如参数的来源是来自于用户输入的http请求,某功能点为检索功能,检索的关键字需要用户自行输入等。
2、是否使用了预编译?预编译是指在将数据传入SQL语句前明确指定传输数据的类型,以执行必要的转换。
Java中预编译的调用方式为prepareStatement
3、是否存在SQL语句拼接?尤其注意某些特殊的查询难免用到SQL语句拼接,遇到这种情况,就需要检查拼接是否有可能导致注入。
4、是否存在全局参数过滤器?检查过滤器的配置,是否所有的SQL查询请求都经过过滤器处理,过滤器的过滤规则是否符合安全要求

0x03 典型漏洞代码

SQL语句直接进行动态拼接

0基础入门代码审计-3 sql注入

1)设置好驱动器启动,加载数据库驱动

2)进行数据库连接

3)通过request.getParameter("id")获取传入的id

4)通过"SELECT * FROM "IWEBSEC"."user" WHERE "id"="+id进行SQL语句拼接并执行

在上述步骤中和代码中可以发现传入id的参数值是可控的存在SQL注入攻击的风险。

0x04 SQL注入攻击防御

prepareStatementSQL预编译方法,会预处理SQL语句,SQL语句可具有一个或者多个IN参数。IN参数的值在SQL语句预编译时没有被指定,而是为每个IN参数保留了一个?作为占位符。每个?的值必须在该语句执行之前通过适当的方法来提供。

0基础入门代码审计-3 sql注入

具体步骤:
1、注册驱动
2、获取链接
3、实例化prepareStatement对象
4、设置占位符为id变量
5、执行
代码样例:

0基础入门代码审计-3 sql注入

原文始发于微信公众号(反入侵实验室):0基础入门代码审计-3 sql注入

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月28日01:46:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   0基础入门代码审计-3 sql注入https://cn-sec.com/archives/1982757.html

发表评论

匿名网友 填写信息