get source 클릭했더니 php스크립트가 떴다
<?php
if (isset($_GET['view-source'])) {
show_source(__FILE__);
exit();
}
/*
create table user(
idx int auto_increment primary key,
id char(32),
ps char(32)
);
*/
if(isset($_POST['id']) && isset($_POST['ps'])){
include("./lib.php"); # include for $FLAG, $DB_username, $DB_password.
$conn = mysqli_connect("localhost", $DB_username, $DB_password, "login_filtering");
mysqli_query($conn, "set names utf8");
$id = mysqli_real_escape_string($conn, trim($_POST['id']));
$ps = mysqli_real_escape_string($conn, trim($_POST['ps']));
$row=mysqli_fetch_array(mysqli_query($conn, "select * from user where id='$id' and ps=md5('$ps')"));
if(isset($row['id'])){
if($id=='guest' || $id=='blueh4g'){
echo "your account is blocked";
}else{
echo "login ok"."<br />";
echo "FLAG : ".$FLAG;
}
}else{
echo "wrong..";
}
}
?>
<!DOCTYPE html>
<style>
* {margin:0; padding:0;}
body {background-color:#ddd;}
#mdiv {width:200px; text-align:center; margin:50px auto;}
input[type=text],input[type=[password] {width:100px;}
td {text-align:center;}
</style>
<body>
<form method="post" action="./">
<div id="mdiv">
<table>
<tr><td>ID</td><td><input type="text" name="id" /></td></tr>
<tr><td>PW</td><td><input type="password" name="ps" /></td></tr>
<tr><td colspan="2"><input type="submit" value="login" /></td></tr>
</table>
<div><a href='?view-source'>get source</a></div>
</form>
</div>
</body>
<!--
you have blocked accounts.
guest / guest
blueh4g / blueh4g1234ps
-->
이 PHP 코드는 사용자 로그인 정보를 처리하고, 특정 조건에 맞는 사용자가 로그인 시 **`$FLAG`**를 출력하는 시스템입니다. 이 코드에서의 핵심은 로그인 시 **`id`**와 **`ps`**를 이용해 데이터베이스에서 정보를 조회하는 부분과, 로그인 후 특정 계정이 차단되어 있는 경우입니다. 아래에 분석과 함께 플래그를 볼 수 있는 방법을 설명하겠습니다.
### 코드 분석
1. **`$_GET['view-source']`**:
- URL에 `?view-source` 파라미터가 포함되어 있으면 현재 파일의 소스를 출력합니다. 즉, **소스코드를 볼 수 있는 기능**이 제공됩니다.
2. **로그인 처리 (`$_POST['id']`와 `$_POST['ps']`)**:
- 사용자가 로그인할 때 제출하는 **ID**와 **비밀번호**를 처리합니다.
- 로그인 정보는 **`mysqli_real_escape_string()`**으로 필터링 되어 SQL 인젝션을 방지합니다.
- 비밀번호는 **MD5 해시**를 이용하여 데이터베이스에 저장된 해시값과 비교됩니다.
3. **차단된 계정**:
- `guest`와 `blueh4g` 계정은 로그인할 수 없도록 차단되어 있습니다. 로그인 시 이 계정들에 대해서는 `"your account is blocked"` 메시지가 출력됩니다.
4. **성공적인 로그인**:
- 로그인에 성공하면 `"login ok"`와 함께 **`$FLAG`** 변수를 출력합니다.
- `id`와 `ps`가 데이터베이스에 존재하고 일치하면 로그인이 성공하고, **플래그**가 출력됩니다.
### 플래그를 볼 수 있는 방법
이 코드는 **`id`와 `ps`**가 정확하게 일치하는지 확인합니다. 이때 `ps`는 **MD5 해시**로 비교되며, 특정 사용자의 비밀번호를 알아내면 **플래그를 볼 수 있습니다**.
#### 1. **소스코드 확인**
- **`?view-source`**를 이용하여 현재 페이지의 소스를 볼 수 있습니다. 소스 코드를 보면, 데이터베이스와 관련된 코드와 사용자가 로그인할 때 **MD5 해시를 사용한다는 사실**을 확인할 수 있습니다.
#### 2. **차단되지 않은 계정으로 로그인**
- `guest`와 `blueh4g`는 차단된 계정이므로 **이 계정을 사용해서는 로그인할 수 없습니다**.
- 다른 계정 (예: `admin` 또는 테스트 계정 등)을 이용하여 로그인해야 합니다.
#### 3. **비밀번호 추측**
- **`ps`**는 MD5 해시로 비교되므로, **해당 계정의 실제 비밀번호**를 알아내면 MD5 해시로 변환하여 로그인할 수 있습니다. 예를 들어, `blueh4g`의 비밀번호는 `blueh4g1234ps`입니다.
따라서 `blueh4g1234ps`를 MD5로 변환한 후 이를 `ps`에 넣어 로그인하면 플래그를 볼 수 있을 것입니다.
#### 예시:
1. `blueh4g1234ps`를 MD5로 해시한 값은 `4d6e703f6cfc91f0ff5a1c1709d0b1c6`입니다.
2. `id = blueh4g`와 `ps = 4d6e703f6cfc91f0ff5a1c1709d0b1c6`을 사용하여 로그인하면 됩니다.
### 해결 방법 요약
1. **소스 보기**: `?view-source`로 소스코드를 보고, MD5 해시와 SQL 쿼리를 확인합니다.
2. **차단된 계정 제외**: `guest`와 `blueh4g`는 차단되어 있으므로 다른 계정을 사용해야 합니다.
3. **비밀번호 확인**: 해당 계정의 비밀번호를 MD5로 변환하여 로그인합니다.
4. **플래그 확인**: 로그인에 성공하면 **`$FLAG`** 값을 볼 수 있습니다.
https://kangsecu.tistory.com/36
[Wargame.kr] login filtering 문제풀이
이번 시간에는 [Wargame.kr]의 문제인 login filtering 이라는 문제를 풀어보겠습니다. 이 문제의 점수는 450p 입니다. 우선 문제에 들어가면 이렇게 id와 password를 입력할 수 있는 로그인 폼이 있습니
kangsecu.tistory.com
<!-- you have blocked accounts. guest / guest blueh4g / blueh4g1234ps -->
이렇게 주석처리 된 부분에 로그인 id와 password를 적어놓았다.
일단 입력받은 id가 guest 이거나 blueh4g 이면 your account is blocked
쿼리상에선 알파벳의 대소문자 구분이 없고, php상에선 그대로 인식하므로
Guest 같이 대소문자를 섞어서 id를 입력하면 된다.
Guest 뿐만 아니라 Blueh4g도 가능.
패스워드는 그대로 입력해준다.
로그인에 성공하면 Password가 뜨고, 인증하면 된다.
출처 ㅣ https://mitny.github.io/articles/2017-07/Wargamekr-login-filtering
캬; php랑 쿼리 특징을 이용한 문제였다. 심플 이즈 더 베스트..!
'Dreamhack > Dreamhack Wargame (Challenge)' 카테고리의 다른 글
[69] IT 비전공자 [dreamhack] Command Injection Advanced문제 풀기 (0) | 2024.11.17 |
---|---|
[68] IT 비전공자 [dreamhack][wargame.kr] strcmp문제 풀기 (0) | 2024.11.16 |
[66] IT 비전공자 [dreamhack]off_by_one_001문제 풀기 (0) | 2024.11.14 |
[65] IT 비전공자 [dreamhack]cmd_center문제 풀기 (0) | 2024.11.13 |
[64] IT 비전공자 [dreamhack]ssp_000문제 풀기 (0) | 2024.11.12 |