wargame.kr 19번 dmbs335 라는 문제다.
점수는 700point. 점수가 올랐다. 살짝 긴장이 된다.
sql injection 문제인 것 같다. 시작해보자.
흠... 검색 가능한 게시판이 보인다. 검색어로 sql injection이 이루어질 것 같다.
소스부터 확인해보자.
일단 먼저 select 구문에 $where_clause라는 변수를 통해 입력이 가능할 것 같다.
그렇다면 이 변수의 값을 원하는 값으로 넣어줘야하는데 관련된 소스를 찾아봤다.
보아하니 query_parts라는 변수가 존재하면 이 변수의 값을 통해 where_clause의 값이 정해지는 것 같
고 query_parts는 col이란 변수가 존재하면 값이 만들어 지는 것 같다.
그렇다면 col의 값을 매칭되지 않는 값으로 넘겨 존재하지 않게 만들고 query_parts의 값을 내가 원하는 쿼리값으로 만들면 성공적으로 sql injection이 일어날 것 같다.
그렇다면 query_parts의 값을 원하는 값으로 만들어야 되는데 자세히보니 url 값이 넘어올 때 parse_str란 함수가 씌워진다. 뭔가 하고 찾아봤더니 url값을 받아 변수로 만들어 주는 함수란다.
그렇다면 이 함수를 통해 임의로 col의 값을 매칭되지 않는 값으로 변조하고 query_parts의 내가 원하는 값으로 추가해버리면 될 것 같다.
burp suit를 키고 url값에 1 union select 1,2,3,4 # 을 줘봤다. 정상적으로 나온다.
그렇다면 이제 할 일은 정해졌다. simpleboard 문제에서 썻던 쿼리를 거의 그대로 가져다 썻다.
먼저 1 union select table_name,2,3,4 from information_schema.tables # 쿼리를 주고 테이블을 구한다.
다음으로 플래그를 구한다. 1 union select column_name,2,3,4 from information_schema.columns where table_name='Th1s_1s_Flag_tbl'#
마지막으로 플래그를 구한다. 1 union select f1ag,2,3,4 from Th1s_1s_Flag_tbl #
성공! 점수가 올라서 살짝 기대했는데 생각보다 쉬워서 맥이 빠졌던 문제.
|