一次完整的GPT-4代码审计,挖掘CMSeasy漏洞
2023-4-6 14:22:49 Author: 渗透安全团队(查看原文) 阅读量:67 收藏

由于微信公众号推送机制改变了,快来星标不再迷路,谢谢大家!

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

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

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

    这次,使用GPT-4进行一次完整的代码审计工作,进行CMSeasy漏洞挖掘的过程并非是GPT-4多么智能,可完全代替安全从业者去做代码审计。为什么要这么说呢?因为GPT-4审计代码需要很多引导,需要连接多个文件才能进行审查,很难仅仅通过一个文件就能做到。
在这里作者发现了一种可量化审计代码的方式,不需要太多的精力投入,也能让新手迅速提高审计代码能力,跟上行业发展的步伐。
本文需要用到的工具:
Fortify SCA
ChatGPT-4
读完这篇文章收获:
快速使用GPT-4审计代码
自动化对代码整个流程进行注解,翻译。
0x01 简介
本篇文章的大体过程

1.首先搭建CMSeasy环境:

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

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

比如举个例子

这个地方

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

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

    本次抓取到的参数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主导所有工作。当然作者也有很多不足的地方,欢迎大家私信,我会更新具体信息给大家。

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

这里有点意思....

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

GPT-4对代码分析结果:    

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

这段 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进行突破。
这里是个上传点。理论将文件上传上去就可以了。那就上传问题吧。

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

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;    }                        

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

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

PUA一下GPT-4

GPT-4回答结果

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

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

<?php phpinfo();__halt_compiler();

   这里其实还是有一种方法,使用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,就可以让其执行代码。  

一处注入

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

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

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

构建sql=

Fortify SCA还没有出场

下载地址:

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

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

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

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

感谢您的支持和关注!


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

加入安全交流群

                               

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247502565&idx=2&sn=6724502d65a780c9e4ef7a9033d3cbda&chksm=c176374af601be5cf37fba384d87aafa114937503a707f807685d61da16ba962cbed7b1482ab#rd
如有侵权请联系:admin#unsafe.sh