1337UP LIVE CTF 2024 write up이다.
피자 파라다이스라는 문제이다.
문제에 접속하면 귀여운 피자가 나를 반긴다.
일단 먼저 robots.txt를 통해 어떤 디렉토리에 대한 정보가 있는지 확인했다.
그 결과, "/secret_172346606e1d24062e891d537e917a90.html"와
"/assets/"이 Disallow 되어 있는 것을 확인 할 수 있다.
첫번째 경로로 들어가지면 위와 사진과 같이 로그인 창이 나온다.
개발자 도구를 통해 script 부분에 /assets/js/auth.js 라는 부분이 있는 것을 보고 이 경로로 가주었다.
const validUsername = "agent_1337";
const validPasswordHash = "91a915b6bdcfb47045859288a9e2bd651af246f07a083f11958550056bed8eac";
function getCredentials() {
return {
username: validUsername,
passwordHash: validPasswordHash,
};
}
해당 경로로 가면 username과 passwordHash를 알아낼 수 있다.
https://crackstation.net/ 를 통해 해당 해당 해시로 된 값을 원래대로 돌려주었다.
그 결과 "intel420"라는 값을 얻어낼 수 있었다.
이를 통해 로그인에 성공하면 이미지를 다운로드 할 수 있는 페이지가 나온다.
4개의 이미지를 다운 하는 것이 가능하다.
해당 코드를 보면 이미지의 경로에서 이미지를 불러와 다운로드 하는 것을 확인할 수 있다. (이는 프론트 코드이다.)
https://pizzaparadise.ctf.intigriti.io/topsecret_a9aedc6c39f654e55275ad8e65e316b3.php?download=/assets/images/topsecret1.png
이를 통해 아래와 같이 파일이 다운로드 되는 것을 확인 할 수 있다.
디렉토리 탐색을 통해 해당 문제의 파일을 다운로드 할 수 있었다.
이를 통해 flag를 획득 할 수 있는 재밌는 문제였다.
<?php
$flag = 'INTIGRITI{70p_53cr37_m15510n_c0mpl373}';
if (isset($_GET['download'])) {
$file = $_GET['download'];
if (strpos($file, '/assets/images/') === 0) {
$filePath = __DIR__ . '/' . $file;
if (file_exists($filePath)) {
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');
header('Content-Length: ' . filesize($filePath));
readfile($filePath);
exit();
} else {
die('File not found!');
}
} else {
die('File path not allowed!');
}
}
?>
flag : INTIGRITI{70p_53cr37_m15510n_c0mpl373}
ref.
https://crypto-cat.gitbook.io/ctf-writeups/2024/intigriti/web/safenotes_2
https://ctf.intigriti.io/challenges