관리 메뉴

Information Security

SQL Injection (Get/Search) 본문

Web Security/Bee-Box

SQL Injection (Get/Search)

HackingPractice 2019. 8. 11. 12:47

SQL Injection (Get/Search)

- SQL 인젝션은 사용자가 입력한 값을 서버에서 검증하지 않고 데이터베이스 쿼리 일부분으로 인식하여 데이터베이스의 정보가 노출되거나 인증이 우회되는 취약점이다.

 

Level (Low)

데이터베이스 영화 정보 내용들을 확인했다.

그림 1-1 데이터베이스 내용

입력란에 Iron Man을 입력해 Iron Man 데이터를 보여주는 것을 알 수 있다.

그림 1-2 Iron Man 데이터

SQL Injection 공격을 시도하기 전에 싱글쿼터를 입력해 오류가 나는 것을 알 수 있다.

그림 1-3 싱글 쿼터

‘ or 1=1# 쿼리문을 이용해 SQL Injection 공격을 시도해 데이터베이스를 보여주는 것을 알 수 있다.

그림 1-4 SQL Injeciton 공격

UNIONSELECT 문이 둘 이상일 때 이를 결합하여 두 질의의 결과를 하나로 반환한다. 2,3,4,5 컬럼이 조회된 다는 것을 알 수 있다.

그림 1-5 UINON 쿼리문

2번 컬럼 자리에 시스템 변수 @@version을 삽입 했는데 OS 버전 정보가 노출되는 것을 알 수 있다.

그림 1-6 OS 버전

3번 컬럼 자리에 database(), 4번 컬럼 자리에 user() 시스템 변수를 삽입했는데 데이터베이스 명과 현재 사용자의 아이디가 출력했다.

그림 1-7 데이터베이스명과 사용자 아이디

테이블 명을 확인하려고 information_schema를 사용해 데이터베이스 서버에 존재하는 모든 테이블 명을 출력한다.

그림 1-8 모든 테이블명

웹 브라우저에서 데이터베이스에 저장된 users 칼럼의 내용을 출력하는데, id 컬럼에는 회원 순서, login 칼럼에는 아이디, password 칼럼에는 비밀번호의 해시값을 출력한다.

그림 1-9 계정 정보 노출

SHA-1 해시값을 복호화했는데 비밀번호가 노출되는 것을 알 수 있다.

그림 1-10 비밀번호 노출

Level (Medium)

Level (Medium)은 그림 1-2와는 다르게 Injecton 공격이 막혀있는 것을 알 수 있다.

그림 1-11 Medium

대응방안

싱글쿼터를 입력해 오류 메시지가 나오지 않는다면 SQL 인젝션이 불가능하다. 입력 데이터를 Level 별로 우회하고 있는 것을 알 수 있다.

그림 1-12 Injection 우회

mysql_real_escap_string 함수를 사용하여 입력한 데이터를 우회한다. 사용자 입력 값에 SQL 문법에서 사용하는 특수 문자가 있을 경우 백슬래시를 붙여 입력 데이터를 SQL 문법으로 인식하지 않게 방어한다.

그림 1-13 mysql_real_escape_string 함수

 

'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