정보보안(구버전)/ 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
데이터베이스 이름 길이를 알기 위한 SQL 인젝션 실시
데이터베이스 이름 길이가 '5'로 확인됨
데이터베이스 이름 첫글자가 'a'로 시작하는지 SQL 인젝션 실시
데이터베이스 이름 첫글자가 'b'로 시작하는지 SQL 인젝션 실시 -> b로 시작하는 5글자
두번째 글자가 ACSII 코드값이 90(대문자 Z)보다 작거나 같은지 SQL 인젝션 실시 -> 두번째 글자는 A~Z 대문자
SQL 인젝션을 이용한 데이터베이스 이름 확인
Ex3) Injection - SQL Injection Blind - Boolean-Based 이해 III
'information_schema 데이터베이스의 tables 테이블에서 테이블 타입이 'base table(메터데이터 테이블을 제외한 테이블)이고, table schema가 bWAPP 데이터베이스의 네번째 테이블 이름 길이를 확인하는 SQL 인젝션
bWAPP 데이터베이스의 네번째 테이블 이름 길이를 알기 위한 SQL 인젝션 실시
bWAPP 데이터베이스의 네번째 테이블 이름 길이가 '5'로 확인됨
bWAPP 데이터베이스의 네번째 테이블 이름 첫글자가 97(대문자 a)보다 크거나 같은지 SQL 인젝션 실시
bWAPP 데이터베이스의 네번째 테이블 이름 확인을 위한 SQL 인젝션 실시
bWAPP 데이터베이스의 네번째 테이블 이름이 'users'인지 SQL 인젝션 실시
Ex4) Injection - SQL Injection Blind - Boolean-Based 이해 IV
'users' 테이블의 첫번째 컬럼 이름 길이(2글자)와 이름(id)을 알기 위한 SQL 인젝션 실시
'users' 테이블의 두번째 컬럼 이름 길이(5글자)와 이름(login)을 알기 위한 SQL 인젝션 실시
'users' 테이블의 세번째 컬럼 이름 길이(8글자)와 이름(password)을 알기 위한 SQL 인젝션 실시
login 컬럼 내용 길이(3글자)와 아이디(bee)를 알기 위한 SQL 인젝션 실시
bee 계정의 패스워드 길이(40글자=해시값)을 알기 위한 SQL 인젝션 실시
bee 계정의 패스워드 해시가 MD5인지를 알기 위한 SQL 인젝션 실시
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");
function sqli($data) switch($_COOKIE["security_level"]) case "0" :
$data = no_check($data);
case "1" :
$data = sqli_check_1($data);
case "2" :
$data = sqli_check_2($data);
default :
$data = no_check($data); } 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' 변경
보안 레벨 및 시나리오 선택
SQL 인젝션 실패
[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)
웹해킹 24. bWAPP Injection - SQL Injection Blind - Boolean-Based https://youtu.be/PeL8fc_juxA