워게임/CTFlearn

[CTFlearn] Inj3ction Time - 웹해킹 / SQL Injection

SecurityMan 2022. 11. 13. 11:00

 

CTFlearn의 서른 여섯번째 문제

 

사실 이 문제는 이전에 포스팅한 문제보다 훨씬 앞에 있는데

 

빼먹고 넘어가버려서 실제 CTFlearn에 있는 문제 순서와 포스팅 순서가 조금 다르게 되어버렸다.

 

반응형

 

오랜만에 만난 Hard 난이도의 문제이다. 점수는 무려 100점이다.

 

난이도와 점수때문에 조금 흠칫 할수도 있지만

 

이 문제는 SQL Injection의 정석같은 문제라 그렇게 어렵지 않게 풀 수 있다.

 

문제설명에서 문제 페이지 주소가 제공되고,

 

힌트로 UNION 이 도움이 될 거라고 알려주고 있다.

 

 

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

 

Dog Viewer 라고 되어있고, ID를 입력할 수 있는 칸이 보인다.

 

아래쪽에 나오는 정보를 보니 강아지들 정보를 조회하는 기능인것 같다.

 

 

시험삼아 ID 입력창에 HELLO 라고 입력해봤는데,

 

URL에서 id 파라미터를 이용해 GET 방식으로 데이터를 전달하는것을 확인할 수 있었다.

 

 

몇번 테스트 해보니 ID 칸에는 숫자를 입력해야된다는 것을 알았고,

 

ID 가 1,2,3 에 해당하는 강아지들 정보가 DB에 입력되어있다는것을 확인했다.

 

ID에 존재하지 않는 0을 입력하고, 뒤에 OR 1=1-- - 을 붙혀봤더니,

 

0이라는 ID가 존재하지 않음에도 아래쪽 결과로 모든 강아지들의 정보가 출력된것을 볼 수 있었다.

 

SQL Injecion 이 성공했기 때문에 이런 결과가 나온 것이다.

 

SELECT Name, Breed, Color FROM Dogs WHERE ID = ? 이런식으로 쿼리가 구성되어 있었을 것인데

 

SELECT Name, Breed, Color FROM Dogs WHERE ID = 0 OR 1=1-- - 이렇게 입력값이 들어가면서

 

WHERE 절이 항상 참이되어 모든 Dogs 테이블 전체가 조회된 것이다.

 

 

이제 힌트로 주어진 UNION을 이용해서 SQL Injection 을 수행하면 된다.

 

UNION 을 이용할때 주의할 점은

 

인젝션할 테이블과 UNION 할 테이블의 컬럼 수가 같아야 한다는 것이다.

 

왼쪽처럼 컬럼 수가 다르면(3개) 아무런 결과가 나오지 않지만,

 

오른쪽처럼 컬럼 수가 같으면(4개) 결과가 출력된다.

 

1,2,3 번째 컬럼이 각각 Breed, Name, Color 에 매칭되어있는것을 볼 수 있다.

 

 

다음으로 테이블과 컬럼명을 한번에 추출해 봤다.

 

0 union select column_name,table_name,3,4 from information_schema.columns-- -

 

라고 입력하면 첫번째 줄에 table_name, 두번째 줄에 column_name이 출력된다.

 

 

쭉 아래로 내려보면 w0w_y0u_f0und_m3 테이블에

 

f0und_m3 컬럼이 있는것을 볼 수 있다.

 

 

테이블 이름과 컬럼 이름을 알아냈으니

 

0 union select 1,f0und_m3,3,4 from w0w_y0u_f0und_m3-- - 형태로 입력해서

 

플래그를 추출하면 된다.

반응형