반응형
SMALL

1. WHERE 구문

 

[그림 1-1] WHERE SQL 인젝션 공격 과정

[사진 출저: 화이트해커가 되기 위한 8가지 웹 해킹 기술]

 

정상적인 경로라면 사용자가 ID 1 요청하기 위해 ID 1 출력하는 SQL 쿼리 구문을 애플리케이션에 요청하면 애플리케이션은 SQL 구문을 DB 전달한다. DB 필요한 정보를 추출해 ID 1 사용자 정보를 애플리케이션에 전달하고 애플리케이션은 사용자에게 전달해주게 된다.

이에 반해 악의적인 의도를 가진 공격자는 SQL 쿼리문을 조작해 요청값 이외의 정보도 탈취한다. 공격자는 ID 1 이외에도 다른 정보도 탈취하기 위해 or '1'='1이라는 쿼리를 추가해 애플리케이션에 요청하고 애플리케이션은 DB SQL 구문을 전달한다. DB에서 특별한 검증을 하지 않으면 요청 이외의 값들도 어플리케이션에 전달되고 어플리케이션에서 공격자에게 정보를 전달하게 된다.

 

 

(1) Where 구문 DB 정보 탈취 실습

[그림 1-2] 요청 ID

DVWA SQL Injection 항목을 실행하면 UserID 폼에 1 입력해 전송하면 DB 있는 정보들이 그대로 출력된다.

 

[그림 1-3] 소스코드

소스코드를 확인하면 별다른 검증값이 없고 '$id'라는 SQL 구문이 일치하면 DB 동작한다. ''이라는 세미콜론 안에 SQL 구문이 정상적으로 일치하면 SQL 인젝션 공격이 가능하다는 의미다.

 

[그림 1-4] SQL 공격 구문

[그림 1-3]에서 확인했던 ''값의 조건을 맞춰 SQL 공격 구문을 삽입한다. 1' or '1'=1 삽입하면 '' 조건에도 맞게 되고 OR 연산자를 사용하게 되서 OR , 부분만 맞게 되도 참으로 반환되기 때문에 SQL 인젝션 공격이 성사된다. 해당 구문의 SQL 인젝션 공격이 성공하면 모든 DB 정보를 탈취할 있다.

 

2. Union 구문

 

[그림 1-1] UNION SQL 인젝션 공격 과정

[사진 출저: 화이트해커가 되기 위한 8가지 웹 해킹 기술]

 

정상적인 경로라면 사용자가 ID 1 요청하기 위해 ID 1 출력하는 SQL 쿼리 구문을 애플리케이션에 요청하면 애플리케이션은 SQL 구문을 DB 전달한다. DB 필요한 정보를 추출해 ID 1 사용자 정보를 애플리케이션에 전달하고 애플리케이션은 사용자에게 전달해주게 된다.

이에 반해 악의적인 의도를 가진 공격자는 SQL 쿼리문을 조작해 요청값 이외의 정보도 탈취한다. 공격자는 ID 1 이외에도 다른 DB 정보도 탈취하기 위해 1' union select name,pw from users#이라는 SQL 쿼리를 애플리케이션에 전달한다. union 구문은 두개 이상의 select 구문을 합치는데 사용하게 된다. 여기서도 요청 이외에 union 구문을 삽입해 참을 만들어 추가 DB 정보를 탈취한다. DB SQL 공격 쿼리 구문이 전달되고 별다른 검증값을 거치지 않는다면 DB 존재하는 모든 사용자의 이름, 비밀번호가 공격자에게 그대로 전달된다.

 

(1) Union 구문 칼럼 개수 추측 실습

[그림 1-2] Union SQL 공격 구문

Union SQL 공격 구문을 삽입해 실행하면 [그림 2-2] 같이 DB 정보가 그대로 노출됨을 확인할 있다. # Mysql 라인을 처리하는 주석으로 만약 ID, password 창이 있다면 ID # 적용되면 password 창은 모두 주석 처리 되서 참인 결과를 반환한다.

 

