Web Hacking/Study

SQL Injection 실습(2)

박연준 2023. 7. 1. 23:02

SQL Injection 실습(2)

이전에 실습했던 oyesmall 홈페이지 데이터베이스의 구조는 MS-SQL을 사용하고 시스템 테이블을 이용해 데이터베이스 정보를 획득할 수 있다.

 

information_schema.tables 함수는 기본 MS-SQL 데이터 베이스에 있는시스템 테이블의 함수이며 저 함수를 구글에 검색해보면 다양한 함수를 알 수 있다. 다음과 같이 TABLE_NAME 함수를 사용해 테이블의 이름을 알 수 있다.

 

information_schema.columns 를 검색해보면 다음과 같이 TABLE_NAME과 COLUMN_NAME이 나오는데 COLUMN_NAME을 이용하여 컬럼의 이름을 얻어 수 있다.

 

 

oyesmall의 회원가입 창에서 주소를 찾는 곳에서 SQL 문을 삽입해 데이터베이스에 있는 취약점을 이용해 정보를 획득할 수 있다.

 

상봉2동을 입력하면 다음과 같이 띄어쓰기를 기준으로 총 5개의 값이 들어가는 것을 확인했다.

 

'UNION SELECT '1','2','3','4', table_name FROM information_schema.tables-- 를 입력하게 되면 시스템 테이블, 즉 데이터 베이스의 모든 테이블이 뽑혀져 나오게 된다. 5번 째의 값에 테이블 이름이 잘 나오는 것을 확인할 수 있다.

 

 

'UNION SELECT '1','2','3','4', column_name FROM information_schema.columns WHERE table_name='Members' -- 를 입력하여 시스템 테이블의 컬럼 중 테이블의 이름인 Members가 참인 테이블의 컬럼명을 확인할 수 있다. 따라서 비밀번호는 passwd라는 컬럼 명 그리고 아이디는 user_id라는 컬럼 명이라고 유추할 수 있다.

 

 

컬럼명도 확인하였으니 이제 컬럼의 데이터를 확인해보면 된다. 회원의 테이블 이름은 Members 이고 아이디와 비밀번호의 컬럼은 각각 user_id , passwd 이므로 주소찾기 입력란에 'UNION SELECT '1','2','3', user_id, passwd FROM Members--를 입력하면 아이디와 패스워드가 뽑히는 것을 확인할 수 있다.

 

다음으로 oyesmall 페이지에 Red Zone이라는 관리자 페이지 같은 곳이 있는데 위 주소찾기에 UNION SQLi 구문을 응용해 관리자의 아이디와 비밀번호를 알아낼 수 있다.

 

처음 테이블을 검색했을 때 admin_tb라는 테이블이 있었으니 여기부터 컬럼 명을 검색해보기 위해 'UNION SELECT '1','2','3','4', column_name FROM information_schema.columns WHERE table_name='admin_tb' -- 라고 입력하면 시스템 컬럼 중 테이블 이름이 admin_tb인 컬럼 명이 다 나오게 된다.

 

 

adminid와 adminpwd가 관리자의 아이디와 비밀번호로 유추할 수 있으므로 'UNION SELECT '1','2','3',adminid, adminpwd FROM admin_tb --를 입력하게 되면 admin pasaswd 라는 값이 나왔다.

따라서 관리자 페이지 로그인 화면에 아이디와 비밀번호인 admin, passwd를 입력하면 관리자 계정 페이지에 로그인한 것을 확인할 수 있다.

 

'Web Hacking > Study' 카테고리의 다른 글

File Download 취약점과 대응방안  (0) 2023.07.01
File Upload 취약점과 대응방안  (0) 2023.07.01
Non-Relational DBMS  (0) 2023.07.01
Relational DBMS  (0) 2023.07.01
SQL Injection 취약점  (0) 2023.07.01