1.代码审计系统 Swallow 开发回顾
2.宸极实验室——『代码审计』从零开始的源码 Yii2 框架学习之旅
3.github是什么? gitlab和github的区别是什么?
4.小程序反编译
5.ZZZPHP1.61 代码审计-从SQL注入到Getshell
6.小白如何轻松拿下CNVD原创漏洞证书
代码审计系统 Swallow 开发回顾
在甲方安全建设领域,SDL(Security Development Lifecycle)是审计一个核心话题,其中代码审计工作尤为重要。源码我从早期使用编辑器自带的审计查找功能,到后来转向Fortify等工具,源码再到对Fortify扫描速度的审计保障系统源码不满,最终决定将Fortify集成到自家业务系统中,源码以提高审计效率。审计
随着安全行业的源码迅速发展,自定义扫描规则的审计组件安全产品,如Semgrep和GitHub的源码CodeQL等层出不穷,工具的审计多样性为代码审计提供了更多选择。然而,源码单一工具的审计使用模式效率并不高。因此,源码我着手开发了一个代码聚合审计系统Swallow,旨在实现代码自动下载、多工具扫描,并整合结果。
Swallow系统开发遵循以下整体思路:用户只需提供代码地址,系统便自动下载代码,调用多种代码审计工具进行扫描,并将结果存储于系统中,实现高效审计流程。
底层实现包括了污点跟踪、安全规则检索、组件依赖漏洞检测、WebShell检测四大功能。污点跟踪方面,我选择了Fortify,以满足对程序参数接收位置、参数执行路径的追踪需求。规则检索部分,Semgrep因其易于自定义规则而被选中。组件漏洞检测则由墨菲提供,WebShell检测工具则来自河马。
数据交互逻辑简化通过蜻蜓平台的编排系统实现,无需过多编写数据交互代码,只需关注每个节点的状态。蜻蜓安全工作台中的数据库组件支持增删改查操作。数据库设计上,我采用了一种直观且高效的C源码检查方法,首先创建了Git仓库地址表(git_add)和项目配置表(project_conf),之后针对四个工具的数据存储需求,设计了五张表以确保数据检索效率。
前端界面采用Bootstrap5结合ThinkPHP6开发,简洁高效,无需复杂的框架集成。添加仓库功能允许用户一次性添加多个仓库地址,操作直观且便捷。
Swallow系统通过集成多种代码审计工具,实现了自动化代码审计流程,显著提高了审计效率和覆盖范围,为甲方安全建设提供了有力支持。
宸极实验室——『代码审计』从零开始的 Yii2 框架学习之旅
Yii2 框架反序列化漏洞新手学习记录
前言:Yii2 是一个高性能、基于组件的开源 PHP 框架,适用于快速开发现代 Web 应用程序。近年来,该框架的花样反序列化漏洞在 CTF 比赛和攻防演练中频繁出现。
年9月日,Yii Framework 2 发布了更新,揭示了一个反序列化远程命令执行漏洞,编号为 CVE--。本文将带你从这里开始,学习如何探索这个漏洞。
前期准备:了解 PHP 基础、反序列化原理、类与对象、命名空间概念。可以通过 GitHub 下载影响版本的代码包并进行测试环境搭建。安装步骤包括下载代码包、解压、配置 cookieValidationKey 等。使用 Composer 可以更便捷地安装。
搭建成功后,添加反序列化漏洞入口。通过访问特定路径,进行测试。
漏洞分析及复现:从官方更新日志找到线索,发现漏洞影响文件是 yii2/db/BatchQueryResult.php。通过 GitHub commit 对比分析,发现该版本添加了禁止反序列化的魔术方法 __wakeup()。分析起点为该类,scl源码pid列出了常见魔术方法,并开始正式分析。
打开文件,删除代码和注释后,发现反序列化时触发 reset 方法,关闭_dataReader 对象。这可以分为两种情况:触发 __call() 魔术方法或调用 close 方法。通过调用其他危险函数,形成 POP 链。
查找含有 __call() 魔术方法的类,发现组件类不适用,StreamDecoratorTrait 类无法实例化,但 ValidGenerator 类中存在潜在危险。测试发现存在警告信息,进一步分析,发现可通过执行类中的方法实现控制。最终筛选出 Generator 类作为深入分析对象。
通过构造 POP 链,成功执行 phpinfo() 函数。虽然只能执行无参数函数,但通过查找 Yii2 自身代码中可代码执行的点,结合 call_user_func 函数,构建了新的 POP 链,实现命令执行。
总结:完整复现 MVC 框架的反序列化漏洞,从头开始分析,学习了许多以前不注意的细节。本文仅供安全研究与讨论,严禁用于非法用途。
github是什么? gitlab和github的区别是什么?
gitlab和github的区别 GitLab和GitHub都是基于Git的代码管理工具,具有版本控制和项目管理功能,但是它们在某些方面存在一些区别。 1. 私有仓库: * GitLab:GitLab允许用户在其平台上创建私有仓库,这意味着用户可以创建并使用私有项目,这对于需要保护代码的项目非常有用。 * GitHub:GitHub过去不提供免费私有仓库,但自年起,它改变了政策,现在允许用户在GitHub上创建三个私有仓库,但超过这个数量则需要付费。 2. 社区功能: * GitLab:GitLab不仅是phpcms源码修改一个代码托管平台,还是一个完整的软件开发团队协作工具,它提供了更强大的社区功能,例如任务板、问题跟踪、Wiki、CI/CD等等。 * GitHub:GitHub主要是一个代码托管和协作工具,它的社区功能相对简单,主要包括问题跟踪、Wiki、里程碑等。 3. 控制权: * GitLab:GitLab将更多的控制权交给用户。例如,GitLab允许用户自行决定项目成员的访问权限、合并请求的接受方式等。 * GitHub:GitHub通常会限制用户的控制权,例如合并请求只能由项目维护者审核。 4. 功能与集成: * GitLab:GitLab提供了更多的特色功能,例如免费设置仓库权限、允许用户选择分享一个project的部分代码、允许用户设置project的获取权限、可以设置获取到团队整体的改进进度等。此外,GitLab还与Jira、Trello等工具深度集成。 * GitHub:GitHub提供的功能相对较少,例如它不提供免费设置仓库权限的功能。然而,GitHub与许多流行的开发工具集成,例如Trello、CircleCI等。 5. 安全性: * GitLab:GitLab具有更高的安全性,它支持更严格的访问控制和更强大的审计功能。GitLab还支持使用SSH进行数据传输,以提供更安全的通信。 * GitHub:GitHub在安全性方面也表现出色,但它通常不提供像GitLab那样严格的访问控制和审计功能。 6. 价格: * GitLab:GitLab提供免费版、开源版、社区版和企业版等多种版本,价格策略相对灵活。大内群英源码 * GitHub:GitHub主要提供面向个人和组织的付费计划,价格相对较高。然而,对于学生和开源项目,GitHub提供教育优惠和免费开源计划。 7. 使用范围: * GitLab:GitLab可以作为软件开发的完整解决方案,既可以托管大型企业的私有代码库,也可以托管小型团队的开源项目。 * GitHub:GitHub更常被用于开源项目的托管,但它也支持私有项目。 总结来说,GitLab和GitHub都是强大的代码管理工具,具有许多共同的功能。然而,它们在私有仓库的支持、社区功能、控制权、功能与集成、安全性以及价格方面存在一些差异。根据项目的具体需求和团队的工作流程,可以选择最适合的代码管理工具。小程序反编译
要深入理解小程序反编译过程,我们首先需要准备环境。
为此,访问GitHub并下载两个必要的工具。
确保安装环境并配置完毕。
接着,找到小程序的默认存储位置,可以尝试清空C:\Users\xx\Documents\WeChat Files\Applet目录,以简化查找。
通常,小程序文件会以wx开头的字符串命名,打开后将看到对应文件。
创建wxpack目录,并将解密工具用于解密操作,指定小程序存放路径。
接下来,利用wxappUnpacker进行反编译。在wxappUnpacker目录中打开CMD,安装模块。可能会遇到错误,建议通过百度寻求解决方案。
执行命令后,使用微信开发工具进行查看。根据所需版本,完成安装。
打开工具后,导入之前解包的目录。
若想进一步探索,可整合路径拼接URL,尝试进行目录爆破。
最后一步,审计源码。这一部分将不在此详细说明。
ZZZPHP1. 代码审计-从SQL注入到Getshell
0x 前言
本文将对zzzphp1.进行代码审计,着重探讨SQL注入、任意文件删除、任意文件读取、远程执行等漏洞。审计过程融合了AWVS等工具和代码调试方法,旨在深入分析并复现这些常见漏洞。
0x SQL注入漏洞(获取管理员密码)漏洞复现
通过构造特定payload,成功获取到管理员密码,证实存在SQL注入漏洞。
0x 任意文件读取漏洞(获取敏感信息)漏洞复现
无需登录后台,通过特定payload直接读取敏感信息,揭示后台文件访问安全问题。
0x 任意文件删除漏洞漏洞复现
利用payload成功删除指定文件,演示了代码执行的危险性。
0x 任意代码执行漏洞(Getshell)漏洞复现
通过编辑模板文件中的特定代码段,实现Getshell操作,进一步验证了代码执行漏洞的危害。
0x 结尾
代码审计工作虽延迟,但意义重大。zzzphp1.中发现的漏洞提醒开发人员加强安全意识,避免类似问题。转向GitHub,期待更开放的协作与学习环境。
0x 参考
nvd.nist.gov/vuln/detai...
小白如何轻松拿下CNVD原创漏洞证书
作者:TO凌镜
0x 前言
本篇文章主要针对安全圈中小白如何获得CNVD原创漏洞证书进行简单的指导。本人是尚未毕业的实习渗透测试工程师,也是一名网络安全爱好者。
0x CNVD证书获取条件
1. 事件型:必须是三大运营商(移动、联通、电信)的中高危漏洞,或者党政机关、重要行业单位、科研院所、重要企事业单位(如:中央国有大型企业、部委直属事业单位等)的高危事件型漏洞。
2. 通用型:主要介绍通用型漏洞证书获取方式,通用型发证要求为中高危漏洞且漏洞评分不小于4.0。获取通用型证书需满足两个条件:(1)提供漏洞证明案例至少十起,如一个建站平台下的十个网站都存在SQL注入,需在上传的文档中详细复现至少3~5个案例,其余仅需提供URL。(2)漏洞相关公司规模及注册资金要求相应较多,实际操作中不需要太多,只要不是太小的公司即可。
详细审核及处置流程请访问cnvd.org.cn网站。
0x 小白如何发现通用型漏洞
1. 通过建站平台发现漏洞:在日常挖洞过程中,细心观察网站底部技术支持信息,可能找到提供技术支持的厂商,可能是建站平台或其它公司。通过Google搜索厂商,确认其为建站平台,发现其模板下的网站可能存在SQL注入漏洞,进而获得拿证思路。
2. 利用搜索引擎发现弱口令:使用Google、Fofa等搜索引擎,了解其语法规则,快速发现漏洞,节省工作量。各大厂商产品出厂时通常存在弱口令,且多数产品不强制修改密码,安全产品或网络设备往往存在弱口令问题。通过Fofa搜索外网映射的设备,利用Google搜索弱口令,发现可用的弱口令登录设备。
3. 通过白盒审计CMS发现漏洞:需要具备一定的代码审计能力,对小白来说难度较高,但通过努力学习,可以实现。通过发现网站使用的CMS或框架,从GitHub或Google等搜索引擎获取源码进行代码审计,寻找漏洞。
0x CNVD证书审批流程
CNVD证书下发流程包含:一级审核、二级审核、漏洞验证、漏洞处置、三级审核、漏洞归档。三级审核是CNVD对提交漏洞进行复现的关键步骤,一般一审和二审会通过,是否获得证书取决于三级审核能否通过。审核周期通常为半个月左右。
0x 总结
本篇文章分享了在CNVD挖洞时发现的拿证技巧,对于小白具有一定的帮助。获得CNVD证书在面试和提升技术方面都有一定的价值。网络安全需要不断学习和提升技能,才能在这个行业站稳脚跟。如有问题,欢迎留言指正。
使用 VS Code、Hardhat 和 Slither 进行智能合约审计
介绍
直到一两个星期前,我还了解智能合约安全和审计,但没有接触到当前真实和正确的流程,即在自动化部署和测试过程中使用威胁分析器从组装层面进行合约审计。。
可以在此处[1]找到所发生事件的概要。
我深刻地认识到,我们必须使用一些工具,在发布到外面之前充分测试我们的合约,否则它们会被机器人利用,这些机器人的行动速度比你开始思考的速度快得多。
一个Python脚本可能会检查你的智能合约的弱点,进行任何已知的攻击,并通过将你的虚拟KNOX堡垒中的NFT或货币保护转移到一个匿名的钱包中,在一分钟内将其价值完全耗尽到零。
当这种情况发生时,你无力阻止,而你肚子里的坑会扩大成一个深不可测的黑洞。
我学会了如何在我用来部署合约的环境中审计合约,我希望这个教程对人们有帮助,这样他们就不会成为我所遭受的同样攻击的受害者,废话不多说,我向你介绍一种从VSCode中创建、审计和部署合约的方法
前提条件Node
Node 对于运行Hardhat和本地链是必不可少的,因此它是本教程的要求,它可以从这里[2]安装。。
Python
static solidity analyzer需要Python和pip来执行,在Windows、Mac和Linux上完成这个任务的最好方法是通过GUI安装程序,因为它将为你修改PATH环境变量,使你在CLI执行过程中避免任何全局关键字的问题。它可以在这里找到。
Hardhat
Hardhat 是一个出色的本地链开发环境,可让您在将合约发布到主网之前彻底测试、部署和验证合约。
它是任何智能合约开发人员的武器库不可或缺的环境,可以从这里[3]安装。
Slither
一旦你有了合约、部署脚本和hardhat环境,你现在就可以为静态分析器安装Slither程序集库了。。
以管理员或根用户身份打开一个新的命令提示符或终端窗口,输入以下内容
pip install slither-analyzer
Visual Studio Code
一旦slither和hardhat都设置好了,你现在就可以准备安装Visual Studio代码了,可以在这里[4]找到。
安装后,单击左侧菜单中的扩展图标并搜索slither。
安装扩展程序后,重新启动 Visual Studio 代码并重新打开您的hardhat项目,您现在应该会在左侧任务栏中看到slither图标。
如果扩展未加载,请检查输出控制台,这很可能是您的环境变量的路径问题,您可以通过键入 slither 来测试它。在任何合约目录的终端窗口中,如果它抛出命令未找到错误,您将需要设置环境变量。
编译你的合约合约目录
如果将所有合约保存在一个文件夹中,维护起来会更容易,并记住在删除、创建或更改任何合约后,您需要使用这些命令清理本地类型链工件。
分析/审计
要运行审计,只需导航到slither图标并单击“播放”按钮,这将扫描您当前目录中所有已编译的合约以查找任何漏洞。
研究修复
通过使用 google 查找被slither标记的问题并研究和测试可能的修复,优先修复最严重的错误。
请记住,每次更改solidity 文件时,您都必须在扫描之前再次清理和重新编译。
这个阶段可能非常复杂,为了充分理解、测试和建模控制流,您需要具备良好的开发知识水平,以便真正测试逻辑并确保其按预期工作。
实现这一点的最佳方法是通过自动化测试脚本,可以在此处[5]找到一篇关于此的精彩文章。
部署和验证
下面概述的是带有构造函数参数的A[6]合约的示例部署脚本,将此文件放入hardhat项目的脚本目录中,可以对其进行修改以启动或部署任何类型的合约,而不仅仅是A。
gist.github.com/Arkay...
在我的示例中,testnet 链接到以太坊的 Goerli 网络,但它可以被命名并定向到您喜欢的任何网络。最后一个标志对应于您的网络名称,该名称在hardhat项目的 config.ts 文件中设置。
为了验证,请务必在此配置文件中设置您的 etherscan / polygonscan api 密钥。
配置完成后,确保将部署脚本放入脚本目录并运行以下命令。
npx hardhat run scripts/myDeployScript.ts — 网络测试网
就是这样,您现在已经学会了如何在一个地方部署、测试、审计和验证合约!
引用链接
[1] 此处: rabmcmenemy.medium.com/... [2] 这里: nodejs.org/en/download/ [3] 这里: hardhat.org/hardhat-run... [4] 这里: code.visualstudio.com/d... [5] 此处: ethereum.org/en/develop... [6] 下面概述的是带有构造函数参数的A: erca.org/