Description
tmitter
Category: Web
Source: wargame.kr
Points: 272
Author: Jisoon Park(js00n.park)
Description:
you need login with "admin"s id!
===========================
create table tmitter_user( idx int auto_increment primary key, id char(32), ps char(32) );
Write-up
DB 테이블 구조가 문제에 주어지고, 문제 페이지에 접속해보면 가입과 로그인 메뉴가 있다.
소스 코드를 살펴보면 DB와 마찬가지로 최대 32byte 길이의 id와 패스워드를 입력받도록 되어있다.
이 문제에서 주어지는 가장 큰 힌트는 테이블 구조에서의 char 타입이다. mysql에서 char 타입은 길이가 정해진 문자열 데이터 형으로, 지정된 길이보다 짧은 문자열은 공백으로 padding하여 저장한다. 그렇기 때문에 문자열 뒤에 붙는 공백은 padding 된 공백과 구분이 불가능한 문제가 생긴다.
예를 들면, "admin(공백)"이라는 문자열은 "admin"과 동일한 문자열로 취급된다.
이제, sign up 메뉴로 들어가서 "admin(공백 27개)"이라는 아이디와 대충 아무 비밀번호를 넣고 join을 해보자.
... (admin 계정이 이미 존재한다는) 오류가 발생한다. ㅡ_ㅡ;;
이런저런 테스트를 해보면, id 앞뒤의 공백을 trim으로 지우고 "admin"인지 확인하는 것 같다. burp suite를 이용해서 request를 수정해보자.
admin 뒤에 공백을 이용해서 32글자를 채우고, 마지막에 아무 글자나 붙여서 서버에서 이루어지는 trim을 방지하도록 했다.
별 문제 없이 join이 된것 같다. 이제 로그인 페이지로 가서 admin과 입력했던 password를 입력하면 admin 계정으로 로그인 되고 flag를 획득할 수 있다.
Flag : 607c1e84eef597ef5120b066e1901c5baae59968
'writeups > Web' 카테고리의 다른 글
webhacking.kr 004 (0) | 2019.11.23 |
---|---|
webhacking.kr 001 (0) | 2019.11.23 |
strcmp (0) | 2019.11.23 |
flee button (0) | 2019.11.23 |
DB is really GOOD (0) | 2019.11.23 |