[DVWA] - SQL Injection

2022. 11. 12. 19:00· Web Hacking/DVWA
목차
  1. ❓ 공격 개요
  2. 💻 실습
  3. 🔍 대응방안

❓ 공격 개요

SQL Injection 공격 개요

> SQL Injection 공격은 웹 서버 영역의 데이터베이스로 전송되는 SQL 쿼리문을 사용자가 임으로 조작할 수 있는 경우 발생한다  공격자는 이 취약점을 이용하여 데이터 베이스에 저장되어 있는 다른 사용자의 개인정보 등 허가되지 않은 정보에 접근하거나 데이터를 변조할 수 있다

 

 

💻 실습

SQL Injetcion 메인

SQL Injection 의 메인화면이다

 사용자 id를 입력하는 폼이 보인다

 

 

1을 입력해보자 admin 사용자가 출력되는걸 알 수 있다

이와 같은 웹 페이지가 있을때 SQL Injection 공격에 취약한지 테스트해볼 수 있는 기본적인방법은

 '   를 입력해보는것이다

 

SQL 형식 애러

위 사진과 같이 ' 를 입력하자 SQL 관련 오류가 발생한다

이와 같이 에러가 발생하거나 비정상적인 상황이 나타날경우

SQL Injection 에 취약한 상황을 의심해 볼 수 있다.

 

실습페이지의 코드는 다음과 같다

 

 

쿼리문을 보면 WHERE 조건문이 있고 사용자가 입력한 파라미터의 값($id)이 쿼리문의 일부로 사용되고 있는데

입력값에 제한이 없을경우 SQL Injection공격에 매우 취약하게 된다

이제 where 구문을 우회하여 공격해보자

 

쿼리문을 조작하기위해

' or  '1'='1 을 입력해보자

 

 

위와같이 우회 구문을 입력했을때 다음과같이 

admin 사용자 외에도 다른 사용자의 정보가 같이 출력된다

공격 구문을 입력했을때 SQL 쿼리문은 다음과 같이 구성된다

 

SELECT first_name,last_name from users where user_id='' or '1'='1';

 

where 절 이하에 or 키워드가 함께 삽입되어 where 문의 조건이  또는 '1'='1'이라는 

항상 참이 되는 조건이 되어 모든 사용자의 first_name과 last_name이 출력된다.


 

이제 Union 구문을 사용해 데이터베이스 의 정보를 알아내보자

기본적으로 Union 공격의 순서는 다음과 같다

 

                                                                        1. order by를 통한 column 갯수 확인

                                                                        2. DB 버전 정보 확인

                                                                        3. database 정보 확인

                                                                        4. table 정보 확인

                                                                        5. column 정보 확인

                                                                        6. recode 정보 확인

 

 

union 은 합집합이기 때문에 union 을 사용하기 위해서는

원래의 SQL 쿼리문이 조회하는 select 문의 칼럼 개수와 union 뒤의 select 문에서 요청하는 칼럼 개수가 같아야한다.

따라서 union 공격을 성공시키기 위해서는 원래의 SQL 쿼리문이 몇 개의 칼럼을 반환하는지 알아내야한다

 

칼럼 개수는 다음과 같이 order by 구문으로 알아낼수 있다

order by 는 지정된 칼럼을 기준으로 결과를 정렬할 때 사용하는 구문으로 

order by 뒤의 숫자를 증가시켜가다가 전체 칼럼 개수보다 더 큰값이 나오면

오류가 출력되는데 오류가 출력되기 이전의 값이 칼럼의 개수가 된다

 

 

' order by 3#을 입력했더니 오류가 발생한것으로 보아 전체 칼럼의 개수가 2개인 것을 알 수 있다.

 

이제 버전 정보를 확인해보자

서버 버전을 확인하는 쿼리는

 VERSION() 혹은 @@VERSION 이다

 

' union select 1,version()#  

버전 정보 확인
현재 mariaDB 1-.1.38 버전인걸 확인 할 수 있다

 

이제 DB명을 알아내보자

 

mysql 은 information.schema라는 DB에서 

DB명, table, column 정보등을 관리하고 있는데 위 테이블을 이용해 쿼리문을 작성하면 정보를 알아낼수 있다

 

' union select 1,schema_name from information_schema.schemata#

DB 정보 확인

다음과 같이 DB명이 모두 출력되었으며

현재 실습의 DB명은 dbwa 인것을 확인할 수 있다

 

DB명을 알았으니 이제 dvwa 내에 테이블 목록을 알아내보자

 

