일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- HackCTF
- termux
- Shadow 동아리
- ftz
- Next.js
- Linux
- PWN
- 웹해킹
- NewsClipping
- SQL Injection
- 어셈블리어
- Nop Slide
- reversing
- RITSEC
- 보안뉴스
- 버퍼오버플로우
- 리버싱
- CodeEngn
- requests
- buffer over flow
- Hackerschool
- Python
- 리눅스
- 뉴스클리핑
- x64dbg
- webhacking
- BOF
- RITSEC CTF 2019
- ctf
- writeup
- Today
- Total
Jaeseo's Information Security Story
UNION Injection 본문
- UNION Injection 이란 SQL Injection 공격의 기법 중 하나로 Union을 통해 데이터를 질의하는 공격이다.
일단 이 공격을 하기 위해서는 union이라는 sql 명령어에 대해 알고 있어야 한다.
union 이란 SQL 집합 연산자이며 질의한 결과를 합치는 연산자이다.
- 단, 모든 칼럼의 값이 동일하여야 한다.
*예시
select * from data1
+--------+--------+
| data1 | data2 |
+--------+--------+
| a | 1000 |
| b | 2000 |
| c | 3000 |
+--------+--------+
select * from data2
+--------+--------+
| data3 | data4 |
+--------+--------+
| d | 4000 |
| e | 5000 |
| f | 6000 |
+--------+--------+
위와 같이 두 개의 테이블이 존재한다고 한다면 UNION을 통해 결합하여 출력을 할 수가 있다.
select * from data1 union select * from data2
+--------+--------+
| data | data |
+--------+--------+
| a | 1000 |
| b | 2000 |
| c | 3000 |
| d | 4000 |
| e | 5000 |
| f | 6000 |
+--------+--------+
이제 이러한 공격이 어떻게 이루어지는지 실습을 해본다.
만약 이러한 주소 찾기 웹사이트가 있다고 하였을 때 일단 어떤 식으로 출력이 되는지 확인을 해본다.
이러한 결과가 나올 때의 테이블의 컬럼 종류와 서버 측에서 작동하는 SQL query문을 예상해본다.
지번 | 시 | 구 | 건물명 | 건물 번호 |
대충 이런 식으로 5개의 컬럼을 가진 DB로 예상이 된다.
select * from 주소DB where 시 like '%입력값%' or 도 like '%입력값%' or 건물명 like '%입력값%'
또한 서버 측에서 SQL query를 위와 같이 질의하는 것으로 예상이 된다.
이때 Union Injection을 통해 공격을 해본다.
일단 공격을 하기 전에 알고 있어야 하는 선 지식이 필요하다.
DB에서는 시스템에서 관리를 위해 시스템 카탈로그 가 있는데 이러한 점을 통해 공격을 진행해본다.
일단 이번 모의해킹 사이트에서는 MSsql을 사용하였다.
MSsql에는 이러한 테이블이 있는데 이러한 정보를 통해 공격을 한다.
-
information_schema.tables 시스템 테이블
1) TABLE_NAME 컬럼명
2) TABLE_NAME 컬럼명 -> 사용자 테이블명 보유 -
information_schema.columns 시스템 테이블
1) TABLE_NAME 컬럼명 -> 사용자 테이블명 보유
2) COLUMN_NAME 컬럼명 -> 사용자 테이블들의 컬럼명 보유
DB에서 테이블 이름과 컬럼이름 가져온다.
'union select '-','-','-', table_name , column_name from information_schema.columns --
그 결과 모든 테이블의 이름과 컬럼명이 결합되어 출력이 되는 것을 볼 수가 있다.
이때 members 테이블 안에 passwd 컬럼과 user_id 컬럼이 있다는 것을 볼 수가 있는데 이러한 정보를 통해 유저의 id와 password 정보를 탈취해본다.
'union select '-','-','-', user_id, passwd from members --
위와 같이 유저의 아이디와 비밀번호를 가져온 것을 확인할 수 있다.
'Security Study > Web hacking' 카테고리의 다른 글
Python requests를 이용한 blind injecthion 스크립트 제작 (2편) (2) | 2019.10.23 |
---|---|
Python requests를 이용한 blind injecthion 스크립트 제작 (1편) (2) | 2019.10.23 |
SQL Injection 기초 개념 (0) | 2019.10.17 |
SQLMAP - 사용법 (0) | 2019.10.15 |
Blind Sql Injection 공격 (0) | 2019.10.15 |