Jaewoo Shim Jun. 4. 2018securesw.dankook.ac.kr/ISS18-1/HW5_2018_06_04.pdf · 2018. 6. 4. ·...
Transcript of Jaewoo Shim Jun. 4. 2018securesw.dankook.ac.kr/ISS18-1/HW5_2018_06_04.pdf · 2018. 6. 4. ·...
설치 및 실행방법
Jaewoo Shim
Jun. 4. 2018
Contents
SQL 인젝션이란
WebGoat
설치방법
실습
과제
2
SQL 인젝션이란
데이터베이스와 연동된 웹서버에 입력값을 전달 시 악의적 동작을 수행하는 쿼리문을 삽입하여 공격을 수행
3
Client
Internet
Web Server
Database
Server
SELECT * FROM users WHERE id=‘$_POST[‘id’]’ AND pw=‘$_POST[‘pw’]’
SQL 인젝션이란 – 정상(1/4)
데이터베이스와 연동된 웹서버에 입력값을 전달 시 악의적 동작을 수행하는 쿼리문을 삽입하여 공격을 수행
4
Client
Internet
Web Server
Database
Server
SELECT * FROM users WHERE id=‘$_POST[‘id’]’ AND pw=‘$_POST[‘pw’]’
POST /login.php HTTP/1.1 … id=guest pw=1q2w3e!@
SQL 인젝션이란 – 정상(2/4)
데이터베이스와 연동된 웹서버에 입력값을 전달 시 악의적 동작을 수행하는 쿼리문을 삽입하여 공격을 수행
5
Client
Internet
Web Server
Database
Server
SELECT * FROM users WHERE id=‘guest’ AND pw=‘1q2w3e!@’
POST /login.php HTTP/1.1 … id=guest pw=1q2w3e!@
SQL 인젝션이란 – 정상(3/4)
데이터베이스와 연동된 웹서버에 입력값을 전달 시 악의적 동작을 수행하는 쿼리문을 삽입하여 공격을 수행
6
Client
Internet
Web Server
Database
Server
SELECT * FROM users WHERE id=‘guest’ AND pw=‘1q2w3e!@’
POST /login.php HTTP/1.1 … id=guest pw=1q2w3e!@
“John의 정보”
SQL 인젝션이란 – 정상(4/4)
데이터베이스와 연동된 웹서버에 입력값을 전달 시 악의적 동작을 수행하는 쿼리문을 삽입하여 공격을 수행
7
Client
Internet
Web Server
Database
Server
SELECT * FROM users WHERE id=‘guest’ AND pw=‘1q2w3e!@’
POST /login.php HTTP/1.1 … id=guest pw=1q2w3e!@
“John의 정보”
“Hello John!”
SQL 인젝션이란 – 공격(1/4)
데이터베이스와 연동된 웹서버에 입력값을 전달 시 악의적 동작을 수행하는 쿼리문을 삽입하여 공격을 수행
8
Client
Internet
Web Server
Database
Server
SELECT * FROM users WHERE id=‘$_POST[‘id’]’ AND pw=‘$_POST[‘pw’]’
SQL 인젝션이란 – 공격(2/4)
데이터베이스와 연동된 웹서버에 입력값을 전달 시 악의적 동작을 수행하는 쿼리문을 삽입하여 공격을 수행
9
Client
Internet
Web Server
Database
Server
SELECT * FROM users WHERE id=‘$_POST[‘id’]’ AND pw=‘$_POST[‘pw’]’
POST /login.php HTTP/1.1 … id=guest pw=AA’ or ‘1’=‘1
SQL 인젝션이란 – 공격(3/4)
데이터베이스와 연동된 웹서버에 입력값을 전달 시 악의적 동작을 수행하는 쿼리문을 삽입하여 공격을 수행
10
Client
Internet
Web Server
Database
Server
SELECT * FROM users WHERE id=‘guest’ AND pw=‘AA’ or ‘1’=‘1’
POST /login.php HTTP/1.1 … id=guest pw=AA’ or ‘1’=‘1
“????의 정보”
SELECT * FROM users WHERE id=‘guest’ AND pw=‘AA’ or ‘1’=‘1’
SELECT * FROM users WHERE TRUE
SQL 인젝션이란 – 공격(4/4)
데이터베이스와 연동된 웹서버에 입력값을 전달 시 악의적 동작을 수행하는 쿼리문을 삽입하여 공격을 수행
11
Client
Internet
Web Server
Database
Server
SELECT * FROM users WHERE id=‘guest’ AND pw=‘AA’ or ‘1’=‘1’
POST /login.php HTTP/1.1 … id=guest pw=AA’ or ‘1’=‘1
“????의 정보”
“Hello ????!”
WebGoat
인터넷 상에서 실제 서비스 중인 웹서버를 대상으로 공격 수행은 불법
5년 이하의 징역 또는 5천만원 이하의 벌금
워게임 사이트, 또는 가상의 환경을 구축하여 공격을 수행하며 실습
http://los.eagle-jump.org
https://github.com/WebGoat/WebGoat
http://sqlzoo.net/hack/
etc
12
WebGoat
https://github.com/WebGoat/WebGoat
OWASP(Open Web Application Security Project) 에 의해 만들어진 트레이닝
자신의 컴퓨터에 환경을 갖추어 실습 가능
자신의 컴퓨터에 취약점이 있는 웹페이지를 구성하기 때문에 보안에 취약해질 수 있음
13
설치방법 - VirtualBox
https://www.virtualbox.org/wiki/Downloads
14
설치방법 - VirtualBox
“Next >”버튼 눌러서 진행
15
설치방법 - VirtualBox
“Next >”버튼 눌러서 진행
16
설치방법 - VirtualBox
“Next >”버튼 눌러서 진행
17
설치방법 - VirtualBox
“Yes”버튼 눌러서 진행
18
설치방법 - VirtualBox
“Install”버튼 눌러서 진행
19
설치방법 – Kali Linux
https://www.offensive-security.com/kali-linux-vmware-virtualbox-image-download/
20
설치방법 – Kali Linux
앞서 설치한 VirtualBox 실행 후
왼쪽 상단에 “파일(F)-가상 시스템 가져오기(I)…”
21
설치방법 – Kali Linux
폴더 그림 클릭 후 다운로드한 ova 파일 선택
다음(N) 버튼을 눌러 진행
22
설치방법 – Kali Linux
“가져오기” 클릭
23
설치방법 – Kali Linux
새로 생성된 가상머신 클릭 후 “시작” 버튼을 눌러 시작
24
설치방법 – Kali Linux
기본 사용자 아이디 : root
기본 사용자 비밀번호 : toor
위 정보를 이용하여 로그인
25
설치방법 – WebGoat
터미널 실행
26
설치방법 – WebGoat
# cd Desktop
# apt update
# apt upgrade
# wget https://github.com/WebGoat/WebGoat/releases/download/7.1/webgoat-container-7.1-exec.jar
# java –jar webgoat-container-7.1-exec.jar
이후 아래와 같이 Webgoat가 실행되는 모습을 확인
http://localhost:8080/WebGoat 로 접속
27
설치방법 – WebGoat
아이디 guest / 비밀번호 guest 로 로그인
참고
28
노란색 아이콘이 웹 브라우저
실습
왼쪽의 “Injection Flaws” 클릭
아래쪽에 나타나는 “String SQL Injection” 클릭
29
실습
String SQL Injection
30
실습
String SQL Injection
31
입력란에 Smith 라는 문장을 입력 시 아래와 같이 테이블 조회가 가능
실습
String SQL Injection
32
SELECT * FROM user_data WHERE last_name = ‘Smith’
SELECT * FROM user_data WHERE last_name = ‘AAAA’ or ‘1’=‘1’
SELECT * FROM user_data WHERE last_name = ‘AAAA’ or TRUE
OR 연산의 한 항이 TRUE면 값은 항상 TRUE
SELECT * FROM user_data
실습
String SQL Injection
33
아래와 같이 성공하는 모습을 확인 가능
실습
Numeric SQL Injection
34
실습
Numeric SQL Injection
35
Columbia 라는 문자열이 직접 들어가지 않고 어떠한 정수가 들어가는 모습 확인 가능
실습
Numeric SQL Injection
36
SELECT * FROM weather_data WHERE station = 101
SELECT * FROM weather_data WHERE station = 101 OR TRUE
SELECT * FROM weather_data
HOW???
OR 연산의 한 항이 TRUE면 값은 항상 TRUE
실습
Numeric SQL Injection
37
도시 이름 정수 값
Columbia 101
Seattle 102
New York 103
Houston 104
해당 리스트를 마우스 오른쪽 클릭 Inspect Element 클릭
실습
Numeric SQL Injection
38
과제
WebGoat 환경을 구성한 이후, 아래 문제를 스스로 푼 뒤 문제에 대한 자신의 접근방법을 포함한 문제풀이 보고서를 작성하세요.
실습시간에 함께 풀어보았던 두 문제
Numeric SQL Injection
String SQL Injection
39
40
42