문제를 읽어보면 SQL injection 문제라는 것을 알 수 있다.
start 버튼을 누르면
다음과 같이 ID 입력 창이 나온다.
ID를 아무거나 입력 한 후 join 버튼을 누르면(id에 공격 코드 넣어도 안 먹힘)
채팅창이 나온다.
채팅창에 이제 아무거나 입력을 해보자
다음과 같이 아무거나 입력 후 개발자 도구를 통해 이 채팅이 어디로 가는지 확인해 보면 된다.
개발자 도구에서 chat.php를 확인하면 chatlog.php?t=1이랑 chatview.php?t=1&ni="+ni라는 부분을 볼 수 있다.
chatlog.php = 현재까지의 채팅 개수 확인하는 페이지
chatview.php = 현재까지의 채팅기록을 볼 수 있는 페이지
우선 chatlog.php 페이지를 들어가보면(/chatlog.php?t=1)
다음과 같이 숫자가 나오는데 이 숫자가 문제가 나온 시점부터 지금까지의 채팅 개수이다.
이제 이 숫자보다 적은 값을 chat view.php에 ni 변수 값에 집어 넣으면 ni 변수부터 현재까지의 채팅 기록을 볼 수 있다.
이번에 내가 3개(1,11,111)의 채팅을 입력했으므로 ni 값에 55272를 대입해보겠다.
다음과 같이 내가 입력한 채팅 기록을 볼 수 있다.
이 문제가 SQL Injection 문제인 만큼 이 변수를 이용해서 SQL Injection을 해봐야한다.
우선 ni변수 뒤에 or 1을 붙여 보겠다.(/chatview.php?t=1&ni=55272 or 1)
모든 채팅 기록을 볼 수 있다.
다음으로 union select 문을 이용하여 테이블의 컬럼 갯수를 확인 했다.
-> union select 숫자 --
다음과 같이 숫자를 늘려 가면서 컬럼의 갯수를 확인한다.
1. FALSE 값 입력(union select 1 --)
아무 값도 나오지 않는다.
2. TRUE 값 입력(union select 1,2,3,4,5 --)
채팅 기록이 나온다.
이를 통해 테이블의 컬럼 갯수가 5개라는 것을 알 수 있다.
그리고 페이지의 마지막을 확인하면
union select 구문을 입력하였을 때 페이지에 출력되는 값은 2,3,5 번째 값이라는 것을 알 수 있다.
다음으로 테이블 명을 알아보았다.
-> union select 1,table_name,3,4,5 from information_schema.tables --(table_name은 2,3,5번째 아무 곳이나 집어 넣어도 됨)
집어 넣으면
존재하는 테이블을 모두 출력하는데 마지막에 있는 chat_log_secret이라는 테이블이 많이 의심스럽기 때문에 chat_log_secret이라는 테이블을 유심히 보았다.
다음으로는 컬럼명을 파악하기로 했다.
-> union select 1,column_name,3,4,5 from information_schema.columns --
다음과 같이 입력하면
다음과 같이 여러개의 컬럼들을 확인할 수 있지만 나는 여기서 readme라는 컬럼을 확인해 보았다.(다른 것은 안나옴)
-> union select 1,readme,3,4,5 from chat_log_secret --
다음과 같이 입력하면
flag를 획득할 수 있다.(모자이크 처리된 부분이 flag)
'웹해킹 > wargame.kr' 카테고리의 다른 글
php? c? (1) | 2019.11.07 |
---|---|
img recovery (0) | 2019.10.24 |
type confusion (0) | 2019.10.22 |
tmitter (0) | 2019.08.12 |
md5 compare (0) | 2019.08.12 |