본문 바로가기

웹해킹/wargame.kr

web chatting

문제를 읽어보면 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' 카테고리의 다른 글

web chatting  (0) 2020.02.05
php? c?  (0) 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