SQL Truncation 문제를 풀어보도록 하겠습니다. SQL 절단??
문제에 들어가면 3개의 탭이 보이네요.
HOME은 빈 화면이고, Register에선 사용자 등록, Administration은 관리자 로그인 기능이 존재하고 있습니다.
우선, Register 탭에서 관리자 USER 등록/생성을 시도해봅니다..
User already in DB라는 에러가 출력되며, admin 계정이 이미 존재함을 알 수 있습니다.
그래서, 등록이 불가능하죠..
SQL Truncation을 구글에 검색해보았더니, SQL Truncation Attack 이라는 공격기법이 존재하였습니다.
https://resources.infosecinstitute.com/sql-truncation-attack/#gref
위의 링크에서 공격 원인과 기법을 파악해서 시도해보았습니다.
MySQL 데이터베이스가 기본 모드에서 실행 중이라면, Administrator 계정이 admin으로, 최대 문자열 길이는 20자로 제한된다고 합니다.
또한, MySQL 에서는 정의된 최대 문자열 길이보다 긴 경우엔 이후 문자열을 자르고 앞의 문자열만 받아들입니다.
따라서, 사용자 이름 길이가 20자로 제한된 상태에서 공격자가 20자 이상을 입력할 경우 새 사용자 이름을 승인하고 데이터베이스에 삽입하는 거죠.
사용자 이름을 admin+(공백 15자)+임의 문자열을 입력하고, 원하는 패스워드 입력 후 등록 버튼을 클릭하면,
20자 이후의 문자열은 자르고, 새로운 유저로 받아들여 데이터베이스에 저장되었습니다.
즉, 이 테이블에는 'admin'과 'admin' 두 개의 관리자가 존재하는 거죠.
Administration 탭에서 본인이 입력한 패스워드를 입력하여 로그인 시도해봅니다.
정상적으로 관리자 권한 획득이 가능하고, Flag 값도 출력되었습니다.^^
'Study > Wargame' 카테고리의 다른 글
[root-me] JSON Web Token (JWT) - Introduction (0) | 2019.12.20 |
---|---|
[root-me] XPath injection - authentication (0) | 2019.07.25 |
[root-me] CRLF (0) | 2019.07.18 |
[root-me] Javascript - Obfuscation1 (0) | 2019.04.15 |
[root-me] Javascript - Authentication2 (0) | 2019.04.15 |