[그림 1-3]  SQL 공격 구문

칼럼의 개수를 확인하기 위해 select 1,1,1 삽입해 실행한다.

 

[그림 1-4] 에러 메시지

Union select 구문 실행 결과 에러 메시지가 출력된다. 이는 컬럼의 개수가 3개는 아니라는 의미다. 따라서 공격자는 컬럼의 개수는 2 임을 추측할 있다.

 

[그림 1-5] order by SQL 공격 구문

order by 구문은 SQL에서 지정된 컬럼순으로 오름차순, 내림차순으로 정렬을 해주는 역할을 한다. [그림 2-5]에서 컬럼의 개수를 알아보기 위해 order by SQL 공격 구문을 삽입하면 DB 정보가 그대로 노출 됨을 확인할 있다.

 

[그림 1-5] order by SQL 공격 구문

order by 뒤에 2 붙여 컬럼 2개를 묶어 실행한 결과 DB 정보가 그대로 노출 됨을 있다.

 

[그림 1-6] order by SQL 공격 구문

order by 뒤에 3 붙여 컬럼 3개를 묶어 실행한다.

 

[그림 1-7] 에 페이지

order by SQL 공격 구문 실행 결과 에러 페이지가 출력 됨을 확인할 있다. 에러 페이지가 출력 됨으로써 컬럼의 개수는 2개임을 추측할 있다.

 

(2) Union 구문 계정 탈취

[그림 2-1] 데이터베이스

데이터베이스 명을 알아보기 위해 1' union select schema_name,1 from information_schema.schemata #을 입력해 데이터베이스 명을 확인한다. 입력한 SQL 공격 구문은 schemata 테이블의 information_schema 컬럼에서 schema_name, 1의 정보를 가져와 앞의 1' 합쳐서 DB 정보를 출력한다는 의미다. Union SQL 공격 구문을 입력하면 데이터베이스 명을 있다.

 

[그림 2-2] dvwa 데이터베이스의 테이블 명

dvwa 데이터베이스의 테이블 명을 알아보기 위해 1' union select table_schema, table_name from information_schema.tables where table_schema = 'dvwa' # 입력해 테이블 명을 확인한다. table_schema dvwa 데이터베이스에서 tables 테이블의information_schema 컬럼에서 table_schema, table_name 정보를 가져와 앞의 1' 합쳐서 DB 정보를 출력한다는 의미다. Union SQL 공격 구문을 입력하면 테이블 명을 있다.

 

[그림 2-3] users 테이블 칼럼

Users 테이블의 칼럼 정보를 알아보기 위해 1' union select table_name, column_name from information_schema.columns where table_schema = 'dvwa' and table_name = 'users'# 입력해 테이블 칼럼을 확인한다. 기존과 형식은 비슷하지만 where 조건 뒤에 and table_name = 'users'# 추가되서 조회된다. DB 정보를 가져오면 users 테이블의 칼럼을 확인할 있다.

 

[그림 2-4] users 테이블 정보

users 테이블 정보를 알아보기 위해 1' union select user, password from users# 입력해 실행한다. 실행 결과 사용자 계정으로 추측되는 정보들이 있음을 확인할 있다. 아이디는 평문이지만 패스워드는 MD5 형식의 해쉬값으로 저장되어 있다. 하지만 MD5 형식의 해쉬값도 구글에 검색하면 바로 해독이 가능하다.

 

[그림 2-5] 해쉬값 해독

구글에 검색해 해쉬값 해독 결과 아이디가 admin으로 저장되어 있는 정보는 패스워드가 password 라는 것을 확인 있다.

반응형
LIST

'웹해킹 > DVWA' 카테고리의 다른 글

SQL 인젝션 공격 (3)  (0) 2020.01.28
SQL 인젝션 공격(2)  (0) 2020.01.28
브루트 포스 공격 대응 방안  (0) 2020.01.26
브루트 포스 공격  (0) 2020.01.26
Reflected XSS 공격 (2)  (0) 2020.01.21
블로그 이미지

만년필석사

,