代码审计必备知识点:
1、代码审计开始前准备:
环境搭建使用,工具插件安装使用,掌握各种漏洞原理及利用,代码开发类知识点。
2、代码审计前信息收集:
审计目标的程序名,版本,当前环境(系统,中间件,脚本语言等信息),各种插件等。
3、代码审计挖掘漏洞根本:
可控变量及特定函数,不存在过滤或过滤不严谨可以绕过导致的安全漏洞。
4、代码审计展开计划:
审计项目漏洞原理->审计思路->完整源码->应用框架->验证并利用漏洞。
代码审计两种方法:
功能点或关键字分析可能存在的漏洞
-抓包或搜索关键字找到代码出处及对应文件。
-追踪过滤或接收的数据函数,寻找触发此函数或代码的地方进行触发测试。
-常规或部分MVC模型源码可以采用关键字的搜索挖掘思路。
-框架 MVC 墨香源码一般会采用功能点分析抓包追踪挖掘思路。
1.搜索关键字找敏感函数
2.根据目标功能点判断可能存在的漏洞
案例:CNVD-悟空CRM9.0(JAVA版)-Fastjson组件
1.根据cnvd公开的漏洞信息得知悟空CRM9.0存在命令执行漏洞。
2.下载悟空CRM9.0源码:https://github.com/72wukong/72crm-9.0-JAVA 。将源码导入到IntelliJ IDEA ,部署好环境,启动服务器。
3.进入IntelliJ IDEA,第一步就是打开pom.xml文件,查看项目引用了哪些组件。
当将鼠标移动到fastjson组件时提示使用的1.2.54版本存在漏洞。
4.搜索fastjson组件产生过的历史漏洞,找到对应版本的漏洞,查看漏洞利用信息。
5.知道产生的漏洞之后还需要知道fastjson在源码中是怎么使用的。
搜索后得知:使用fastjson时最常用的方法就是parseobject()。所以就可以在源码中搜索 parseobject 确认源码中使用fastjson的位置
6.全局搜索queryTaskByWorkId方法,看是谁调用了,路由地址是多少。
7.通过跟踪代码得知路由地址为:work/queryTaskByWorkId 需要以post方式传递json参数,
数据类型为:Content-Type:application/json;charset=UTF-8
8.访问路由地址抓包修改。配合dnslog测试是否成功执行命令——传递的json数据:{"@type":"java.net.Inet4Address","val":"dnslog地址"}
9.dnslog成功接收到请求信息,漏洞存在。