일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- XSS
- 인시큐어뱅크
- logstash
- CTF-d
- igoat
- ctf
- NTFS
- Openstack
- base64
- 안드로이드
- 파이썬
- Docker
- InsecureBank
- elasticsearch
- diva
- foremost
- vulnhub
- lord of sql injection
- beebox
- 2018
- kibana
- Suninatas
- otter
- ESXi
- MFT
- Volatility
- frida
- SQL Injection
- Reflected XSS
- Strings
- Today
- Total
Information Security
SQL Injection (Get/Search) 본문
SQL Injection (Get/Search)
- SQL 인젝션은 사용자가 입력한 값을 서버에서 검증하지 않고 데이터베이스 쿼리 일부분으로 인식하여 데이터베이스의 정보가 노출되거나 인증이 우회되는 취약점이다.
Level (Low)
데이터베이스 영화 정보 내용들을 확인했다.
입력란에 Iron Man을 입력해 Iron Man 데이터를 보여주는 것을 알 수 있다.
SQL Injection 공격을 시도하기 전에 싱글쿼터를 입력해 오류가 나는 것을 알 수 있다.
‘ or 1=1# 쿼리문을 이용해 SQL Injection 공격을 시도해 데이터베이스를 보여주는 것을 알 수 있다.
UNION은 SELECT 문이 둘 이상일 때 이를 결합하여 두 질의의 결과를 하나로 반환한다. 2,3,4,5 컬럼이 조회된 다는 것을 알 수 있다.
2번 컬럼 자리에 시스템 변수 @@version을 삽입 했는데 OS 버전 정보가 노출되는 것을 알 수 있다.
3번 컬럼 자리에 database(), 4번 컬럼 자리에 user() 시스템 변수를 삽입했는데 데이터베이스 명과 현재 사용자의 아이디가 출력했다.
테이블 명을 확인하려고 information_schema를 사용해 데이터베이스 서버에 존재하는 모든 테이블 명을 출력한다.
웹 브라우저에서 데이터베이스에 저장된 users 칼럼의 내용을 출력하는데, id 컬럼에는 회원 순서, login 칼럼에는 아이디, password 칼럼에는 비밀번호의 해시값을 출력한다.
SHA-1 해시값을 복호화했는데 비밀번호가 노출되는 것을 알 수 있다.
Level (Medium)
Level (Medium)은 그림 1-2와는 다르게 Injecton 공격이 막혀있는 것을 알 수 있다.
대응방안
싱글쿼터를 입력해 오류 메시지가 나오지 않는다면 SQL 인젝션이 불가능하다. 입력 데이터를 Level 별로 우회하고 있는 것을 알 수 있다.
mysql_real_escap_string 함수를 사용하여 입력한 데이터를 우회한다. 사용자 입력 값에 SQL 문법에서 사용하는 특수 문자가 있을 경우 백슬래시를 붙여 입력 데이터를 SQL 문법으로 인식하지 않게 방어한다.
'Web Security > Bee-Box' 카테고리의 다른 글
SQL Injection (CAPTCHA) (0) | 2019.08.25 |
---|---|
SQL Injection(POST/Search) (0) | 2019.08.25 |
OS Command Injection (0) | 2019.08.11 |
PHP Code Injection (0) | 2019.08.10 |
HTML 인젝션 – Reflected(Get) (0) | 2019.08.04 |