정보보안(구버전)/ bWAPP 2019. 2. 7. 15:54

웹 해킹 bWAPP - 24. A1 - Injection - SQL Injection Blind - Boolean-Based

 

 

본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인 목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알려드립니다.

 

 

1. Injection

 

 - OWASP Top10 A1 - 악의적인 명령 삽입
 - 서버로 전송되는 요청 정보에 악의적인 명령을 삽입하여 불필요한 동작을 실시하거나, 서버/시스템/DB 중요 정보를

   획득할 수 있는 취약점이다.
 - Ex) HTML 인젝션, SQL 인젝션, PHP 인젝션, XML 인젝션

 

 

 

2. Blind - Boolean-Based 방식

 

 - 쿼리 결과의 참/거짓을 통해서 데이터베이스 내용을 확인하는 인젝션이다.

 - Boolean 대수 : 조지 부울이라는 영국 수학자가 만든 것으로써 참/거짓(1/0)의 이진수 값을 이용한다.

 

 

 

3. 실습에 사용할 함수 및 ASCII 코드

 

 1) length() 함수

 

 - 지정한 문자열의 길이를 반환해주는 함수

 - Ex) length(database())=5    // 데이터베이스 이름 길이가 5인지 확인

 

 

 2) substring() 함수

 

 - 지정한 문자열의 일부를 반환해주는 함수

 - Ex) substring(database(),1,1)='b'   // 데이터베이스 이름의 첫번째 글자가 'b'인지 확인

 

 

 3) 숫자/대소문자 ASCII Code

 

 - 참고 사이트 : https://www.ascii.cl/htmlcodes.htm

 

Symbol

ACSII 10진수

0~9

48~57

A~Z

65~90

a~z

97~122

 

 

 

4. Injection - SQL Injection Blind - Boolean-Based

 

 - 이 시나리오는 Query 결과를 참/거짓으로 출력하는 페이지를 이용하여 데이터베이스 내용을 추측하는 내용이다.

 

 

Ex1) Injection - SQL Injection Blind - Boolean-Based 이해 I

 

 

보안 레벨 선택 및 시나리오 선택

 

 

 '(작은 따옴표)를 입력하여 취약점이 있는지 확인 실시

 

 

 

'or 1=1# 을 실시하여 참인 경우, 출력 메세지 확인

 

 

 

'or 1=2# 을 실시하여 거짓인 경우, 출력 메세지 확인

 

 

 

 

Ex2) Injection - SQL Injection Blind - Boolean-Based 이해 II

 

 

24-0. SQL 인젝션 추가-1.txt

데이터베이스 이름 길이를 알기 위한 SQL 인젝션 실시

 

 

 

24-1. SQL 인젝션 추가-2.txt

데이터베이스 이름 길이가 '5'로 확인됨

 

 

 

24-2. SQL 인젝션 추가-3.txt

데이터베이스 이름 첫글자가 'a'로 시작하는지 SQL 인젝션 실시

 

 

 

24-3. SQL 인젝션 추가-4.txt

데이터베이스 이름 첫글자가 'b'로 시작하는지 SQL 인젝션 실시 -> b로 시작하는 5글자

 

 

24-4. SQL 인젝션 추가-5.txt

두번째 글자가 ACSII 코드값이 90(대문자 Z)보다 작거나 같은지 SQL 인젝션 실시 -> 두번째 글자는 A~Z 대문자 

 

 

 

24-5. SQL 인젝션 추가-6.txt

SQL 인젝션을 이용한 데이터베이스 이름 확인

 

 

 

 

Ex3) Injection - SQL Injection Blind - Boolean-Based 이해 III

 

'information_schema 데이터베이스의 tables 테이블에서 테이블 타입이 'base table(메터데이터 테이블을 제외한 테이블)이고, table schema가 bWAPP 데이터베이스의 네번째 테이블 이름 길이를 확인하는 SQL 인젝션

 

 

24-5. SQL 인젝션 추가-6.txt

bWAPP 데이터베이스의 네번째 테이블 이름 길이를 알기 위한 SQL 인젝션 실시

 

 

 

24-6. SQL 인젝션 추가-7.txt

