wargame.kr 13번 tmitter 라는 문제다.

점수는 600point!

데이터베이스 정보를 주고 이를 참고해 admin으로 로그인 하라는 것 같다. 시작해보자.

아이디를 등록하는 화면이다.

일단 admin으로 로그인 하랬으니까 admin사용자를 한번 등록해봤다.

? 이미 있다네? 그러면 sql injection으로 로그인하라는 건가..? 흠... 일단 소스부터 보자.


별다른게 없다. sql 구문도 딱히 안보이고 소스만보고는 도통 뭐하라는건지 모르겠다.

생각해보니 처음에 힌트에서 데이터베이스 테이블 구조를 알려줬었다.

admin이 등록되는 id 부분이 primary key가 아니라 별 문제없이 중복 등록이 되어야 된다고 생각했다.

근데 안된다. 데이터베이스에서 막는게 아니라면 숨겨진 php소스 어딘가에서 테이블에 값을 넣기 전에 입력된 값과 테이블에 존재하는 admin 사용자를 비교해 중복등록를 해서 막는 것 같다.  

그러면 입력된 값이 쿼리에 등록되려면 admin이라는 값과 비교할때는 다른 값으로 들어와 동일한지 체크 하는 과정을 넘어가고 쿼리에 등록될 때는 admin사용자인 것처럼 등록되록 하면 될 것 같다.

말이 쉽지 처음엔 이걸 어떤식으로 해야 될지 감이 안왔다. 일단 구글링.

찾아보니 데이터베이스에 데이터를 삽입할때 지정한 크기 이상의 값이 들어가면 초과된 부분은 잘라내고 trim함수가 적용되어 오른쪽 공백이 싹 다 날라가게 설정이 되어있단다.

이를 활용해 입력시 admin                           1이런 방식으로 지정된 크기인 32바이트까지는 공백을 주고 그 이후에 다른 값을 줘봤다. 이런식으로 등록하면 php코드 상에서 비교할 때에는 다른 값이라 체크가 통과되지만 이 값이 sql 쿼리로 넘어갈때 뒤에 초과된 부분과 공백부분이 잘려 php에서 체크하는 필터링을 우회해 중복 등록이 되는 것 같다.

전체적은 흐름은 문제에서 제공해주는 소스에는 보이지 않는 부분이라 대충 이럴거라 유추해본 거라 정확하지 않을 수 있다. 이 문제에서 원하는 핵심 포인트는 데이터베이스의 저런 특성을 알게 하는 것 인 것 같다.

php 상에서  입력값에 길이 제한을 주었기 때문에 burp suit 켰다.

id 값을 변조해서 입력

admin 존재한다는 에러화면이 아닌 정상 로그인 화면이 나타난다. 로그인 시도!


정상적으로 성공하였다. 데이터베이스에 저런 취약점이 존재하는지 새로 알게 되었다.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr web chatting  (0) 2018.01.04
wargame.kr SimpleBoard  (0) 2018.01.04
wargame.kr type confusion  (0) 2018.01.04
wargame.kr strcmp  (0) 2018.01.04
wargame.kr EASY_Crackme  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,