Web

Dreamhack(Wargame.kr) - Login filtering

HackHiJack 2022. 1. 1. 00:05
728x90
반응형

오늘은 드림핵의 login filtering문제를 풀어볼 것이다.

 

$ 사전 조사

먼저 웹사이트를 확인 해보자.

그냥 id pw를 입력하는 칸이 나온다.

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..";
  }
 }
?>

위의 php는 로그인을 성공하면 flag를 준다.

 

밑에 주석에서 아래처럼 사용자 정보를 준다.

<!--

you have blocked accounts.

guest / guest
blueh4g / blueh4g1234ps

-->
반응형

$ 취약점 분석

이제 취약점을 찾아보자.

 

일단 로그인을 위 정보로 하면 flag를 주는데, id가 guest, blueh4g 이면 계정이 막혔다고 echo한다.

 

그런데 그 필터링을 하는 if에서 취약점이 발생한다.

만약 id를 guest가 아닌 GUEST처럼 대문자를 넣으면, if문을 통과하여 db에 guest로 들어간다.(여기서 php에 어떻게 들어가는지 몰라서 쓸데없이 삽질을.....ㅠㅠ)

 

그러면 아래처럼 넣으면 로그인에 성공하게되어 flag를 획득할 수 있다.

id : GUEST
ps : guest

728x90
반응형