본문 바로가기

Rookies 9기/애플리케이션 보안

애플리케이션 보안 5일차

728x90

• A1 Injection ( SQL Injection GET/Search )

모든 계정에 대한 ID 와 PW를 알아내려면??

사용자가 입력한 값을 서버에서 검증하지 않고 데이터베이스 쿼리 일부분으로 인식하여 데이터베이스의 정보가 노출되거나 인증이 우회되는 취약점이다.

- UNION 으로 SELECT문 연결
SELECT 학생 FROM 우리동네 UNION SELECT 회사원 FROM 우리동네;
-> 학생과 회사원이 모두 출력됨
※ 앞의 SELECT 문에서 요청한 컬럼의 개수와 뒤의 SLECT 문에서 요청한 컬럼의 개수가 일치해야 한다.

'union select 문 사용

컬럼의 개수를 모르고 있기 때문에 union select 문을 사용하여 컬럼의 개수를 찾아준다.

'union select 1# 부터 'union select 1,2,3,4,5,6# 까지 하나씩 증가할 때 실행이 안되고 에러 메시지가 출력된다.

 

' union select 문 사용

 'union select 1,2,3,4,5,6,7# 에서 select문이 실행이 되었다.

 

0' union select 1,2,3,4,5,6,7#를 사용한다 데이터 추출을 할 수 있는 번호가 나온다.

깔끔하게 출력하기
0' union select 1,2,3,4,5,6,7#  // 0이 테이블명에 없으면 깔끔하게 나온다.
thor' union select 1,2,3,4,5,6,7# //thor라는 영화는 없으므로 NULL  상태이다. 

 

DB명을 알아내려면?

DB, 버전, 사용자

0' union select 1,database(),version(),4,user(),6,7# 를 사용하여 DB명, 버전, 사용자 이름을 알 수 있다.

내부함수
database() : DB명을 알려준다.
version() : MySQL버전을 알려준다.
user() : 사용자 이름을 알려준다.

테이블명

0' union select 1, table_name,3,4,5,6,7 from information_schema.tables  where table_schema='bWAPP'#  를 사용하면 bWAPP DB의 테이블 명을 알 수 있다. » users라는 테이블에 개인정보가 있을 거라 예측할 수 있다.

0' union select 1,table_name,3,4,5,6,7 from information_schema.tables 을 사용하면 테이블 이름이 너무 많이 나온다.

 

0' union select 1, column_name,3,4,5,6,7 from information_schema.columns where table_schema='bWAPP' and table_name ='users'#  을 사용하여 'bWAPP' DB안에 있는 users 테이블의 컬럼이름 출력된다.

0' union select 1,column_name,3,4,5,6,7 from information_schema.columns  where table_schema='bWAPP'#   //bWAPP의 DB명에 있는 컬럼이름을 모든 출력한다.

※ 실제 테이블 구조도 똑같은지 MySQL을 확인해보자.

$ sudo mysql -u root -p
mysql> show databases;
mysql> use bWAPP;      //bWAPP이라는 DB를 사용하겠다는 의미
mysql> show tables;                     // 어떤 테이블이 있는지 확인

mysql> desc users;                       // users테이블에 어떤 컬럼이 있는지 확인
mysql> select * from users;            // users테이블의 내용을 확인

 

컬럼의 내용

원하는 컬럼의 내용을 확인하기 위해서는 0' union select 1, login, password, email,5,6,7 from users#  명령어를 사용한다.

users 테이블에서 원하는 컬럼들을 데이터가 추출되는 번호에 적어 출력을 한다.

 

※ hashes.com에서 해시값을 구할 수 있다.( salt 없는 것만 된다.)

※ 해시값인지 어떻게 알았을까?

a 부터 f 까지의 알파벳(g이후에는 없음)과 0 부터 9 까지 숫자로 이루어져 있다. » hex-decimal(16진수)
16진수는 2의 4승이므로 4bit이다(각 자리가 4bit) » 40자리*4bit = 160bit  »  SHA-1의 해시값, ECC160bit 등

• OWASP A04 - Insecure Design

정보보호의 3요소

기밀성 : 내용이 노출되지 않도록 하는 것
무결성 : 내용이 변조되지 않도록 하는 것
가용성 : 항상 사용 가능한 상태를 유지하는 것

 - 보안 개발 생명 주기

‣ Life Cycle : 너무 오래된 소프트웨어는 취약점도 많고 노후화되면 폐기해야 한다.

‣ 6-7년 지나면 차세대 시스템 사업(교체) : 은행, 공공기관 사이트들의 개선 작업

 

 •A4 insecure DOR( Order Tickets )

직접 객체 참조은 URL, 쿼리, 변수 등과 같은 객체의 파라미터 값을 공격자가 직접 참조하여 변조하는 것으로 서버 단에서 변조된 값에 대한 적절한 무결성 검증이 이루어지지 않을 경우 권한 상승, 계정 탈취, 금액 변조가 가능하다.

티켓 1개당 15 EUR이다.

어떻게 하면 영화 티켓을 1EUR에 볼 수 있을까요?

Burp Suite

order Tickets 페이지를 버프를 사용해 인터셉트를 잡고 소스코드를 보면 티켓 개수 및 가격을 수정할 수 있는 코드가 있다.

이 부분을 내가 원하는 가격으로 수정을 해보자.

ticket_price 수정

ticket_price 가격을 1로 수정을 한 후 Forward 해준다.

결과 화면

