代码审计-Java项目审计-SQL注入漏洞

admin 2024年5月17日17:57:57评论20 views字数 2376阅读7分55秒阅读模式

代码审计必备知识点:

1代码审计开始前准备:

环境搭建使用,工具插件安装使用,掌握各种漏洞原理及利用,代码开发类知识点。

2、代码审计前信息收集:

审计目标的程序名,版本,当前环境(系统,中间件,脚本语言等信息),各种插件等。

3、代码审计挖掘漏洞根本:

可控变量及特定函数,不存在过滤或过滤不严谨可以绕过导致的安全漏洞。

4、代码审计展开计划:

审计项目漏洞原理->审计思路->完整源码->应用框架->验证并利用漏洞。

代码审计两种方法

功能点或关键字分析可能存在漏洞

-抓包或搜索关键字找到代码出处及对应文件

-追踪过滤或接收的数据函数,寻找触发此函数或代码的地方进行触发测试。

-常规或部分MVC模型源码可以采用关键字的搜索挖掘思路。

-框架MVC 墨香源码一般会采用功能点分析抓包追踪挖掘思路。

1.搜索关键字找敏感函数

代码审计-Java项目审计-SQL注入漏洞

2.根据目标功能点判断可能存在的漏洞

代码审计-Java项目审计-SQL注入漏洞

常见漏洞关键字:

SQL注入:

select insert update mysql_query mysqli等

文件上传:

$_FILES,type="file",上传,move_uploaded_file()等 

XSS跨站:

print print_r echo sprintf die var_dump var_export等

文件包含:

include include_once require require_once等

代码执行:

evalassert preg_replace call_user_func call_user_func_array等

命令执行:

systemexec shell_exec `` passthru pcntl_exec popen proc_open等

变量覆盖:

extract()parse_str() import_request_variables() $$ 等

反序列化:

serialize()unserialize() __construct__destruct等

文件读取:

fopen file_get_contentsfreadfgetsfgetssfilefpassthruparse_ini_filereadfile等

文件删除:

unlink()remove()等

文件下载:

download()download_file()

通用关键字:

$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER等

在Java中SQL语句写法一般有以下几种方式:

.JDBC 注入分析

安全写法: "select * from user where id = ?";

不安全写法: "select * from user where id ="+req.getParameter("id");

.Mybatis 注入分析

#号会对语句进行预编译

${ } 只是进行string 替换,动态解析SQL的时候会进行变量替换

安全写法:select *  from user where name = #{name}

不安全写法:select *  from user where name = ${name}            

.Hibernate 注入分析

安全写法:参数绑定预编译

Query<User>.query=session.createNativeQuery("select * from user  where name=:name");

query.setParameter("name",parameter) ;

不安全写法:

Query<User>.query=session.createNativeQuery("select * from user  where name="+req.getParameter("id"));

java项目sql注入产生原理总结:

1、预编译使用不当:

sql="select * from user where id = ?";

sql+="and username ="+req.getParameter("username");

2、直接动态拼接:

 "select * from user where id ="+req.getParameter("id");

3、order by&like&in查询:

由于这三种关键字不能预编译(预编译失效),所以需要过滤器或自定义过滤

防御:

能预编译的情况都做预编译,一些特殊无法做预编译的,则过滤用户可控的参数。

案例:Javaweb-代码审计SQL注入-INXEDU在线网校

环境:MYSQL:5.XTomCat:8.XJDK:1.8IntelliJ IDEA

1.将源码导入到IntelliJ IDEA ,部署好环境,启动服务器

代码审计-Java项目审计-SQL注入漏洞

2.搜索关键字:jdbcmybatis>$hibernate,判断源码使用的是哪种方式写的sql语句。

代码审计-Java项目审计-SQL注入漏洞

3.判断出源码使用的是mybatis方式写sql语句,我们就可以查找如:${} 这样的不安全写法。

可以看到下图的 IN(${value}) 不但使用了$()不安全写法,还使用了in关键字使预编译失效,极大概率会产生SQL注入漏洞。所以要知道是谁调用执行了这条SQL语句。

代码审计-Java项目审计-SQL注入漏洞

4.复制deleteArticleByIds进行全局搜索

代码审计-Java项目审计-SQL注入漏洞

5.成功找到方法,选中——导航——调用层次结构,成功获取完整调用链

代码审计-Java项目审计-SQL注入漏洞

6.分析调用链,获取到路由地址:/admin/article/delete,以post方式为articelId参数传递参数值

代码审计-Java项目审计-SQL注入漏洞

7.访问路由地址并且抓包,将数据包更改为post请求,增加post传参:articelId=1*

代码审计-Java项目审计-SQL注入漏洞

8.将数据包保存为1.txt,使用sqlmap检测sql注入。

cmd执行:python sqlmap.py -r 1.txt --dbs

成功获取数据库信息:

代码审计-Java项目审计-SQL注入漏洞

原文始发于微信公众号(小黑子安全):代码审计-Java项目审计-SQL注入漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月17日17:57:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   代码审计-Java项目审计-SQL注入漏洞https://cn-sec.com/archives/2750242.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息