Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 모의해킹
- Los
- 게시판 만들기
- 보고서
- CTF
- lord of sql injection
- Python
- 증적 사진
- blind sql injection
- sql injection
- csrf
- union sql injection
- cookie 탈취
- 웹 해킹
- css
- php
- MySQL
- 세션
- file upload
- XSS
- Error based sql injection
- 로그인
- 웹개발
- 웹 개발
- 로그인페이지
- 문제 풀이
- 과제
- sql injection point
- JS
- 보안 패치
Archives
- Today
- Total
Almon Dev
ctf 풀이 (admin is mine) 본문
ctf 문제 풀이
admin is mine
풀이
1> doldol / dol1234 로그인해 보기
=> loginProc.php에 get메서드로 아이디와 비밀번호를 전달
=> 로그인에 성공하면 {result: 'ok'}를 응답하고 index.php로 이동
2> index.php에 접근해 보기
자바스크립트로 login.php로 리다이렉트 시키는 것이 보입니다.
그리고 그 밑에 html코드가 그대로 노출되네요.
3> js 확인해 보기
서버에서는 결괏값으로 {result: "ok/fail"}를 응답하고 있습니다.
그렇다면 클라이언트 측에서 로그인에 성공했을 때 리다이렉트를 시켜주는 자바스크립트 코드가 있어야 합니다.
4> 로그인 로직 추측
1. 아이디와 비밀번호를 get으로 받아옵니다.
2. 서버에서 아이디와 비밀번호를 검사합니다.
3. 검사에 성공하면 index.php의 location.href부분을 제거합니다.
4. result: "ok"를 응답받은 클라이언트에서 js로 index.php로 리다이렉트 시킵니다.
4. 검사에 실패하면 실패 메시지를 띄웁니다.
로그인에 실패하든 성공하든 index.php의 내용은 만들어지는 걸로 보입니다.
5> admin계정으로 로그인 실패하기
결과인 result: "fail"을 받았습니다.
6> index.php에 접근하기
리다이렉트를 시키더라도 html코드가 그대로 노출되기에 플래그가 보입니다.
7> admin 계정으로 로그인 페이지 띄워보기
1. doldol/dol1234 계정으로 로그인을 합니다.
2. result: "ok"를 받은 웹서버가 어딘가(ex) 세션) 상태를 저장합니다.
3. 버프스위터로 admin/1을 요청을 보내 index.php를 완성합니다.
4. 새로고침합니다.
=> 아마도 result: "ok"시 script를 제거하는 코드를 넣고, fail일시 아무것도 하지 않아서 생기는 문제인 것 같습니다.
로그인 php 코드 예상
login.php
<?php
session_start();
$input_id = $_GET['UserId'];
$input_pass = $_GET['Password'];
$server_name = "localhost";
$username = "root";
$password = "";
$db_name = "test";
$conn = new mysqli($server_name, $username, $password, $db_name);
$sql = "select nickname, password from member where id='$input_id' and password='$_input_pass'";
$result = $conn->query($sql)->fetch_array(); // 첫번째 결과(row)를 받아옴
$nickname = $result['nickname'];
$_SESSION['nickname'] = $nickname;
if($input_pass == $db_pass) {
// 로그인 성공
$_SESSION['result'] = "ok";
echo json_encode(["result" => "ok"]);
}else {
// 로그인 실패
echo json_encode(["result" => "fail"]);
}
index.php
<?php
session_start();
$result = $_SESSION['result'] ?? null;
if(!$result = 'ok') {
echo "<script>location.href='login.php'</script>";
}
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p>닉네임은? <?=$_SESSION['nickname'] ?></p>
</body>
</html>
'웹 해킹 > 웹 해킹(ctf)' 카테고리의 다른 글
ctf 풀이 (SQL Injection 1) (0) | 2024.11.23 |
---|---|
ctf 풀이 (Pin Code Crack) (2) | 2024.11.20 |
ctf 풀이 (Secret Login) (2) | 2024.11.18 |
ctf 풀이 (Login Bypass 4) (0) | 2024.11.18 |
ctf 풀이 (Login Bypass 3) (0) | 2024.11.16 |