[취업반 스터디 4달 4주차]

Minseok Jo·2024년 2월 22일
post-thumbnail

[4달 4주차 주제 : 인증 / 인가 취약점]


1. 인증 / 인가 취약점

1) 인증 / 인가

인증 (Authentocation) : 그 사람이 맞는지 확인하는 작업
인가 (Authentocation) : 특정 권한을 부여하는 것


2) 인증 / 인가 취약점

인증 취약점

  • 인증 과정에서 일어나는 취약점
  • 인증을 무시하는 공격

인가 취약점

  • 원래는 못해야하는 것을 할 수 있는 것

2. 인증 취약점의 대표적인 케이스

1) 클라이언트 측 정보로 인증을 수행하는 경우

(1) 이용자의 아이디로 로그인

(2) 클라이언츠 측 정보(쿠키)를 통해 loginUser 판별

(3) 쿠키 값을 변조하여 인증 우회



2) Process 건너뛰기
: 직접 접근이 가능한 경우

(1) Fire 버튼 클릭

(2) 확인 버튼 클릭

(3) 관리자 인증 필요

(4) 웹 패킷을 분석해본 결과 step1 → step2 단계로 진행

(5) 다음 페이지 step3.php 추측 및 직접 접근

(6) Fire 버튼 클릭



3) 파라미터 응답값 변조

(1) 비밀번호를 모르는 상태에서 아이디를 admin으로 로그인

(2) Proxy를 통해 응답값 변조

(3) 로그인 성공
  • id / password 를 입력받아 인증을 성공하면 session=admin 을 저장하는 것이 기본

  • 그러나, session = admin을 먼저 수행하는 케이스이다.

모바일 앱에서 이런 케이스의 인증 취약점이 많다.




4) 인증 횟수의 제한이 없는 경우
→ Brute Force 공격 가능

(1) 인증 횟수의 제한이 없는 Code 인증 페이지

(2) Brute Force 코드 작성
import request

URL = "해당 페이지 URL"

for i in range (1000, 9999+1):
    res = requests.get(URL, params={"otpNum":str(i)}
    if (not "Fail" in res.text):
    print(i)
    break

(3) 코드 실행 및 optNum 확인


3. 인가 취약점의 대표적인 케이스

인가 취약점은 파라미터 변조(직접 접근)가 메인 전략이다.


1) 주석으로 접근을 제한 하는 경우

(1) 주어진 문제는 다음과 같다.

(2) 유저 아이디로 로그인

(3) 관리자만 이용 가능

(4) 웹 패킷 분석
○ 주석으로 유저에게는 보이지 않던 발사 버튼 확인

(5) 발사 버튼의 href 링크로 직접 접근

CSS를 이용하여 "display:none" 으로 설정된 경우도 있다.



2) 인가 체크를 클라이언트 측에서 수행하는 경우

(1) 주어진 문제는 다음과 같다.

(2) 유저 아이디로 로그인

(3) Fire 버튼 클릭

(4) 권한 없음

(5) 웹 패킷 분석
○ Fire 버튼을 누르면 goMenu() 스크립트가 실행
● 따라서, goMenu() 함수가 작성된 자바스크립트 탐색

(6) user.js 스크립트 확인
○ code가 1013일때 2가지 경우로 분기
● 1. userLevel이 admin일때 발사 페이지로 이동
○ 2. userLevel이 admin이 아니면, 권한 없음 메시지 출력

(7) 스크립트에 적혀있는 발사 페이지로 직접 접근


+ 다른방법 : Proxy를 통해 Fire버튼의 스크립트 값 수정 (UserLevel = admin)
○ 이후 Fire 버튼 클릭시, 발사 페이지로 이동


3) 스크립트가 난독화 되어있는 경우
동적 분석 수행

  • 정적 분석 : 실행하지 않고, 코드를 읽으면서 분석
  • 동적 분석: 분기를 기점으로 각 코드를 실행할때 마다 어떤 결과로 이어지는지 확인

(1) 주어진 문제는 다음과 같다.

(2) 유저 아이디로 로그인

(3) Fire 버튼 클릭

(4) 권한 없음

(5) 웹 패킷 분석
○ Fire버튼을 눌렀을 때 goMenu() 스크립트 실행
● 따라서, goMenu()가 함수가 작성된 자바스크립트 탐색

(6) 자바스크립트에서 goMenu()함수 분석
○ code가 9999일때, userLevel이 'admin'이면 특정 동작 수행

(7) fire 버튼의 code=9999, userLevel=admin으로 설정

(8) fire 버튼 클릭

(9) 동적 분석 결과


4) guessing 공격

(1) 주어진 문제는 다음과 같다.

(2) 로그인 → 공지사항
○ 글 작성 버튼이 보이지 않는다.

(3) admin의 공지사항 클릭
○ 글 목록 페이지는 notice_list.php
● 글 읽기 페이지는 notice_read.php

(4) 글 작성 페이지 guessing 공격 수행 (notice_write.php)

(5) 게시글 작성


5) 파라미터 변조1

(1) 주어진 문제는 다음과 같다.

(2) 로그인 → 공지사항

(3) 관리자 공지글 클릭
○ 관리자 게시글 읽기 페이지 접근 불가능
● 게시글 내용이 그대로 출력되는 곳 : 읽기 페이지 외에 수정 페이지도 존재

(4) 게시글 작성 및 게시글 수정 페이지 이동

(5) id 파라미터를 관리자 게시글 번호로 변경하여 내용 확인


6) 파라미터 변조2

(1) 주어진 문제는 다음과 같다.

(2) 로그인 → 마이페이지

(3) user 파라미터를 admin으로 변경


0개의 댓글