Dreamhack/Dreamhack Wargame (Challenge)

[77] IT 비전공자 [dreamhack][wargame.kr] tmitter문제 풀기

imaginefuture-1 2024. 11. 25. 08:22

 

홈페이지에 들어가보자

 

엌ㅋㅋ투위..트위터 맞지..이젠 x인가..?

 

 

국룰 guest guest 가자

 

헤엥
새로 아이디를 팠다

 

 

 

 

캬 진짜 트위터네(?)
트윗(?)도 잘 된다

 

 

admin으로 아이디를 새로 팔려고하니 이미 있다 한다

 

 

admin으로 아이디를 새로 생성하고 로그인해야 flag를 볼 수 있는데 이를 어떻게 우회하면 좋을까앙

 

개발자(f12)도구로 스크립트를 먼저 보자

 

 

<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 -->

 

힌트가 있다! 어드민이랑 쪼인해야해요..함께...

 

 

 


 

 

DB mysql sql문에서 char, varchar타입의 자료형의 취약점을 이용한 문제다

char()는 고정 문자열이고

varcahr()는 가변성 문자열이다

 

이렇게 말하면 어려우니 우리 친절한 지피티한테 설명해달라해보자

 

 

 

 

 

 

CHAR와 VARCHAR는 데이터베이스에서 문자열 데이터를 저장하기 위한 데이터 타입이며, 주로 길이와 저장 방식의 차이에서 다릅니다.

1. 약어 의미

  • CHAR: Character (정적 길이의 문자열)
  • VARCHAR: Variable Character (가변 길이의 문자열)

2. 차이점

특징 CHAR VARCHAR

길이 (Length) 고정 길이 (Fixed Length) 가변 길이 (Variable Length)
저장 방식 지정된 길이에 맞춰 공간을 고정적으로 할당. 필요한 만큼만 공간을 사용.
속도 빠름: 고정된 길이로 처리 속도가 빠름. 느림: 길이를 계산하며 저장.
저장 공간 효율성 비효율적: 짧은 데이터에도 여유 공간이 채워짐 (Padding). 효율적: 데이터 길이만큼 저장.
데이터 패딩 (Padding) 짧은 데이터는 공백(Spaces)으로 채워짐. 패딩이 없음.
최대 길이 최대 255자 MySQL 기준 65535자 (테이블 제약 포함)

3. 예시

1) CHAR 예제

CREATE TABLE char_example (
    col1 CHAR(10)
);
  • 입력: 'ABC'
  • 저장: 'ABC ' (공백으로 채워짐)
  • 길이가 고정되어 항상 10자리를 차지.

2) VARCHAR 예제

CREATE TABLE varchar_example (
    col1 VARCHAR(10)
);
  • 입력: 'ABC'
  • 저장: 'ABC' (공백 없이 저장)
  • 필요한 길이만큼 공간을 차지.

4. 사용 시 선택 기준

  • CHAR를 사용하는 경우:
    • 데이터 길이가 고정적인 경우 (예: 우편번호, 국가 코드 등).
    • 속도가 중요한 경우.
  • VARCHAR를 사용하는 경우:
    • 데이터 길이가 가변적이고 공간 효율성이 중요한 경우 (예: 사용자 이름, 이메일 주소 등).

5. 요약

  • CHAR: 고정 길이, 속도 우선.
  • VARCHAR: 가변 길이, 저장 공간 효율성 우선.

 

 

간단하게 CHAR()는 민증, 전화번호, 요런 고정적인 데이터

VARCHAR()는 이름, 이메일주소, 집주소 요런 동적인(?)데이터를 생각하면된다

 

이게 문제를 풀때 왜중요하냐면

 

ID와 PS가 CHAR(32)로 최대 활당됐다

32문자를 입력할 수 있는데, 32자를 넘어가버리면 어떻게 될까?

 

예를 들어 admin을

admin                                        123  (참고로 공백은 27번 공백이다 admin이 5글자니까+27=32)

이렇게 집어넣는다면?

 

admin이 들어갔기에 중복처리됐다 생각할 수 있지만, admin검증코드에서 통과된다 이 후 admin으로 인식하게된다

 

최대길이를 32에서 33로 수정

 

admin공백27+a

스페이스 열심히 27번 세면서 눌렀다

 

아이디가 생성되면

이후 admin 하고 비번 쳐서 로그인 하면 된다

그러면 짜자잔

반갑다 플래그양~