一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

admin 2024年11月13日23:18:28评论46 views字数 4399阅读14分39秒阅读模式

     作为一名网络安全公众号运营者,我一直坚持提供有关网络安全实践方面的高质量内容,但很遗憾,坐冷板凳的滋味确实不那么好受。

     我试图通过大众感兴趣ChatGPT来吸引更多的关注,这样做让我感到很自责,虽然吸引到一批关注,但失去了最初的定位。现在,我决定改变这种状况,努力为大家提供更好网络安全内容,后续关于ChatGPT的文章我会发到知识星球,而公众号不再输出相关内容只输出网络安全相关内容。

    因此,我诚挚地邀请您关注我的公众号,让我们一起分享、一起学习、一起进步。在未来的创作中,我将不断努力,为大家带来更好的内容!

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

    这次,使用GPT-4进行一次完整的代码审计工作,进行CMSeasy漏洞挖掘的过程并非是GPT-4多么智能,可完全代替安全从业者去做代码审计。为什么要这么说呢?因为GPT-4审计代码需要很多引导,需要连接多个文件才能进行审查,很难仅仅通过一个文件就能做到。

在这里作者发现了一种可量化审计代码的方式,不需要太多的精力投入,也能让新手迅速提高审计代码能力,跟上行业发展的步伐。
本文需要用到的工具:
Fortify SCA
ChatGPT-4
读完这篇文章收获:
快速使用GPT-4审计代码
自动化对代码整个流程进行注解,翻译。
0x01 简介
本篇文章的大体过程

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

1.首先搭建CMSeasy环境:

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

使用版本:CmsEasy_7.7.7_UTF-8_20230221

对想要分析的页面进行抓包,将抓包的参数去源码分析。

比如举个例子

这个地方

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

使用Burpsuite抓包结果,我使用的汉化版本大家可以下载:

【实测有效】BurpSuite Pro v2023.3破解版下载,快来试试吧

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

    本次抓取到的参数lang_choice,  admin_dir,case.我们在源码中查找这个参数,通过确定参数的位置,带入到GPT-4让chatgpt-4分析代码,通过软件的审计结果,导入片段分析。因为大部分人代码功底稍弱,想通过GPT-4给自己打工,所以我这边是常规思路。

0x02 易发漏洞函数

    在这里首先我们先要明白几个关键点

在php中可由用户输入的变量

$_SERVER$_GET$_POST$_COOKIE$_REQUEST$_FILES

存在命令注入的函数

systemexecpassthrushell_execpopenproc_openpcntl_exec

存在XSS和CSRF的函数

echoprintprintfvprintf<%=$test%>

存在文件包含的函数

includeinclude_oncerequirerequire_onceshow_sourcehighlite_filereadfileflie_get_contentsfopen

存在代码注入的函数

evalpreg_replaceassertcall_user_funccall_user_func_arraycreate_function

存在SQL注入的语句

insertupdateselectdelete

文件管理函数

copyrmdirunlinkdeletefwritechmodfgetcfgetcsvfgetsfgetssfilefile_get_contentsfreadreadfileftruncatefile_put_contentsfputcsvfputs

0x03 代码审计

这里为了方便大家直观。我会首先将参数带入$_GET,$_POST进行分析如:
$_GET['admin_dir'],$_POST['admin_dir'],$_REQUEST['admin_dir'].....

分析代码需要耐心,这里只是打样,抛砖引玉,小伙伴受到启发,在日常工作中,可以将部分工作量交给GPT-4,作者建议自我主导,GPT只是个玩具。而不是GPT主导所有工作。当然作者也有很多不足的地方,欢迎大家私信,我会更新具体信息给大家。

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

输入的地方并不多,是不是没有输入的地方就没有问题,并不是,审计过程先是寻找比较容易有问题的点,不啃硬骨头,没有输入的地方可以找到引用,包含,二次注入形式,这里换另一个。$_GET['lang_choice']

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

这里有点意思....

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

很明显了,我们假装不明白,把ADD_ACTION.EDIT_ACTION函数发送给GPT-4分析。

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

GPT-4对代码分析结果:    

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

将整个流程大体勾勒出来,有些小伙伴会说啦,太简单,这里的整个过程并不是很复杂。这里针对的是对代码不熟悉,确想审计代码的小伙伴学习使用,如果是大神,我想也不用来辅助,主要用来对付自己并不熟悉的代码。

