这段时间研究AI平台的能力。 今天我把库博检测工具发现的一个Java安全漏洞相关代码传到几款AI工具上进行分析,看看这几款工具反馈的结果。这些工具包括ChatGPT-3.5、Forefront Claude、AIChat(组合)和清华ChatGlm。
首先我们看看库博检测出的这个漏洞是否存在。先在代码。
protected* void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {*
**// TODO Auto-generated method stub***/**** **文件下载** **有目录遍历攻击漏洞的代码**/*request.setCharacterEncoding(**"UTF-8"**);*response.setContentType(**"text/html;charset=utf-8"**);*response.setCharacterEncoding(**"utf-8"**);*OutputStream out = null;***//**获取项目部署绝对路径下的**upload**文件夹路径**,**下载**upload**目录下面的文件*String root = request.getServletContext().getRealPath(**"/upload"**);***//**获取文件名*String filename = request.getParameter(**"filename"**);*File file = **new** File(root + **"/"** + filename);***//**根据文件路径创建输入流*FileInputStream fis = **new** FileInputStream(file);*out=response.getOutputStream();***//**设置响应头**,**弹出下载框*System.out.println(root + **"/"** + filename);***//response.setContentType("application/x-msdownload");***// response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));**String agent = request.getHeader(**"USER-AGENT"**).toLowerCase();*String name = **new** String(filename.getBytes(agent.indexOf(**"msie"**) != -**1** ? **"GBK"** : CharEncoding.UTF_8), CharEncoding.ISO_8859_1);*response.setContentType(**"application/octet-stream"**);*response.setHeader(**"Content-Length"**, **""** + file.length());*response.setHeader(**"Pragma"**, **"NO-cache"**);*response.setHeader(**"Cache-Control"**, **"No-cache"**);*response.setCharacterEncoding(**"UTF-8"**);*response.setContentType(**"text/html"**);*response.setDateHeader(**"Expires"**, -**1**);**response.setHeader(**"Content-disposition"**, **"attachment;filename="** + name);***//response.addHeader("Content-Length", "" + file.length());***//byte[] b = new byte[fis.available()];***byte**[] b = **new** **byte**[**1024**];***int** len=**0**;***while** ((len=fis.read(b))!=-**1**)*out.write(b,**0**,len);****if**(len==-**1**)*{*fis.close();*request.getSession().setAttribute(**"message2"**,**"**下载完成!**"**);*request.getRequestDispatcher(**"/filetraversal.jsp"**).forward(request, response);*}*** }*
库博检测是以安全漏洞维度展示的,所以点击某个漏洞类型,可以看到该安全漏洞对应的代码位置。当前这个版本没有以文件形式展示漏洞方式了(国内工具基本上都没有该功能,库博之前版本是有的)。

首先我们测试一下边界AICHAT,我们使用推荐模型组合,输入代码后,给出分析结果如下。

可以看到,AI引擎给找出来了多个缺陷,其中第一条就是我们最关注的路径遍历,能够给出来。第2条代码中不存在,但是3、5、6还的确是存在的问题。这样看,分析还是比较全面的。
使用国外AI工具Forefront Chat进行分析,该工具也是集成Chatgpt、Claude 1.2,该引擎是需要在互联网进行搜索,大概1分钟没有反馈出结果。
我们看Chatgpt官方网站上,使用Chatgpt-3.5引擎的分析结果。

分析上面的结果,可以看到发现了3个安全问题,第1个事路径遍历,第2个问题,国产AI工具也给出了类似结果。而第3个问题感觉是一个误报,因为在代码中进行流资源释放,但是是在一个分支进行了释放,应该算是一个误报。
我们再看看在清华大学的ChatGlm平台上的分析结果。

……………省略中间代码,见下面。

为了方便,我贴出所有返回的代码。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub*/**** **文件下载** **修复了目录遍历攻击漏洞的代码**/*request.setCharacterEncoding("UTF-8");*response.setContentType("text/html;charset=utf-8");*response.setCharacterEncoding("utf-8");*OutputStream out = null;*// **获取项目部署绝对路径下的upload文件夹路径,下载upload目录下面的文件*String root = request.getServletContext().getRealPath("/upload");*// **获取文件名*String filename = request.getParameter("filename");*// **检查文件名是否符合预期*if (filename == null || filename.trim().isEmpty()) {*response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid file name");*return;*}*// **限制用户可以下载的文件类型*String allowedExtensions = "txt,jpg,png,gif";*String fileExtension = filename.substring(filename.lastIndexOf('.') + 1).toLowerCase();*if (!allowedExtensions.contains(fileExtension)) {*response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid file extension");*return;*}*File file = new File(root + "/" + filename);*// **使用ServletContext.getResourceAsStream()代替FileInputStream*try (InputStream is = request.getServletContext().getResourceAsStream("/upload/" + filename)) {*if (is == null) {*response.sendError(HttpServletResponse.SC_NOT_FOUND, "File not found");*return;*}*response.setContentType("application/octet-stream");*response.setHeader("Content-Length", String.valueOf(is.available()));*response.setHeader("Pragma", "NO-cache");*response.setHeader("Cache-Control", "No-cache");*response.setCharacterEncoding("UTF-8");*response.setContentType("text/html");*response.setDateHeader("Expires", -1);*response.setHeader("Content-disposition", "attachment;filename=" + filename);*byte[] buffer = new byte[1024];*int bytesRead;*while ((bytesRead = is.read(buffer)) != -1) {*out.write(buffer, 0, bytesRead);*}*} catch (IOException e) {*// **处理异常,例如记录日志、返回错误信息等*e.printStackTrace();*}*if (out != null) {*try {*out.flush();*out.close();*} catch (IOException e) {*// **处理异常,例如记录日志、返回错误信息等*e.printStackTrace();*}*}*
}
突然感觉清华大学的这个AI引擎功能强大,不但给出了4个问题,最亮眼的给出的修复后的代码,这段代码我还没有时间去替换原来代码去编译看看是否存在问题,但是这个功能足于领先了。为了验证引擎,我把返回的代码又贴了回去,让引擎分析分析是否存在漏洞。其反馈结果如下:

在其提供的修复代码的基础上又检测出的问题,其提供的修复代码中,增加了对于文件类型的限制。

通过这个例子说明,国内AI引擎有自己创新之处,但是在一些细节上还是存在瑕疵,需在在引擎或训练数据上做的更精细。
(结束)
版权归原作者 manok 所有, 如有侵权,请联系我们删除。