Jaewoo Shim Jun. 4. 2018securesw.dankook.ac.kr/ISS18-1/HW5_2018_06_04.pdf · 2018. 6. 4. ·...

Preview:

Citation preview

설치 및 실행방법

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

Contact

질문 사항

조교이름 : 심재우

장소 : 미디어센터 504호(엘리베이터 바로 앞)

이메일 : tlawodn94@gmail.com

41

42

Recommended