bWAPP 데이터베이스의 네번째 테이블 이름 길이가 '5'로 확인됨

 

 

 

24-7. SQL 인젝션 추가-8.txt

bWAPP 데이터베이스의 네번째 테이블 이름 첫글자가 97(대문자 a)보다 크거나 같은지 SQL 인젝션 실시

 

 

 

24-8. SQL 인젝션 추가-9.txt

bWAPP 데이터베이스의 네번째 테이블 이름 확인을 위한 SQL 인젝션 실시

 

 

 

24-9. SQL 인젝션 추가-10.txt

bWAPP 데이터베이스의 네번째 테이블 이름이 'users'인지 SQL 인젝션 실시

 

 

 

 

 

Ex4) Injection - SQL Injection Blind - Boolean-Based 이해 IV

 

 

24-10. SQL 인젝션 추가-11.txt

'users' 테이블의 첫번째 컬럼 이름 길이(2글자)와 이름(id)을 알기 위한 SQL 인젝션 실시

 

 

 

24-11. SQL 인젝션 추가-12.txt

'users' 테이블의 두번째 컬럼 이름 길이(5글자)와 이름(login)을 알기 위한 SQL 인젝션 실시

 

 

 

24-12. SQL 인젝션 추가-13.txt

'users' 테이블의 세번째 컬럼 이름 길이(8글자)와 이름(password)을 알기 위한 SQL 인젝션 실시

 

 

 

24-13. SQL 인젝션 추가-14.txt

login 컬럼 내용 길이(3글자)와 아이디(bee)를 알기 위한 SQL 인젝션 실시

 

 

 

24-14. SQL 인젝션 추가-15.txt

bee 계정의 패스워드 길이(40글자=해시값)을 알기 위한 SQL 인젝션 실시

 

 

 

24-15. SQL 인젝션 추가-16.txt

bee 계정의 패스워드 해시가 MD5인지를 알기 위한 SQL 인젝션 실시

 

 

 

24-16. SQL 인젝션 추가-17.txt

bee 계정의 패스워드 해시가 SHA1인지를 알기 위한 SQL 인젝션 실시

 

 

 

 

Ex5) 'sqli_4.php' & 'functions_external.php' 파일 내용 확인

 

bee@bee-box:/var/www/bWAPP$ ls -l sqli_4.php
-rw-rw-r-- 1 root www-data 5895 2014-11-02 23:52 sqli_4.php

bee@bee-box:/var/www/bWAPP$ vi sqli_4.php

~ 중간 생략 ~

 

include("functions_external.php");
include("connect.php");

 

function sqli($data)
{

    switch($_COOKIE["security_level"])
    {

        case "0" :

 

            $data = no_check($data);
            break;

 

        case "1" :

 

            $data = sqli_check_1($data);
            break;

 

        case "2" :

 

            $data = sqli_check_2($data);
            break;

 

        default :

 

            $data = no_check($data);
            break;

    }

    return $data;

}
 

:q!

 

 

bee@bee-box:/var/www/bWAPP$ gedit functions_external.php

~ 중간 생략 ~

 

function sqli_check_1($data)

{

  

    return addslashes($data);

            // 작은따옴표를 문자열로 이스케이프 실시

}

 

function sqli_check_2($data)

{

  

    return mysql_real_escape_string($data);

            // SQL 인젝션에서 사용하는 특수문자에 백슬래시를 붙여 입력값을 이스케이프 실시

               (NULL, \n, \r, \, ', ", ^Z)

}

 

function sqli_check_3($link, $data)

{

  

    return mysqli_real_escape_string($link, $data);

   

}

 

function sqli_check_4($data)

{

 

    // Not bulletproof

   

    // Replaces a single quote (')

    $input = str_replace("'", "''", $data);

  

    return $input;

   


 

Ex6) 보안 레벨 'High' 변경

 

 

보안 레벨 및 시나리오 선택

 

 

 

24-17. SQL 인젝션 추가-18.txt

SQL 인젝션 실패

 

 

[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)

 

웹해킹 24. bWAPP Injection - SQL Injection Blind - Boolean-Based   https://youtu.be/PeL8fc_juxA

Posted by 김정우 강사(카카오톡 : kim10322)
,


Q