当前位置: 首页 > news >正文

代码审计(工具Fortify 、Seay审计系统安装及漏洞验证)

源代码审计

代码安全测试简介

       代码安全测试是从安全的角度对代码进行的安全测试评估。(白盒测试;可看到源代码)

       结合丰富的安全知识、编程经验、测试技术,利用静态分析和人工审核的方法寻找代码在架构和编码上的安全缺陷,在代码形成软件产品前将业务软件的安全风险降到最低。

注:代码审计尤其注意反序列化漏洞

代码安全测试方法

       代码审核采用人工审核和静态分析工具辅助的方式进行。

       人工审核:既能解决内部问题也能解决外部问题。这也是目前最有效率的解决方案,并且在理论上手工代码审核是非常有效的,但人工审核的效率不高,所以我们会采用自动化分析工具辅助人工的方式来提高审核效率。 

       静态分析工具:通过一组全面规则、测试机制和方针在软件开发过程、测试中发现软件的安全缺陷。 (如:HP Fortify)

代码审计的通用思路

1、通读全文代码,从功能函数代码开始阅读,例如include文件夹下的common_fun.php,或者有类似关键字的文件。

2、看配置文件:带有config关键字的文件,找到mysql.class.php文件的connect()函数,查看在数据库连接时是否出现漏洞。(数据库交互

3、继续跟读首页文件index.php,了解程序运作时调用了哪些函数和文件 以index.php文件作为标线,一层一层去扩展阅读所包含的文件,了解其功能,之后进入其功能文件夹的首页文件,进行扩展阅读。

注:快速挖源代码漏洞,直接搜索容易产生漏洞的相关函数

漏洞产生的原因

1、变量控制不严(一切输入都是有害)。

2、变量到达有利用价值的函数(一切进入函数的变量是有害的),漏洞的利用效果取决于最终函数的功能。

漏洞挖掘流程分析

sql注入关键字: select、insert、update、$_GET $_POST、$_REQUEST

上传漏洞关键字: $_FILES 、move_uploaded_file

执行漏洞关键字: shell_exec、exec、passthru system、popen

包含漏洞关键字: include、include_once、require、require_once

变量覆盖关键字: $$

跨站漏洞关键字: echo、print、print_r、var_dump、var_exprot

密码硬编码关键字:明文密码出现在代码中,如 "password""123456"

权限与认证绕过关键字:

直接比较用户输入与固定值,如 if ($_SESSION['user'] == 'admin')

可使用【xsearch_CHS.exe工具】进行快速搜索含关键字的文件: 

 

  


工具Fortify 漏洞审计分析

      根据工具扫描结果分析风险漏洞成因,手工跟踪相关函数及变量,测试漏洞是否可利用、排除误报可能。通过工具修复建议,手工修复相关漏洞

 网站部署

打开可视化数据库软件【Navicat for MySQL 】

数据库名: phpweb

宇符集:utf8 -- UTF-8 Unicode

排序规则:utf8_general_ci

phpweb靶场环境放到phpstudy根目录下; 打开phpstudy软件选择5.2.17版本启动;

 访问打开phpweb破解版,进行系统安装:

http://10.0.0.101:90/phpweb/base/install/index2.php
直接跳过了index.php登陆页面

 

访问ppweb主页: 

http://10.0.0.101:90/phpweb/

FORTIFY安装:

软件下载及安装详见【fortify新版安装步骤.pdf】文件

 网站扫描过程:

点击【Advanced Scan】高级扫描:

 选择要扫描的项目:(phpweb)

选择文件输出位置【Output file】,可默认:

点击配置【Configure Rulepacks..】,选择扫描项目涉及到的语言,可默认:

开始扫描【scan 】:

扫描完成:

选择漏洞:

参数给变量未经过直接带入输出

$groupname=$_POST["groupname"];
<input type="text" name="groupname" size="50" value="<?php echo $groupname; ?>" class="input" />

 

 漏洞验证:

找到文件所在位置进行访问:

http://10.0.0.101:90/phpweb/advs/admin/advs_duilian_modi.php

填写信息提交--bp抓包--请求主体test后输入以下xss恶意代码与数据库交互进行弹窗:

'"><script>alert(123)</script>

 

成功弹框

存在xss漏洞; 并获取到了物理路径及可能存在sql注入:


 Seay源代码审计系统使用

Seay是一套开源代码审计系统,使用C# 编写,需要.NET2.0以上版本环境才能运行

 网站部署

打开可视化数据库软件【Navicat for MySQL 】

 

数据库名: xhcms

宇符集:utf8 -- UTF-8 Unicode

排序规则:utf8_general_ci

 

xhcms靶场环境放到phpstudy根目录下; 打开phpstudy软件选择5.2.17版本启动;

 访问xhcms网站进行系统安装:

http://10.0.0.101:90/xhcms/install/

成功安装: 

 访问xhcms主页: 

http://10.0.0.101:90/xhcms/

 

Seay软件安装:

软件:详见附件【Seay PHP代码审计工具2.1公测版.rar】

运行:解压【Seay PHP代码审计工具2.1公测版.rar】,点击【Seay PHP代码审计工具2.1公测版.exe】运行软件:

 网站扫描过程:

点击【Seay】浏览:

选择项目:

扫面设置--函数管理:

可根据情况添加函数:

 点击综合扫描:

扫描完成:

 选择漏洞:

4 $file=addslashes($_GET['r']); //接收文件名   //可输入变量$_GET 可能存在安全威胁
5 $action=$file==''?'index':$file; //判断为空或者等于index   //file函数可能存在任意文件读取漏洞
6 include('files/'.$action.'.php'); //载入相应文件   //file函数可能存在任意文件读取漏洞

 漏洞验证:

http://10.0.0.101:90/xhcms/index.php
  • 代码分析

参数r只有一个addslashes函数过滤,但对于文件包含来说并没有什么用。

尝试利用

因为包含的是files目录下的文件,所以在files下新建shell.php,内容为

<?php
phpinfo();
?>

 尝试包含漏洞:

http://10.0.0.101:90/xhcms/index.php?r=shell

成功访问,存在漏洞: 

也可以用../跳转:

因为包含的是files目录下的文件,所以在files上级目录新建123.php;内容为:

<?php
phpinfo();
?>

尝试../访问上级目录文件内容:123.php

http://10.0.0.101:90/xhcms/index.php?r=../123

成功访问,存在漏洞: 


工具局限性

1、工具本身存在一定量的误报或者漏报。

2、扫描结果需要大量人工确定甄别。

3、 如用多种语言开发的软件,则需单独分析。

4、使用工具缺乏规范化的编码规范。

5、不能自动收集常见的代码安全问题。


声明:

  • 此文章只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试留言私信,如有侵权请联系小编处理。

相关文章:

  • 记一次服务器数据库被攻击勒索
  • 【Linux 网络】网络基础(三)(其他重要协议或技术:DNS、ICMP、NAT)
  • 数字经济讲师培训师教授唐兴通谈新质生产力数字化转型高质量发展AI人工智能大模型大数据经信委大数据管理局
  • Chrome谷歌浏览器如何打开不安全页面的禁止权限?
  • Keil 5恢复默认布局,左边状态栏
  • 基于java的CRM客户关系管理系统(二)
  • .NET 快速重构概要1
  • FPGA高端项目:FPGA解码MIPI视频+图像缩放+视频拼接,基于MIPI CSI-2 RX Subsystem架构实现,提供4套工程源码和技术支持
  • element-plus 使el-dropdown只显示当前选择节点
  • 【ARM-Linux篇】u-boot编译
  • 关于IO口的自定义通信协议设计
  • org.apache.kafka.clients.consumer.CommitFailedException
  • MySQL学习——查询示例(三)
  • 【SpringBoot】怎么在一个大的SpringBoot项目中创建多个小的SpringBoot项目,从而形成子父依赖
  • LAMP集群分布式实验报告
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 2019年如何成为全栈工程师?
  • Apache的80端口被占用以及访问时报错403
  • es6--symbol
  • IDEA常用插件整理
  • js 实现textarea输入字数提示
  • passportjs 源码分析
  • ReactNative开发常用的三方模块
  • Redis字符串类型内部编码剖析
  • Spring声明式事务管理之一:五大属性分析
  • Swift 中的尾递归和蹦床
  • webpack4 一点通
  • 机器学习学习笔记一
  • 记录:CentOS7.2配置LNMP环境记录
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 力扣(LeetCode)357
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 那些被忽略的 JavaScript 数组方法细节
  • 通信类
  • 王永庆:技术创新改变教育未来
  • 一个完整Java Web项目背后的密码
  • 移动端解决方案学习记录
  • Android开发者必备:推荐一款助力开发的开源APP
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #laravel 通过手动安装依赖PHPExcel#
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #QT(TCP网络编程-服务端)
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)STL算法之遍历容器
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十六)串口UART
  • (转)VC++中ondraw在什么时候调用的
  • ./configure,make,make install的作用
  • .cfg\.dat\.mak(持续补充)
  • .gitignore文件使用
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net操作Excel出错解决