일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Nop Slide
- ftz
- 보안뉴스
- HackCTF
- 리버싱
- 웹해킹
- BOF
- x64dbg
- 버퍼오버플로우
- webhacking
- RITSEC CTF 2019
- Hackerschool
- reversing
- Next.js
- PWN
- 리눅스
- NewsClipping
- Shadow 동아리
- writeup
- requests
- RITSEC
- termux
- 뉴스클리핑
- buffer over flow
- Linux
- SQL Injection
- Python
- CodeEngn
- 어셈블리어
- ctf
Archives
- Today
- Total
Jaeseo's Information Security Story
SQL Injection 기초 개념 본문
SQL Injection의 정의
- 데이터 베이스 관리 언어 SQL을 통해 데이터베이스에 접근 시 비정상적인 구문을 삽입하여 공격하는 기법이다.
주로 클라이언트에서 서버로 전송하는 입력 값을 조작하여 행하여 진다.
이는 개발자가 입력 받은 값이 정상적인지 필터링 하지 못하여 발생하는 취약점이다.
SQL Injection의 위험성
-
데이터베이스 내의 정보를 무단으로 유출 및 변조
-
데이터베이스 기반의 인증 우회 (계정 인증 우회) 등..
-
매우 오래된 공격 기법 이지만 DB에 접근 할수 있다는 점 아직도 많은 웹사이트가 취약하여 OWASP에서 발표한 웹 주요 취약점 TOP 10에서도 1위를 차지하고 있는 공격 기법이다.
OWASP TOP 10 2017 1 인젝션 2 취약한 인증 3 민감한 데이터 노출 4 XML 외부 개체(XXE) 신규 5 취약한 접근 통제 합침 6 잘못된 보안 구성 7 크로스 사이트 스크립팅(XSS) 8 안전하지 않은 역직렬화 신규 9 알려진 취약점이 있는 구성요소 사용 10 불충분한 로깅 및 모니터링
SQL Injection 영향을 주는 문자
문자 | 역할 |
---|---|
' | ' ' 닫는 역할 |
" | " " 닫는 역할 |
-- | 뒷문장 주석처리 |
; | 앞 명령어 종결 |
/**/ | 주석처리(공백우회에도 사용) |
SQL Injection 기본 원리
예를 들어 아래와 같이 ASP 서버쪽에서 userid와 password를 넘겨 받아 아래의 코드로 체크를 한다고 생각을 해본다.
select * from user_data where userid = ' & userid & ' and password = '& password & '
일반적으로는 사용자가 id , pass를 입력한다면 아래와 같이 Query를 진행하는데
select * from user_data where userid = ' id ' and password = ' pass '
이때 id입력 창에 '를 추가 하고 -- 를 통해 뒷문장을 주석 처리 한다면 어떻게 되는지 생각을 해본다.
select * from user_data where userid = ' ' -- ' and password = '& password & '
위와 같이 되는데 이때 결과적으로는 아래의 Query가 진행하게 되는 것을 볼 수가 있다.
select * from user_data where userid = ' ' --
이제 이 점을 활용 하여 공격을 해본다.
select * from user_data where userid = ' ' or 1=1 -- ' and password = '& password & '
위의 상황은 id 입력 값으로 ' or 1=1 -- 으로 집어 넣은 상황이다.
select * from user_data where userid = ' ' or 1=1 --
이때 실제로 작동하는 것은 위와 같은 Query가 작동하게 되는데 userid가 어떤 것이 오든 or 연산자 덕분에 뒤의 값이 참이 와서 무조건 True가 오게되는 것을 볼 수가 있다.
이러한 방법은 매우 간단한 방법이며 실제로 서버로 처리될때에는 다양한 문자열이 필터링 되어 처리가 되기 때문에 실제로 공격이 가능한 사이트는 거의 전무 하다.
'Security Study > Web hacking' 카테고리의 다른 글
Python requests를 이용한 blind injecthion 스크립트 제작 (2편) (2) | 2019.10.23 |
---|---|
Python requests를 이용한 blind injecthion 스크립트 제작 (1편) (2) | 2019.10.23 |
UNION Injection (0) | 2019.10.18 |
SQLMAP - 사용법 (0) | 2019.10.15 |
Blind Sql Injection 공격 (0) | 2019.10.15 |
Comments