这段 PHP 代码中存在一个潜在的任意文件执行风险,主要原因是对用户输入没有进行足够的过滤和验证。具体来说,存在安全隐患的部分是 $lang_choice 变量的处理。首先,该代码允许用户通过 GET 请求的 lang_choice 参数来指定 $lang_choice 的值。此时,如果恶意用户输入了一个包含相对路径(例如 ../../../some/evil/path)的参数,那么 $path 变量将指向一个非预期的文件。phpCopy code$lang_choice='system.php';if (isset($_GET['lang_choice'])){    $lang_choice=$_GET['lang_choice'];}接下来,代码将 $path 拼接到网站根目录下的 lang 目录下。此时,如果 $lang_choice 包含了恶意的相对路径,$path 将指向一个完全由攻击者控制的文件。phpCopy code$path=ROOT.'/lang/'.$langurlname.'/'.$lang_choice;当用户提交表单后,代码将修改 $path 指向的文件内容。如果 $path 指向了一个恶意文件,攻击者可以任意修改这个文件的内容,从而实现任意代码执行。phpCopy codeif (front::post('submit')) {    ...    file_put_contents($path,$content);
让我们开始从这里针对这个点,使用GPT-4进行突破。
这里是个上传点。理论将文件上传上去就可以了。那就上传问题吧。

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

这里就找到了一个需要突破的点:

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

checkstr代码: 

                           static function checkstr($str)    {        if (preg_match("/<(/?)(script|i?frame|style|html|?php|body|title|link|meta)([^>]*?)>/is", $str, $match)) {            //front::flash(print_r($match,true));            return false;        }        if (preg_match("/(<[^>]*)on[a-zA-Z]+s*=([^>]*>)/is", $str, $match)) {            return false;        }        return true;    }                        

使用了正则匹配,正则的大体意思我生成一个格式图,方便大家理解。

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

需要执行PHP,那必须要闭合。怎么办,GPT-4快告诉我。

PUA一下GPT-4

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

GPT-4回答结果

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

我很意外GPT-4使用了短标签的方法,因为这种方法可以规避正则匹配,但是它对版本的要求有限制。从其中给出的结果看,GPT-4并没有很好地理解这个正则表达式的意思,给出了一些绕过方式,例如使用PhP和实体编码等方式。所以并不能直接套用结果,需要对这种方法进行训练。建议大家自己进行训练。

使用GPT-4反馈PAYLOD进行测试。

<?php phpinfo();__halt_compiler();

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

   这里其实还是有一种方法,使用ADD参数。

POST /CmsEasy_7.7.7_UTF-8_20230221/index.php?case=language&act=add&id=5&lang_choice=system_custom.php&admin_dir=admin&site=default&username=&url=&isvisual=&aid=&catid=&dfile=&lang_choice=system_custom.php

在array中拼接system_custom.php,就可以让其执行代码。  

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

一处注入

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

从这段代码来看,存在SQL注入的风险。原因如下:在execsql_action,execsqls_action和execupdate_action这三个函数中,从用户输入直接获取SQL查询语句(通过front::get("sql")),然后直接将其传递给service::execsql()函数执行。在这种情况下,攻击者可以通过构造恶意的SQL语句来执行SQL注入攻击。为了防止SQL注入攻击,您可以采取以下措施:参数化查询:使用预编译语句和参数化查询来避免将用户输入直接拼接到SQL查询中。验证和过滤用户输入:对用户提供的输入进行有效性检查,以确保它符合预期的格式。在有可能的情况下,使用白名单验证而非黑名单验证。请注意,这里提供的建议并非详尽无遗。在实际开发中,您可能需要根据具体情况采取更多的防护措施来确保代码的安全性。

不懂代码是什么意思怎么办?生成code注释。

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

/*以下是对上述代码的解释:1.该函数是使用$sqlquery参数调用的。如果$sqlquery参数为空,则函数将返回一个空字符串。2.函数从$sqlquery参数中去除回车,并将cmseasy_前缀替换为数据库前缀。3.函数将$sqlquery参数拆分为一个由分号(;)字符分隔的查询数组。4.然后,函数在查询数组中循环,并执行每个查询。如果查询导致错误,函数将返回错误消息。5.如果查询成功,函数将统计已执行的查询数,并返回已执行的询问数*/

构建sql=

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

Fortify SCA还没有出场

下载地址:

【全网最详】Fortify SCA最新版本安装教程,手把手教你操作

为什么放到最后讲Fortify SCA,因为太简单啦,将SCA的结果片段导入到GPT-4,让GPT-4进行结果输出。省去了对代码整体的分析。大体流程是:定位到问题代码---使用GPT-4进行分析。

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞对于那些想要学习审计代码的新手来说,学习新技能可能会遇到各种挑战和困难,借GPT-4为一个兴趣点,敲开审计代码的门。是一件非常愉快的事情。
这篇文章希望能够帮助新手们找到学习代码审计的乐趣  。

公众号在摸索中前进,不断的完善与优质的输出,离不开大家的支持和关注,让我们一起分享、一起学习、一起进步~

感谢您的支持和关注!

想一起学习进步吗,加作者微信进内部交流群。

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

请作者喝杯喜茶吧!如果你喜欢我的文章并想要了解更多相关知识与网络安全相关问题,我推荐你加入星球。

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

原文始发于微信公众号(安全女巫):一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月13日23:18:28
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次完整的GPT-4代码审计,挖掘CMSeasy漏洞https://cn-sec.com/archives/1643771.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息