由于微信公众号推送机制改变了,快来星标不再迷路,谢谢大家!
作为一名网络安全公众号运营者,我一直坚持提供有关网络安全实践方面的高质量内容,但很遗憾,坐冷板凳的滋味确实不那么好受。
我试图通过大众感兴趣ChatGPT来吸引更多的关注,这样做让我感到很自责,虽然吸引到一批关注,但失去了最初的定位。现在,我决定改变这种状况,努力为大家提供更好网络安全内容,后续关于ChatGPT的文章我会发到知识星球,而公众号不再输出相关内容只输出网络安全相关内容。
因此,我诚挚地邀请您关注我的公众号,让我们一起分享、一起学习、一起进步。在未来的创作中,我将不断努力,为大家带来更好的内容!
1.首先搭建CMSeasy环境:
使用版本:CmsEasy_7.7.7_UTF-8_20230221
对想要分析的页面进行抓包,将抓包的参数去源码分析。
比如举个例子
这个地方
使用Burpsuite抓包结果,我使用的汉化版本大家可以下载:
【实测有效】BurpSuite Pro v2023.3破解版下载,快来试试吧
0x02 易发漏洞函数
在php中可由用户输入的变量
$_SERVER
$_GET
$_POST
$_COOKIE
$_REQUEST
$_FILES
存在命令注入的函数
system
exec
passthru
shell_exec
popen
proc_open
pcntl_exec
存在XSS和CSRF的函数
echo
printf
vprintf
<%=$test%>
存在文件包含的函数
include
include_once
require
require_once
show_source
highlite_file
readfile
flie_get_contents
fopen
存在代码注入的函数
eval
preg_replace
assert
call_user_func
call_user_func_array
create_function
存在SQL注入的语句
insert
update
select
delete
文件管理函数
copy
rmdir
unlink
delete
fwrite
chmod
fgetc
fgetcsv
fgets
fgetss
file
file_get_contents
fread
readfile
ftruncate
file_put_contents
fputcsv
fputs
0x03 代码审计
分析代码需要耐心,这里只是打样,抛砖引玉,小伙伴受到启发,在日常工作中,可以将部分工作量交给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 变量将指向一个非预期的文件。
php
Copy code
$lang_choice='system.php';
if (isset($_GET['lang_choice'])){
$lang_choice=$_GET['lang_choice'];
}
接下来,代码将 $path 拼接到网站根目录下的 lang 目录下。此时,如果 $lang_choice 包含了恶意的相对路径,$path 将指向一个完全由攻击者控制的文件。
php
Copy code
$path=ROOT.'/lang/'.$langurlname.'/'.$lang_choice;
当用户提交表单后,代码将修改 $path 指向的文件内容。如果 $path 指向了一个恶意文件,攻击者可以任意修改这个文件的内容,从而实现任意代码执行。
php
Copy code
if (front::post('submit')) {
...
file_put_contents($path,$content);
这里就找到了一个需要突破的点:
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进行分析。
公众号在摸索中前进,不断的完善与优质的输出,离不开大家的支持和关注,让我们一起分享、一起学习、一起进步~
感谢您的支持和关注!
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
加入安全交流群
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读