12개의 티켓을 12 EUR로 살 수 있는 걸 볼 수 있다.

 

•OWASP A05 - Security Misconfiguration (원인)

• A7 Directory Traversql - Directories

웹 브라우저를 통해서 확인 가능한 상위 디렉터리를 검색하여 시스템 파일을 검색 / 접근하거나 다운로드하는 취약점이다.

디렉터리가 그대로 노출이 되고 있다.

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

/home/wolverine 다렉토리 안에 있는 pdf 를 찾아라

URL  수정

URL에 부분에 http://192.168.5.130/bWAPP/directory_traversal_2.php?directory=/home/wolverine/Examples로 경로 이동을 해보자.

/home/wolverine 디렉토리

경로 이동 결과 pdf 파일 및 다른 파일들이 보이는 걸 알 수 가 있다. 이런듯 어떤 디렉토리가 있는지 알수 있고 그대로 노출이되면 위험하다는 걸 알수 있다.

/etc/passwd에 보면 neo의 UID는 무엇일까요?

웹 브라우저를 통해 확인 가능한 상위 디렉터리를 검색하여 시스템 파일을 검색/접근하거나 다운로드하는 취약점이다.

URL 수정

경로를 http://192.168.5.130/bWAPP/directory_traversal_1.php?page=/etc/passwd 수정을 하면 원하는 경로로 접근이 가능하다. 

neo 결과

이동 결과 neo의 UID을 확인할 수 있다.

 

• OWASP A06

 

- 약점

 ‣ 약점은 항상 존재한다

 ‣ 약점 번호 체계 : CWE-nnnnn

 

- 취약점

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

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

 ‣ 취약점 번호체계 : CVE-YYYY-NNNNnnn    ex) CVE-2017-0143(SMB 취약점)

 

- Zeroday Exploit 

 ‣ 알려지지 않은 취약점(패치가 아직 없다, 제조사가 아직 모르는 상태)

 ‣ 무방비 상태에서 공격을 하는 것

 ‣ 제조사가 패치를 만들기 전(PoC이전, 패치를 만드는 중, 패치를 만들었는데 취약점이 사라지지 않는 경우 등)

 ‣ 패치를 만드는 데 걸리는 시간 » 25 ~ 50일(PoC -> 설계-> 개발 -> 테스터 )

 ‣ 엠바고( 뉴스에 내지 말라고 언론에 요청함)

 ‣ Dark Web에서 고액으로 거래다 되기도 한다.

 

- Oneday Exploit : 알려진 취약점(패치 나와있다, 설치 안 하면 공격 가능)

 ‣ 패치가 있는데 적용을 안 하는 이유 : 의존성 문제 » OS를 업데이트하면 APP이 안 돌아가는 문제가 있다.

 ‣ 반도체 생성 라인 OS를 업데이트해서 에러 발생 시 엄청난 손실이 발생할 수 있다

 

 - Shodan

  ‣ IoT 기기를 검색하는 검색 기기 => 취약한 IoT기기

 

•OWASP A07

- Credential Stuffing (크리덴셜 스터핑, 자격증명 스터핑) ⇒ 요즘 많이 나오는 공격

  ‣ 취약한 사이트에서 여러 사람의 ID/PW 목록을 알아냄 => 다른 사이트에 대입해보는 공격 방식

  ‣ 원인 : 대부분의 사람들이 여러 사이트에 같은 ID/PW를 사용하기 때문이다.

  ‣ 대응방법 : 강격 한 보안 설루션 사용(X) => 사용자들이 사이트마다 서로 다른 ID/PW를 사용해야 한다.

 

•A2-Broken Auth - Insecure Login Forms

안전하지 않은 로그인 폼 취약점이다.

ID 와 Password 를 찾으시오. 

ID

Login 부분 드래그를 한 결과 아이디가 나왔다.

Password

password 또한 페이지를 드래그한 결과 password가 나왔다. 

실행결과

로그인이 성공했다는 메시지가 출력이 된다.

• A2 - Session Mgmt - Administrative Portals

인증 및 세션 관리 결함으로 이용하여 아이디, 패스워드, 키, 세션 토큰 획득, 사용자 권한 획득이 가능한 취약점이다.

힌트로 URL이 나와있다. URL를 자세히 보면 admin=0으로 되어있다.

URL의 admin=0을 admin=1로 수정을 한다.

문제가 풀린 걸 확인할 수 있다.

※ medium 단계는 Edit Cookie(쿠키값 프로그램)을 사용해 admin를 1로 수정을 해준다.

 

• A6 - Base64 Encoding(secret)

민감한 데이터 노출 취약점이다.

Cookie Editor을 사용해 secret 값이 노출이 되어있는 걸 확인할 수 있다.

UTF-8 디코딩을 해준다.

UTF-8에서 한 디코딩 암호를 BASE64로 디코딩을 해주면 답을 찾을 수 있다.

※ Medium 단계 또한 CookieEdit로 쿠키값을 확인을 하면 serct값이 노출이 되었이다. => hashes.com에서 디코딩을 해준다.

 

• A2 Broken Auth - Logout Management

서버와 클라이언트 간에 필요한 동작이지만 세션 관리 결함에 의한 취약점이다.

Cookie Editor로 쿠키값을 확인 후 복사를 해준다.

로그아웃을 해준다. 

쿠키를 로그인할 쿠키로 수정해준다.

그 결과 로그인이 되어있는 걸 확인할 수 있다. 즉, 쿠키값을 재사용하여 로그인이 성공하였다.