반응형

 

문제에 접근하면 위와 같이 3개를 입력받을 수 있다.

First Name에 a를 Last Name에 b를 넣고 [Get Wrestler Name]를 클릭하면 아래와 같이 a와 b가 응답에 출력된다. 

 

 

몇가지 공격 기법이 생각났는데 일단 요청이 어떻게 날아갔는지 봤다.

input에 base64로 된 형태로 날아가길래 decode 해보았더니 XML 형태로 날아갔다. 이를 통해 XXE를 하는 것이구나 하여 해당 공격을 진행하였다.

 

URL 디코딩 후 base64로 디코딩하였고 값을 바꿔준 뒤에 다시 base64로 인코딩 진행 후 URL encoding 해주었다.

그 결과 아래와 같이 XXE에 성공함을 볼 수 있었다.

 

소스코드를 얻기 위해 php의 convert 필터를 이용하였다.

그 결과 나온 base64로 인코딩된 값을 디코딩해주면 generate.php의 소스코드를 볼 수 있다.

 

그런데 원하는 FLAG 값은 존재하지 않았고 대신 이러한 코드가 들어있었다.

$whitelist = array(
    '127.0.0.1',
    '::1'
);
// if this page is accessed from the web server, the flag is returned
// flag is in env variable to avoid people using XXE to read the flag
// REMOTE_ADDR field is able to be spoofed (unless you already are on the server)
if(in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
	echo $_ENV["FLAG"];
	return;

 

여기서 난 막혔다 ㅠㅠ

REMOTE_ADDR을 127.0.0.1로 spoof 하기 위해 X-Forwarded-For 헤더를 이용해보았는데 되지 않았다 ㅠㅠ

해당 기법을 이용하는게 아닐까? 시간나면 더 풀어봐야겠다.

 


대회가 끝났지만 더 진행해보았다.

xxe를 통해 file:// , php:// 뿐만 아니라 http:// 도 가능하다는 것을 생각하였고 이를 이용해 localhost에서 접근하듯 하면 될 것이라 생각하였다.

 

그래서 <!DOCTYPE rootable[<!ENTITY xxe SYSETM "http://localhost/generate.php">]>를 시도해보았고 이를 통해 Flag를 획득할 수 있었다.

 

 

 

 

 

반응형

'Hacking Contest' 카테고리의 다른 글

[2019 Encrypt CTF] Sweeeeeet  (0) 2019.04.03
[2019 Encrypt CTF] repeaaaaaat  (0) 2019.04.03
[Sunshine CTF 2019] WrestlerBook  (0) 2019.03.31
2019 TAMUctf Write-Up  (0) 2019.02.26
[35c3ctf.ccc.ac]sanity check  (0) 2018.12.28
블로그 이미지

rootable

,