문제에 들어가보면 아래와 같이 두개의 페이지가 존재한다. 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 |