홈페이지에 들어가보자
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으로 인식하게된다
admin공백27+a
스페이스 열심히 27번 세면서 눌렀다
아이디가 생성되면
이후 admin 하고 비번 쳐서 로그인 하면 된다
그러면 짜자잔
'Dreamhack > Dreamhack Wargame (Challenge)' 카테고리의 다른 글
[79] IT 비전공자 [dreamhack]out of money문제 풀기 (0) | 2024.11.27 |
---|---|
[78] IT 비전공자 [dreamhack]Simple Crack Me문제 풀기 (0) | 2024.11.26 |
헤헷헤헷헤헷 드림핵 1000등 (0) | 2024.11.24 |
[76] IT 비전공자 [dreamhack]broken-png문제 풀기 (1) | 2024.11.24 |
[75] IT 비전공자 [dreamhack]SingleByteXor문제 풀기 (0) | 2024.11.23 |