워게임/Root Me

[Root Me] SQL injection - Authentication - GBK - 웹해킹 / Burp Suite

SecurityMan 2022. 9. 26. 11:00

 

Root Me의 세번째 SQL injection 문제

 

이번 문제는 쪼금 어려울 수도 있다.

 

문제자체는 어렵지 않은데 많이 생소하기 때문..

 

반응형

 

문제의 목표는 admin 으로 로그인 하는 것이다.

 

중간에 보면 파란색으로 힌트가 써있는것이 보인다.

 

Do you speak chinese ? 라고 적혀있는데

 

이건 문제 제목에도 적혀있는 GBK 때문이다.

 

GBK 는 중국에서 사용하는 간체 중국어에대한 문자 세트를 말한다.

 

국가표준(国家标准) 을 중국어로 Guojia Biaozhun 이라고 발음하는데,

 

여기서 G 와 B 를따고, 확장하다는 의미인 扩展 (Kuozhan) 에서 K 를 따와서

 

GBK 라고 지었다고 한다.

 

그냥 쉽게 생각하면 컴퓨터로 간체 중국어를 쓰기위해 만든 인코딩이다.

 

 

문제 페이지에 접속하면 이런 화면이 나온다.

 

프랑스어로 된 페이지인데, 딱봐도 로그인을 하는 페이지이다.

 

 

Liste des membres 버튼을 누르면 사용자 목록을 볼 수 있다.

 

이 서버에는 admin 계정 하나만 있다는것을 확인할 수 있다.

 

 

다시 로그인창으로 가서, 

 

아이디를 입력하는 칸에 작은따옴표( ' ) 하나를 입력해본다.

 

이전에 SQL 인젝션 문제를 풀때는 이렇게 작은따옴표를 입력한 뒤

 

그 결과로 Syntax error 가 나는지 살펴봤는데,

 

이번 문제에서는 작은따옴표를 입력해도 로그인 실패 문구만 뜨고 아무런 구문 오류가 보이지 않는다.

 

 

왜 그런지 알아보기 위해 Burp Suite 도구를 이용해 

 

로그인 하는 패킷을 잡아봤다.

 

 

사용자의 아이디를 전달하는 login 변수의 뒤에 [] 를 붙여서 패킷을 보내봤더니

 

서버에서 돌아오는 응답에서

 

addslashes() expects parameter 1 to be string, array given in <b>/challenge/web-serveur/ch42/utils.php

 

이런 경고문구를 발견했다.

 

아까 작은따옴표를 입력했을때 아무런 반응이 없었던 것은

 

addslashes() 함수 때문이었다.

 

 

addslashes 함수는 입력값에 작은따옴표, 쌍따옴표, 역슬래시, Null 바이트가 있으면

 

자동으로 그 앞에 역슬래시를 하나 더 추가해서 보내버린다.

 

이렇게 역슬래시를 하나 더 붙이면 escape 처리가 되어서 악성 행위가 불가능해진다.

 

하지만 이걸 우회하는 방법이 있다.

 

바로 GBK 를 이용하는 것이다.

 

 

이런식으로 작은따옴표 앞에 아무 한자나 하나 적어주면 된다.

 

나는 금이 좋으니 쇠 금(金) 을 이용해봤다.

 

 

인증버튼을 누르면 admin 으로 로그인이 성공해 플래그를 얻을 수 있다.

반응형