代码审计必备知识点:
1、代码审计开始前准备:
环境搭建使用,工具插件安装使用,掌握各种漏洞原理及利用,代码开发类知识点。
2、代码审计前信息收集:
审计目标的程序名,版本,当前环境(系统,中间件,脚本语言等信息),各种插件等。
3、代码审计挖掘漏洞根本:
可控变量及特定函数,不存在过滤或过滤不严谨可以绕过导致的安全漏洞。
4、代码审计展开计划:
审计项目漏洞原理->审计思路->完整源码->应用框架->验证并利用漏洞。
代码审计两种方法:
1.根据关键字找到敏感函数
2.根据目标功能判断可能存在的漏洞
案例:审计- Bluecms 1.6源码系统存在sql注入漏洞-正则表达式
1.搭建好环境
2.将源码导入到phpstorm代码审计工具中
3.使用正则表达式 全局搜索(Ctrl+Shift+F) sql注入关键字
正则表达式:(update|select|insert|delete|).*?where.*=
4.根据正则表达式搜索到的信息成功找到一处sql查询语句,且语句中有变量可控
5.查看getone函数的声明,发现是用来执行sql语句的。说明这段sql语句会被执行。
6.通关追踪(Ctrl+F)可控变量,发现对其没有进行过滤。说明存在sql注入漏洞
7.网站访问出现漏洞的文件路径并且传递参数,验证漏洞是否可用。测试后发现无回显
8.到getone函数声明处将sql语句输出,看看$ad_id变量是否和代码中表现的一样可控
访问地址,传递参数为1。发现$ad_id变量成功接收了传递的参数值变为了1,变量可控
9.确认了变量确实可控,因为无回显需要使用延时盲注或者布尔盲注,为了不浪费时间直接使用sqlmap进行检测
输入:python sqlmap.py -u 注入点地址 -p 注入点
成功检测出目标数据库信息——漏洞存在!!!
输入:python sqlmap.py -u 注入点地址 -p 注入点 --dbs
成功检测出目标数据库名:
案例:文件对比技术-确认漏洞产生位置
在cnvd等漏洞信息共享平台经常会发布一些某某cms爆出了某某漏洞,但是就是不公开漏洞具体信息。
如下:梦想cms后台存在sql注入漏洞。只爆出了产生漏洞的版本信息,并没有漏洞具体产生位置。
我们就可以使用存在漏洞的版本和更新的版本进行对比,因为更新的目的就是解决之前的问题。
查看cms官网更新情况,可以看到漏洞版本后又更新了一个版本,就可以下载漏洞版本和更新版本进行对比。
使用文件对比工具Beyond_Compare进行对比
工具下载:https://www.beyondcomparepro.com/download
打开工具,选择文件夹对比,拖入两个版本的cms。有颜色标识的就是更新后作出过更改的文件
打开有颜色表示的文件,可以看到更新后修改代码的情况。我们就可以根据代码的修改情况确认漏洞的产生位置。