일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Linux
- Python
- hacking
- Los
- lordofsqlinjection
- CODEGATE
- SQLInjection
- 시스템
- CCE
- ctf
- rubiya
- SQL
- Writeup
- crosssitescripting
- 웹해킹
- 시스템프로그래밍
- web
- WebHacking
- 화이트햇콘테스트
- 운영체제
- webhackingkr
- webhacking.kr
- ubuntu
- sqli
- SQL Injection
- 프로세스
- 해킹
- 상호배제
- XSS
- 알고리즘
- Today
- Total
One_Blog
SQL INJECTION - SQL Query삽입 취약점 본문
오늘은 정말 간단하게 SQL Injection 취약점에 대해서 알아보도록 하겠다.
웹애플리케이션의 대부분의 취약점은 사용자의 입력으로부터 발생한다.
그리고 웹 애플리케이션의 대부분은
입력란에 입력을 하는 사용자가 신뢰할 수 없는 사용자던,
신뢰할 수 있는 사용자던 상관없이 입력을 받아들인다.
물론 입력값을 받아들이는 과정에서 대부분 필터링을 거치지만,
입력 자체는 자유롭게 할 수 있기에,
SQL Injection이라는 고전 취약점이 아직도 활개를 칠 수 있다.
SQL Injection?
말 그대로 , SQL 삽입 취약점이다.
예를들어, 웹 페이지에서 사용자의 입력을
SELECT * FROM members WHERE id='사용자 입력' and pass ='사용자 입력';
과 같은 식으로 받아들인다고 가정해보자.
물론 당연히 필터링도 없다는 전제를 한다.
일반적으로 사용자는,
id : guest
pw : guest1234 와 같은 평범한 입력값을 줄 것이다.
그러나, 여기서 악의적인 사용자는 매우 특이한 생김새의 입력을 주게 된다.
id : admin
pw : ' or '1'='1
입력이 이렇게 되면, 웹 애플리케이션은 이 입력을 어떻게 처리할까?;
SELECT * FROM members WHERE id='admin' and pass=''or'1'='1';
이렇게 되어버린다.
이러면 Query 는,
members 테이블에서 id가 admin 인 계정을 불러와버린다.
and pass=''or'1'='1'의 값이 참이기 때문이다.
그럼 공격자는, admin계정의 비밀번호를 몰라도 admin계정에 로그인할 수 있게된다.
이 얼마나 충격적인가.
만약 Instagram이나 Facebook과 같은 대형 사이트가 입력값 필터링과 같은 보호가 되고 있지 않다면,
당신 계정은 id만 드러나도 언제든 털릴 수 있는 것이다.
그렇다면 이러한 SQL Injection은 어떻게 막을 수 있을까?
그리고 그렇게 취약점이 막히면, 어떻게 우회할까?
해당 정보에 대해선 다음 블로그 글에서 알아보도록 하겠습니다.
급하게 쓰느라 글이 정리가 안되어 있네요,,내일은 좀 더 깔끔한 글 업로드 하겠습니다.
읽어주셔서 감사합니당.
'웹해킹' 카테고리의 다른 글
MYSQL과 함께하는 로그인 로직 살펴보기 (식별과 인증 - 2) (0) | 2022.10.25 |
---|---|
MYSQL과 함께하는 로그인 로직 살펴보기 (식별과 인증 - 1) (0) | 2022.10.24 |
MYSQL :: INSERT / UPDATE / SELECT / DELETE 구문 (1) | 2022.10.20 |
MYSQL - 데이터베이스와 테이블 생성구문(기초) (0) | 2022.10.19 |
WEB Browser와 Server 사이 요청과 응답에 관하여 (2) | 2022.10.18 |