' union select 1,table_name from information_schema.tables where table_schema='dvwa'#

dvwa DB내에 gusetbook과 users 테이블이 있는걸 알수 있다

 

이제 users 테이블의 칼럼 목록을 알아내보자

 

users table 칼럼 목록

users 테이블의 모든 칼럼이 출력되었다

출력된 칼럼줌 user 와 password 내용을 확인해보자

 

 사용자 이름과 패스워드 가 모두 출력되었다 

 

🔍 대응방안

1. 입력값 검증

> SQL Injection 공격과 같은 파라미터 입력값 조작으로 이루어지는 공격은 입력값 검증을 통해 대응할 수 있다 특히 화이트리스트 검증을 사용하는 것이 더욱 효과적이다

 

2. 시큐어 코딩

> 사용자가 입력한 값은 SQL 쿼리문에서 오직 데이터로만 사용되어 sQL 쿼리문 구조에 영향을 줄 수 없도록 해야한다

 

> 다음과 같이 쿼리문을 구성하고 실행하는 방법을 파라미터 쿼리(parameterized query)로 변경한다

> prepare() 부분을 보면 미리 실행할 쿼리문의 형태를 작성해 두고 있는데 이것을 Prepared Statement 라고 한다 

> 사용자의 입력값이 들어갈 id 부분은 bindValue() 에서 설정하도록 하고 있다 이경우 사용자가 입력한 값이 쿼리문의 일부가 될 수가 없고 온전히 데이터로만 처리되기 때문에 or 나 Union 같은 키워드가 입력되어도 무의미 하게 된다

저작자표시 (새창열림)

'Web Hacking > DVWA' 카테고리의 다른 글

[DVWA] - Weak Session IDs  (0) 2022.11.14
[DVWA] - Blind SQL Injection  (0) 2022.11.13
[DVWA] - Insecure CAPTCHA  (0) 2022.11.09
[DVWA] - File Upload  (0) 2022.11.08
[DVWA] - File Inclusion  (0) 2022.11.07
  1. ❓ 공격 개요
  2. 💻 실습
  3. 🔍 대응방안
'Web Hacking/DVWA' 카테고리의 다른 글
  • [DVWA] - Weak Session IDs
  • [DVWA] - Blind SQL Injection
  • [DVWA] - Insecure CAPTCHA
  • [DVWA] - File Upload
po3nyo
po3nyo
po3nyo
공부기록장
po3nyo
전체
오늘
어제
  • 분류 전체보기 (208)
    • Programming (13)
      • HTML (0)
      • JavaScript (1)
      • CSS (1)
      • PHP (1)
      • Java (2)
      • Database (7)
      • Python (1)
      • C (0)
    • Web Hacking (28)
      • Web (14)
      • DVWA (12)
      • Bee-Box (0)
    • Reverse Engineernig (11)
      • study (11)
      • lena (0)
    • System Hacking (0)
    • Forensics (0)
    • Cryptography (0)
    • Wargame (58)
      • root-me.org (19)
      • webhacking.kr (0)
      • los.rubiya.kr (0)
      • TryHackMe (0)
      • HackerFactory.co.kr (0)
      • dreamhack.io (0)
      • picoctf.org (27)
      • Hackme.org (11)
      • CTF (1)
    • OS (6)
      • Windows (1)
      • LINUX (5)
    • Algorithm (22)
      • BOJ (22)
      • 기타 (0)
    • Tools (14)
    • Etc (7)
    • 알쓸신잡 (5)
    • 전공 (40)
      • 운영체제 (11)
      • 정보통신 (13)
      • 소프트웨어공학 (9)
      • 컴퓨터 구조 (7)

블로그 메뉴

  • 방명록

공지사항

인기 글

태그

  • ceate
  • Hackmechallenge
  • sql 조건문
  • dvwa실습
  • SQL
  • order by절
  • 정보보안
  • 레코드 제한
  • 취약점
  • Python
  • mus1c
  • sql 데이터타입
  • 모의해킹
  • 정보보호
  • html
  • Infosec
  • 알쓸신잡
  • rootme
  • dvwa
  • 웹해킹
  • 정보통신
  • picoCTF
  • php
  • wirteup
  • OWASP
  • 침투
  • Hackme.org
  • writeup
  • sql 분법
  • rootmeorg

최근 댓글

최근 글

🔒 · Designed By 정상우.v4.2.2
po3nyo
[DVWA] - SQL Injection
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.