상세 컨텐츠

본문 제목

[wargame.kr] LEVEL18_SimpleBoard

카테고리 없음

by about_SC 2019. 7. 17. 15:53

본문

간단한 게시판이란다.
그리고, UNION SQL Injection을 사용하란다.
그러나, 너는 스크립트로 풀어야할거란다.

 

 

문제 진입 시 간단한 게시판이 뜬다.
서비스가 어떻게 동작하는지 파악해보자.
먼저, hit 열을 보면 조회수 같다.

 

 

임의의 게시글 클릭 시 넘어가는 URL을 확인해보자.
4번째 게시물 클릭 시 idx라는 값에 4가 입력되어 해당하는 게시글의 내용이 화면에 나타난다.
SELECT 문을 이용한 쿼리같다. SQLi가 가능할지도 모르겠다.
하단의 view sorce 링크를 클릭해보자.

 

hit(조회수)가 올라갈 경우, update set 구문을 이용하여 hit 수를 올리게된다.
이 때, 쿠키 값에 전달된 idx 값을 저장하도록 설정했다.
(안하면 뭐 에러가 나겠지?)

게시물 클릭 시 동작하는 select 쿼리의 경우 일반적인 select 구문이 사용되었다.
자, injection 포인트를 찾았겠다 injection을 수행해보자.
mysql_escape_string()가 적용되어 싱글쿼터나 일부 값은 사용이 불가하다.
(https://www.php.net/mysql_escape_string)
(https://www.php.net/manual/en/function.mysql-real-escape-string.php)


 

여기서 포인트는 쿠키값에 idx로 전달되는 값을 그대로 넣어줘야 한다.
안그럼 query 에러를 볼 수 있다. group_concat()를 이용해 테이블 값을 쭈르륵 뽑아보았다.
첫번째 README라는 테이블이 수상했다. 이 테이블의 컬럼 값을 조회해보자.

 

 

이전 SQLi 방어 함수가 구현되어 있어 싱글쿼터 사용이 불가했다.
그렇기에 README 테이블 명을 입력할 때 hex 값을 사용해 이를 우회하였다.
README 테이블의 컬럼을 조회하였을때 flag라는 한 개의 컬럼을 확인할 수 있었다.
이를 조회하면 FLAG 값 획득이 가능할 거 같다.

 

 

이로써 FLAG 값 획득이 가능했다.

 

**POINT : UNION BASED SQL Injection 에 대한 이해, SQL 쿼리가 사용된 소스코드에 대한 이해