商业级别Fortify白盒神器介绍与使用分析
什么是fortify它又能干些什么?
答:fottify全名叫:Fortify SCA,是HP的产品,是一个静态的、白盒的软件源代码安全测试工具。
它通过内置的五大主要分析引擎:数据流、语义、结构、控制流、配置流等对应用软件的源代码进行静态的分析,分析的过程中与它特有的软件安全漏洞规则集进行全面地匹配、查找,从而将源代码中存在的安全漏洞扫描出来,并给予整理报告。
它支持扫描多少种语言?
答:FortifySCA支持的21语言,分别是:
1. asp.net
2. VB.Net
3. c#.Net
4. ASP
5. VBscript
6. VS6
7.java
8.JSP
9.javascript
10. HTML
11. XML
12. C/C++
13.PHP
14.T-SQL
15.PL/SQL
16. Action script
17. Object-C (iphone-2012/5)
18. ColdFusion5.0 - 选购
19. python -选购
20. COBOL - 选购
21.SAP-ABAP -选购
他是免费的吗?
答:不是,是收费的。当然网上也没有破解的。貌似他一个月收费10万。
如何使用?
安装fortify之后,打开
界面:
选择高级扫描
他问要不要更新?我就选择No,因为这是我私人的,我是在2015年7月份购买的试用期为1个月。怕更新了就用不了了。如果你购买了可以选择YES。
选择之后出现如下界面
浏览意思是:扫描之后保存的结果保存在哪个路径。
然后点击下一步。
参数说明:
enable clean :把上一次的扫描结果清楚,除非换一个build ID,不然中间文件可能对下一次扫描产生影响。
enable translation: 转换,把源码代码转换成nst文件
-64: 是扫描64位的模式,sca默认扫描是32位模式。
-Xmx4000m:4000M大概是4G,制定内存数-Xmx4G :也可以用G定义这个参数建议加
-encoding: 定制编码,UTF-8比较全,工具解析代码的时候指定字符集转换的比较好,建议加,如果中文注释不加会是乱码。
-diable-source-:rendering:不加载与漏洞无关的代码到审计平台上,不建议加,这样代码显示不全。
然后点击下一步
它说:这是一个J2EE Web应用
选择No(因为你扫的是PHP)
然后scan(开始扫描)
Always run in background 意思: 总是在后台运行
run in background 意思:后台运行
cancel 意思 :取消
Details 意思:细节
扫完之后:
none 代表其他 1个 A1 注入 7个 A3 xss 37个 A4 不安全的直接对象引用 35个 A6 敏感数据暴露 4个 A10 未验证的重定向和转发 2个
如果发现是英文的,想改成如下方法中文:
以下是官网提供的分析图:
分析漏洞:
none漏洞:
这是一个可变变量,按照中国人说法简称:“变量覆盖”。
讲一下这个漏洞的原理:
可变变量
$first ="hello";
$hello ="world";
echo $first." ".$$first;
结果是hello world
$$first就是$hello,因为$first的值是hello
---------------------------------但是在foreach 就不一样了-----------------------------------------------------
<?php $a = 'sss'; foreach ($_GET as $key => $value) { //如果在foreach那就不一样了 echo $$key; //将$$区分开 然后$key 等于键 然后开始合并 比如打开http://www.com.com/demo.php?a=值 就变成了$a 因为$key的键是a 所以就变成了$a $$key = $value;//$a = 值 替换变量 } echo '<hr '>'; echo $a; ?>
A1注入漏洞:
发现$c变量是由客户端进行GET请求控制的。
safe_replace函数过滤如下字符:
function safe_replace($string) { $string = str_replace('%20','',$string); $string = str_replace('%27','',$string); $string = str_replace('%2527','',$string); $string = str_replace('*','',$string); $string = str_replace('"','"',$string); $string = str_replace("'",'',$string); $string = str_replace('"','',$string); $string = str_replace(';','',$string); $string = str_replace('<','<',$string); $string = str_replace('>','>',$string); $string = str_replace("{",'',$string); $string = str_replace('}','',$string); $string = str_replace('\','',$string); return $string; }
include $c.".php"; 但是后面有个.php是拼接的。
但是如果php版本小于5.3.40可以采用空字节也就是%00的二进制视作字符串的结束,按照其他说法的话也就是截断。。。。。
A3 xss 漏洞
$field_sql="update ".DB_PRE."member set {$field_sql} where userid={$last_id}"; $query=$this->mysql->query($field_sql);
写入数据库的时候没有任何限制或者输出的时候没有做任何的过滤就直接输出导致造成了XSS。(我就不一一解释了)
A4 不安全的直接对象引用漏洞
文件上传次数未做策略,可导致攻击。
A6 敏感数据暴露漏洞:
A10 未验证的重定向和转发漏洞:
这里我就不去定位看谁使用这个函数了,懂点PHP的人相信都懂。。
整个过程基本已经结束了,但是有点我想提醒大家,在设置内存的时候如果你不设置内存他会自动帮你设置,比如你的电脑内存是8G他就自动设置为8G然后就会占用你8G内存,然后搞得你电脑卡卡卡卡卡卡卡的。
下次扫之前记得要设置你的内存,如果你电脑是8G内存设置7G就好了,还剩下1G就可以玩4399小小游戏了。~_~
*投稿作者:心东,转自须注明来自FreeBuf黑客与极客(FreeBuf.COM)
- WordPress自定义栏目运用实例V:为加密文章添加密码提示文字
- java基础:所有参数皆是按值参数
- 使用Hystrix提高系统可用性
- Spring Security笔记:解决CsrfFilter与Rest服务Post方式的矛盾
- GitHub新开放项目FoolNLTK:一个便捷的中文处理工具包
- hessian学习
- 制作WordPress侧边栏“博客统计”小工具并集成在主题中的方法
- Struts2、Spring MVC4 框架下的ajax统一异常处理
- 前11月网游收入1341亿元同比增超两成 你贡献了多少?
- struts2: config-browser-plugin 与 convention-plugin 学习
- 千万级规模高性能、高并发的网络架构经验分享
- UE4新手之编程指南
- redis 学习笔记(5)-Spring与Jedis的集成
- Linq to SQL 查询Tips
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux持续集成自动化安装Maven的方法
- 在CentOS上安装搭建PHP+Apache+Mysql的服务器环境
- Centos7.4服务器安装apache及安装过程出现的问题解决方法
- ubuntu系统修改时区和时间的方法
- CentOS7 LNMP+phpmyadmin环境搭建 第一篇虚拟机及centos7安装
- flutter 输入框组件TextField的实现代码
- Mac通过不同终端SSH连接远程服务器的讲解
- Linux关于透明大页的使用与禁用介绍
- linux中使用grep命令详解
- linux下使用cmake编译安装mysql的详细教程
- Linux CentOS 7.0中java安装与配置环境变量的步骤详解
- Linux下进程数量的限制pid_max的配置方法
- linux 进程数最大值修改方法
- Linux通过设备号找到设备的方法
- linux环境下安装 openOffice 并启动服务 的方法