문제풀이 & 분석

힌트를 확인하면 admin 계정으로 로그인하는 것이 목표라는 것을 알려주고 있고 tmitter_user 테이블 정보를 알려준다.

페이지에 접속하면 sign in, sign up 2가지로 나눠져있다.

먼저, 계정을 만들기 위해 sign up으로 접속하여 아무 계정이나 만들었다.

그 후 로그인해서 접속하면 위와 같이 트위터 페이지가 뜨는 것을 확인할 수 있다.
이 페이지에서 여러가지 시도를 해보았지만 딱히 진전은 없어서 힌트로 돌아왔다.

tmitter_user 테이블에 있는 id,ps 가 32자리로 구성되어있다는 사실을 알 수 있다.
만약, id의 길이가 32자리가 넘어도 계정이 생성될 수 있나?라는 의구심이 들었고 만들어봤다.

먼저, sign up 페이지에 가서 id의 길이제한을 32자리에서 33자리로 바꿔준 후 id가 33자리인 계정을 만들어봤다.

그 후에 로그인을 시도해보니??

로그인이 됐다!
id를 생성할때 33자리로 만들었지만 맨마지막을 뺀 32자리로 로그인을 해야 로그인이 성공했다.
이를 통해 33자리 이상으로 계정을 생성하더라도 32자리만큼 끊어서 계정을 생성한다는 것을 알 수 있다.
만약 웹서버에서 id를 32자리로 끊어내기 전에 id가 존재하는지 확인하는 절차가 먼저라면 어떨까?
예를 들어 [admin 1] 이런식으로 33자리의 id를 만든다면 id가 admin과 중복이 아니라고 판단한 후에 32자로 id를 끊어서 결국 DB에는 admin이라는 id의 계정이 생성될 것이다.
그렇다면, 다음과 같이 공격시나리오를 생각해볼 수 있다.
공격시나리오
1. id를 33자리 + [admin (아무값)] 형태로 생성한다.
2. 생성한 계정으로 로그인을 시도한다.

계정을 생성해보자.
이제 예측한대로라면 33자리가 32자리로 잘라지면서 맨마지막 1은 없어질 것이고 id는 admin이 되어 DB에 계정이 생성됐을 것이다.

이제 admin 계정으로 로그인을 시도해보자.

문제풀이 & 분석

힌트를 확인하면 admin 계정으로 로그인하는 것이 목표라는 것을 알려주고 있고 tmitter_user 테이블 정보를 알려준다.

페이지에 접속하면 sign in, sign up 2가지로 나눠져있다.

먼저, 계정을 만들기 위해 sign up으로 접속하여 아무 계정이나 만들었다.

그 후 로그인해서 접속하면 위와 같이 트위터 페이지가 뜨는 것을 확인할 수 있다.
이 페이지에서 여러가지 시도를 해보았지만 딱히 진전은 없어서 힌트로 돌아왔다.

tmitter_user 테이블에 있는 id,ps 가 32자리로 구성되어있다는 사실을 알 수 있다.
만약, id의 길이가 32자리가 넘어도 계정이 생성될 수 있나?라는 의구심이 들었고 만들어봤다.

먼저, sign up 페이지에 가서 id의 길이제한을 32자리에서 33자리로 바꿔준 후 id가 33자리인 계정을 만들어봤다.

그 후에 로그인을 시도해보니??

로그인이 됐다!
id를 생성할때 33자리로 만들었지만 맨마지막을 뺀 32자리로 로그인을 해야 로그인이 성공했다.
이를 통해 33자리 이상으로 계정을 생성하더라도 32자리만큼 끊어서 계정을 생성한다는 것을 알 수 있다.
만약 웹서버에서 id를 32자리로 끊어내기 전에 id가 존재하는지 확인하는 절차가 먼저라면 어떨까?
예를 들어 [admin 1] 이런식으로 33자리의 id를 만든다면 id가 admin과 중복이 아니라고 판단한 후에 32자로 id를 끊어서 결국 DB에는 admin이라는 id의 계정이 생성될 것이다.
그렇다면, 다음과 같이 공격시나리오를 생각해볼 수 있다.
공격시나리오
1. id를 33자리 + [admin (아무값)] 형태로 생성한다.
2. 생성한 계정으로 로그인을 시도한다.

계정을 생성해보자.
이제 예측한대로라면 33자리가 32자리로 잘라지면서 맨마지막 1은 없어질 것이고 id는 admin이 되어 DB에 계정이 생성됐을 것이다.

이제 admin 계정으로 로그인을 시도해보자.
