문제에 들어가보면 아래와 같이 두개의 페이지가 존재한다. Free register 페이지에 들어가보면 page 파라미터에서 LFI가 터지는걸 확인할 수 있었다.



http://206.189.92.209/ezchallz/index.php?page=php://filter/convert.base64-encode/resource=register 요런식으로 register.php 파일 소스코들 획득한 후 확인해보면 아래와 같았다.


<html>

<?php

error_reporting(0);


function gendirandshowflag($username) {

include('secret.php');

$dname = "";

$intro = "";

$_username = md5($username, $raw_output = TRUE);

for($i = 0; $i<strlen($salt); $i++) {

$dname.= chr(ord($salt[$i]) ^ ord($_username[$i]));

};

$dname = "users/" . bin2hex($dname);

echo 'You have successfully register as ' . $username . '!\n';

if ($_username === hex2bin('21232f297a57a5a743894a0e4a801fc3')) {

$intro = "Here is your flag:" . $flag;

}

else {

$intro = "Here is your flag, but I'm not sure 🤔: \nMeePwnCTF{" . md5(random_bytes(16) . $username) . "}";

}

mkdir($dname);

file_put_contents($dname . '/flag.php', $intro);

header("Location: ". $dname . "/flag.php");

}


if (isset($_POST['username'])) {

if ($_POST['username'] === 'admin') {

die('Username is not allowed!');

}

else {

gendirandshowflag($_POST['username']);

}

}

?>


        <form action="?page=register" method="POST">

        <input type="text" name="username"><br>

        <input type="submit" value="Register">

        </form>

</html>



코드를 분석해보면 입력한 username 값을 md5 byte처리한 값을 salt값과 xor한 뒤 hex처리한 값이 플래그가 저장되는 디렉토리가 되며 이 때 username의 md5 값이 21232f297a57a5a743894a0e4a801fc3이면 실제 flag가 존재하는 디렉토리의 flag.php에 접근이 가능해진다. 

21232f297a57a5a743894a0e4a801fc3 값을 복호화해보면 admin이라는 값이 나오는데 username으로 admin이 들어올 경우 필터링에 걸리게 된다.

즉 일반적인 방법으로는 접근이 불가하고 username이 admin일 경우 생성되는 디렉토리를 구해야 한다. 이 때 salt값이 secret.php에 정의되어있어 그냥 봤을땐 알 수가 없지만 우리는 


이 때 우리는 (내가 입력한 값) , (내가 입력한 값 xor salt) 두가지를 알 수 있기 때문에 xor 역역산을 통해 salt값을 구할 수 있다. 이렇게 salt값을 구하게 되면 성공값인 admin의 해쉬값과 salt를 xor해서 admin의 디렉토리명을 구할 수 있고 이를 통해 실제 flag.php에 접근이 가능해진다.


다음과 같이 간단히 코드를 짜서 디렉토리를 구했다.








 



'CTF > Writeup' 카테고리의 다른 글

LAYER7 CTF 2018 url routing  (0) 2018.09.17
Meepwn CTF Quals 2018 OmegaSector  (0) 2018.07.17
ASIS 2018 CTF Good WAF  (0) 2018.05.01
ASIS 2018 CTF Buy flags  (0) 2018.05.01
HITB-XCTF 2018 upload  (0) 2018.04.14
블로그 이미지

JeonYoungSin

메모 기록용 공간

,