공부/웹해킹 (Web hacking)

[드림핵 | 웹해킹] LEVEL 1: [wargame.kr] tmitter

eunjuu 2023. 10. 31. 16:52
728x90

👾 문제 설명

you need login with "admin"s id!

===========================
create table tmitter_user(
    idx int auto_increment primary key,
    id char(32),
    ps char(32)
);

📎 https://dreamhack.io/wargame/challenges/343

 

[wargame.kr] tmitter

Description you need login with "admin"s id! create table tmitter_user( idx int auto_increment primary key, id char(32), ps char(32) );

dreamhack.io


접속 정보에 "서버 생성하기"를 눌러서 링크에 접속한다. 

이런 페이지가 등장한다. sign in, sign up 2가지로 나눠져있는데, 먼저 sign up 페이지로 이동해 계정을 생성해보겠다.

 

ID는 적어도 4글자 이상 패스워드는 적어도 7글자 이상 필요하다고 한다.

 

<head>
 <style>
  body {background-color:#eef;}
  table td {text-align:center; background-color:#dde;}
  .ex {text-align:left; color:#99a; font-size:9pt;}
 </style>
 <script>
  function chk(f){
   if(f.id.value.length<4){alert("chk id"); return false;}
   if(f.ps.value.length<7){alert("chk ps"); return false;}
   return true;
  }
 </script>
</head>
<body>
<center>
 <img src="./tmitter.png">
 <form onsubmit="return chk(this);" method="post">
  <table>
   <tr><td>ID</td><td><input type="text" name="id" maxlength="32"></td><td class="ex">at least 4char</td></tr>
   <tr><td>PS</td><td><input type="password" name="ps" maxlength="32"></td><td class="ex">at least 7char</td></tr>
   <tr><td colspan=2><input type="submit" value="join"></td></tr>
  </table>
 </form>
</body>
<!-- hint : you need join with admin -->

sign up 페이지의 소스 코드를 확인해보겠다. 마지막 부분에 admin으로 가입하라고 힌트를 주었다.

 

이미 존재...

id가 admin인 계정을 만들려고 보니, 이미 admin 계정이 존재했다.

 

you need login with "admin"s id!

===========================
create table tmitter_user(
    idx int auto_increment primary key,
    id char(32),
    ps char(32)
);

문제에서 db 테이블 내 id 최대 글자 32라는 것을 알려줬는데, 32를 초과하여 입력하게 되면 char()자료형은 수용량까지만 입력을 받고 32글자를 넘어가는 데이터는 받지 않는다. 따라서 33글자부터 다 잘리는 것을 이용하겠다. 

 

 

char() : 고정 사이즈, 남은 공간은 공백으로 채움, 선언된 값을 초과하면 초과한 값은 삭제하고 등록함.

 

   <tr><td>ID</td><td><input type="text" name="id" maxlength="32"></td><td class="ex">at least 4char</td></tr>
   <tr><td>PS</td><td><input type="password" name="ps" maxlength="32"></td><td class="ex">at least 7char</td></tr>

 

아까 확인했던 sign up 소스코드 중 id의 maxlength="32"를 

 

 

<td><input type="text" name="id" maxlength="128">

 

이렇게 32에서 128로 늘려주었다.

(이렇게 하면 sign up 페이지에서 아이디 생성할 때 32 글자 밖에 입력 못 하던 것을 128글자까지 늘릴 수 있다.)

 

스페이스바를 이용해 공백 만들기

id : admin                                1

pw : aaaaaaa

 

이렇게 계정을 생성해주었다.

 

'admin'과 'admin                                1'은 서로 다른 문자열이지만 데이터베이스에서는 동일한 id값으로 등록되게 된다. (이런식으로 중복 계정 생성 가능)

 

id : admin

pw : aaaaaaa

 

이렇게 로그인을 해보면 flag 값이 등장하는 것을 확인할 수 있다.

 

728x90