>我真的太惨了

>外出实习忘记了博客密码

>断更了这么久

>今天终于忍不了了,ssh连上来黑了自己的首页,试图记录点什么

>2019/08/21 --C0d3r1iu

记一次另类突破CDN的完全渗透 – 记录日 – C0d3r1iu's Blog

记一次另类突破CDN的完全渗透

热度:607℃ 评论:0 发布时间:2018-10-17 收录:已收录

对某福利网站的渗透测试

Author:C0d3r1iu

0x00 前言

三个月前偶遇一个福利网站,在欣赏网站内容的同时对其进行了检测,最后以root的身份逛了逛他的vps,打包了整站。
也算是为净化网络做了一点点贡献。

首页图片就不放了,过程中很多图当时都没截,还请大家将就一下

0x01 识破虚幻:

对于我来说,渗透的本质是有效信息收集和利用(因为基本混不到最新的0day)

通过浏览器插件Wappalyzer可以知道:

主站是用wordpress改的,主要运营模式是通过后台发布资源并且配合插件兜售邀请码

网站有CDN,是国外的CloudFlareCDN

记一次另类突破CDN的完全渗透

扫了一遍目录,没发现什么敏感备份,主站几乎无望

收集子域名,发现:

pay.xxx.xxx(用于支付购买其邀请码,类似发卡平台)
ss.xxx.xxx (用于给会员提供ss翻墙???)

其中 pay.xxx.xxx 在网站底部发现是用的EDLM发卡程序

第一次听说这个程序,去百度搜了一下发现是一个私人写的支付检测并自动发卡的程序,需要在服务器上开启客户端一直监听着支付宝或者微信有无收款信息再配合系统进行发卡确认。

它的官网貌似也用的和pay这个子站点一样的版本,下载网上流传的免费版审计一波,发现了一处sql盲注

这个代码写的有点意思,其中特地注释了 "防止sql注入" 差点就把我吓跑了,下面附上自己体会:

