2022 화이트햇 콘테스트 예선에 출제되었던 문제
이전 F-1 문제와 이어지는 문제이다.
(https://hackingstudypad.tistory.com/669)
F-2 문제는
공격자가 HTTP 프로토콜을 이용하여
최초로 데이터를 유출한 시각과
이 때 명령프롬포트의 PID 를 찾는것이 목표이다.
이전 문제에서 Sysmon 로그를 분석해
rundll32.exe 가 실행되었다는것을 알 수 있었다.
PID 가 8248 이라는 것을 기억해둔다.
그리고 계속 따라들어가면 된다.
rundll32.exe 가 cmd.exe 를 실행시킨 흔적을 찾을 수 있다.
위 로그를 보면 PPID가
방금전 rundll32.exe 의 PID 였던 8248 인것을 볼 수 있다.
마찬가지로 이번 PID는 3820 이다.
Command Line 부분을 보니 뭔가 powershell 을 실행시키는것 같다.
-Enc 뒤에 base64 인코딩된 부분을 풀어보자
$base64EncodedString = "여기에_Base64_문자열_입력";
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($base64EncodedString))
디코딩하기 위해선
위의 파워쉘 스크립트를 사용하면 된다.
그럼 또다시 base64 인코딩된
파워쉘 스크립트가 등장한다.
$base64ZlibData = "여기에_Base64_문자열_입력"
$decodedBase64Data = [System.Convert]::FromBase64String($base64ZlibData)
$zlibStream = New-Object System.IO.MemoryStream
$zlibStream.Write($decodedBase64Data, 0, $decodedBase64Data.Length)
$zlibStream.Flush()
$zlibStream.Seek(0, 'Begin')
$decompressedData = New-Object System.IO.MemoryStream
$inflateStream = New-Object System.IO.Compression.DeflateStream($zlibStream, [System.IO.Compression.CompressionMode]::Decompress)
$inflateStream.CopyTo($decompressedData)
$inflateStream.Close()
$decodedData = [System.Text.Encoding]::UTF8.GetString($decompressedData.ToArray())
Write-Host "Decoded Data: $decodedData"
이 부분은 Base64 + zlib 압축된 데이터로
위 스크립트를 이용해 디코딩 할 수 있다.
디코딩하면 이런 스크립트가 나온다.
png, jpg, xlsx 같은 파일 목록을 스캔한 뒤
압축해서 curl 로
http://192.168.35.85:8000/upload 경로에 업로드 시키고 있다.
따라서 HTTP 프로토콜로 최초로 데이터를 유출한 시간은
Sysmon 로그에서 본 2022-10-13 19:02:25 이고,
PID는 cmd.exe 의 PID인 3820이 된다.
이번 문제의 플래그는
FLAG{20221013190225_3820} 이다.
'CTF > 포렌식' 카테고리의 다른 글
[2022 화이트햇 콘테스트] F-4 - 포렌식 / Winhex (170) | 2023.11.19 |
---|---|
[2022 화이트햇 콘테스트] F-3 - 포렌식 / Powershell / Process Explorer (226) | 2023.11.15 |
[2022 화이트햇 콘테스트] F-1 - 포렌식 / Wireshark (195) | 2023.11.07 |
[2022 화이트햇 콘테스트] E-3 - 포렌식 / Autoruns / Sysmon View (158) | 2023.11.03 |
[2022 화이트햇 콘테스트] E-2 - 포렌식 / Wireshark / IDA / Python (174) | 2023.10.30 |