//判断被设置(被修改)后内容是否为空白
if($_POST['text'] != ''){
  $sql = "SELECT * FROM `kms` WHERE `dh` LIKE '".intval($_POST['text'])."';";//设置sql语句查询此单号是否已使用过
  $result = $config->query($sql);//执行sql语句并获取结果
  $row = $result->fetch_assoc();
  //判断结果是与否
  if($row){
    //是则执行以下代码
    $_POST['text'] = intval($_POST['text']);//防止sql注入
    $sql = "SELECT * FROM `kms` WHERE `dh` LIKE '".$_POST['text']."';";//设置sql语句查询此单号是否已使用过
    $result = $config->query($sql);//执行sql语句并获取结果
    while($rows = $result->fetch_assoc()){
      $kms .= $rows['km']."\n";
    }
    $sql = "SELECT * FROM `lists` WHERE `spid` LIKE '".$row['spid']."';";
    $result = $config->query($sql);//执行sql语句并获取结果
    $sp = $result->fetch_assoc();
    echo '
      <div class="am-panel am-panel-primary" id="look">
          <ul class="tpl-task-list tpl-task-remind">
              <li>
                  <center><span>Tip:查询成功</span></center>
              </li>
              <li>
                  <div class="cosA">
                      <span class="cosIco label-info">
                          <i class="am-icon-location-arrow"></i>
                      </span>
                      <span> 名称: <span class="font-green">'.$sp['title'].'</span></span>
                  </div>
              </li>
              <li>
                  <div class="cosA">
                      <span class="cosIco">
                          <i class="am-icon-mixcloud"></i>
                      </span>
                      <span> 云端单号: <span class="font-green">'.$row['dh'].'</span></span>
                  </div>
              </li>
              <li>
                  <div class="cosA">
                      <span class="cosIco label-danger">
                          <i class="am-icon-key"></i>
                      </span>
                      <span> 卡密: <span class="font-red">(1行/1个)</span></span>
                      <textarea rows="5">'.$kms.'</textarea>
                  </div>
              </li>
              <li>
                  <div class="cosA">
                      <span class="cosIco label-warning">
                          <i class="am-icon-jpy"></i>
                      </span>
                      <span> 价格:<span class="font-green">'.$sp['money'].'</span></span>
                  </div>
              </li>
              <li>
                  <div class="cosA">
                      <span class="cosIco">
                          <i class="am-icon-credit-card"></i>
                      </span>
                      <span> 支付方式:<span class="font-green">'.$row['mode'].'</span></span>
                  </div>
              </li>
              <li>
                  <div class="cosA">
                      <span class="cosIco label-warning">
                          <i class="am-icon-history"></i>
                      </span>
                      <span> 提卡时间:<span class="font-green">'.date('Y-m-d H:i:s',$row['time']).'</span></span>
                  </div>
              </li>
          </ul>
      </div>
    ';//输出查询结果代码
  }else{
    //查询支付宝数据是否存在此单号
    $sql = "SELECT * FROM `zfb` WHERE `dh` LIKE '".$_POST['text']."'";//设置sql语句查询支付宝单号列表是否存在此单号
    $result = $config->query($sql);//执行语句并获取结果
    $row = $result->fetch_assoc();//解析结果并分组
    $mode = '支付宝';
    if(!$row){
      $sql = "SELECT * FROM `qq` WHERE `dh` LIKE '".$_POST['text']."'";//设置sql语句查询QQ单号列表是否存在此单号
      $result = $config->query($sql);//执行语句并获取结果
      $row = $result->fetch_assoc();//解析结果并分组
      $mode = 'QQ钱包';
      if(!$row){
        $sql = "SELECT * FROM `wx` WHERE `dh` LIKE '".$_POST['text']."'";//设置sql语句查询微信单号列表是否存在此单号
        $result = $config->query($sql);//执行语句并获取结果
        $row = $result->fetch_assoc();//解析结果并分组
        $mode = '微信支付';
      }
    }

仔细看过后易知,起作用的语句:
$_POST['text'] = intval($_POST['text'])
被写到第一个if判断正确之后才会执行的流程里面了

我们只需要让他判断的条件为否,进入else流程内执行sql,就可以传入没有过滤的$_POST['text']了。

intval函数会把传入的注入语句字符串默认转为0,还好这里没有订单号为0的数据,自然返回的$row也就是NULL,从而php代码会执行else之后的部分,之后的部分他并没有进行过滤。

并且这个开发作者安全意识并不高,后台管理员密码居然是明文储存的。

记一次另类突破CDN的完全渗透

尝试本地搭建获得库的结构

记一次另类突破CDN的完全渗透

简单构造语句写出脚本注出密码成功登录后台,发现除了一片白花花的邀请码其他什么可利用的功能的都没有。(这里当时没截图)

冷静思考后尝试用注入出来的后台密码去登录主站的后台居然进去了

主站是wordpress的话,尝试修改配置文件拿shell,可惜每次插入一句话木马,点击保存都会卡几分钟后提示操作失败。猜测是cloudflare CDN把请求拦截了,直接getshell怕是不行了(后来进服务器发现有宝塔btwaf服务,猜测或许是被规则拦截了)

于是换个思路:

再收集其信息,确定了几个常用邮箱,开始尝试密码组合登录cloudflare

不得不说常用密码这个弱点太无敌了,直接登录了他的cloudflare账户。

汗,这个人为了开个破黄网居然买了这么多不同后缀的域名!

记一次另类突破CDN的完全渗透

发现很多二级域名最开始还没发现 = =!

记一次另类突破CDN的完全渗透

0x02 回到真实之后:

得到服务器真实ip,我们可以进一步搜集信息

这里说下我的思路:

在tool.chinaz.com中查看ipwhois

记一次另类突破CDN的完全渗透

得到它的vps服务商是CubeCloud的

百度发现是一家名叫魔方云的主机商

其他服务器也有在阿里云的,不过主站在魔方云还是先搞主站

尝试密码组合登录进魔方云主机管理平台(发现他好喜欢用@,密码不是xxxx@就是xxxx@@)

记一次另类突破CDN的完全渗透

记一次另类突破CDN的完全渗透

记一次另类突破CDN的完全渗透

直接可以通过网页管理端申请1小时在线管理终端,蹦出来h5的console,进去就是root权限

记一次另类突破CDN的完全渗透

这里随便翻翻,可以发现他是用宝塔在维护管理服务器的

记一次另类突破CDN的完全渗透

将其整站源码打包带走,百度盘的资源有300多个。

记一次另类突破CDN的完全渗透

发现数据库配置密码也没能逃出我猜测的几个密码集合 233

给了基友们一些网站的邀请码,站长可能发现新注册的用户跟收钱记录不符,起了疑心把后台管理密码改了。

遂把他wp后台登录页面改写了下添加了监控账号密码功能,用终端直接wget传上去解压覆盖达到了监控目的,顺便又能蹲一波他常用的密码,结果这个网站所有用户都是通过后台登录的,捕获了一大堆非管理用户...

记一次另类突破CDN的完全渗透

后又将他的网易邮箱,阿里云,以及通过域名whois查到的域名商dynadot账户都一一缴获了,用常用的几个密码真是太不安全了。

记一次另类突破CDN的完全渗透

通过部署各种监控代码、查看日志、各种平台注册信息等等发现他不是一个人在战斗,尼玛他们是一个团伙啊!!

此团人员分布在河南、四川、上海等地

有人负责发布资源、有人则负责建设和维护网站(显然没有一点点安全意识)

负责网站建设的是00后,自称鑫爵,颇喜欢用'qq' + 自己生日 + 一两个@当作密码

负责收款的30多岁,目测网站月盈利万元,果然赚钱的法子都写在刑法上...

0x03总结&后续:

从这次渗透可以看出来信息收集的重要性,不要放过任何一个可能有用的信息,利用好了可能就是秒杀。

后续服务器权限并不好控制,被发现后服务器被重置了,vps管理平台密码也被改了,很无奈。
中间一些操作有点着急了,使得行为暴露的很彻底(网易和阿里云异地登录记录)。

各位有什么好的持续控制思路求分享~ 希望能学习下各位的思路 ,可以私信加好友一起玩啊...

To Be Continued:

距这次渗透已经过去了3个月,最近发现这个团伙换了个域名又开始作案了,发卡平台系统也更新了,真是无语。
潜入了那个发卡平台交流群,从公告得知这位开发者已经发现这个漏洞啦(可能是监测到了我注入他官网发的一系列http请求日志)

记一次另类突破CDN的完全渗透

我还是太年轻,渗透未完待续...
希望明年能找个实习多提升一下吧 ~

打赏
本文由 C0d3r1iu 创作,除注明转载/出处外,均为本站原创,转载前请注明出处!

Leave a Reply

Your email address will not be published. Required fields are marked *

顶部
护眼
搜索
分享