클라이언트가 본인이 맞는지 확인하는 작업
인증 취약점은 인증과정에서 얻어내는 취약점
인증단계를 건너뛰는(무시) 공격
클라이언트 측에서 인증절차를 하는 경우
| cookie로 인증 확인 |
|---|
![]() |
| admin으로 변경 |
|---|
![]() |
ex) /step1.php (유추)-> /step2.php
문제 : PIN CODE Bypass
ex1. 메인 페이지
| step1.php |
|---|
![]() |
ex2. step1.php에서 다음 버튼 클릭으로 step2.php로 진행
| step2.php | 비밀번호 랜덤 입력 결과 |
|---|---|
![]() | ![]() |
ex3. step3.php가 존재함을 유추후 입력
| step3.php | 버튼클릭 |
|---|---|
![]() | ![]() |
ex) 회원가입단계 a -> c로 건너뜀
a. 약관동의
b. 본인인증 ex)휴대폰 인증
c. 회원가입
직접접근 중 하나 / 모바일앱에 많음
ex) 문제 Admin is mine
| 정상적인 id와 pw입력 | 응답값 | 메인 화면 |
|---|---|---|
![]() | ![]() | ![]() |
| admin으로 로그인 | 응답값변경 | 메인화면 |
|---|---|---|
![]() | ![]() | ![]() |
무작위 대입공격 가능
로그인 페이지에는 횟수제한이 있어도 마이페이지에 없는 경우도 있음
| 핀코드 입력페이지 | python으로 제한없이 시도 | 결과 |
|---|---|---|
![]() | ![]() | ![]() |
python코드
import requests
url="http://ctf.segfaulthub.com:1129/6/checkOTP.php?otpNum="
for i in range(0000, 9999):
opt=f"{i:04}" # 04는 4자리 14는 14자리
param={
"otpNum" : opt
}
res=requests.get(url,params=param)
keyword="Login Fail"
if keyword not in res.text:
print(opt)
break
print(opt)
특정권한을 부여하는 것
특정기능을 권한에 따라 할 수 있거나 못 할 수 있음
특정권한만 할 수 있는 기능을 할 수 있게함
로직의 허점을 찾는 것
주로 파라미터 변조
(클라이언트 측에서 권한 체크)
ex) 문제 Authorization 1
| 메인페이지 | 응답값보기 |
|---|---|
![]() | ![]() |
| 응답값에서 주석제거 | 결과보기 |
|---|---|
![]() | ![]() |
클릭했을때 웹으로 요청이 가는지를 확인
2.1 확장자 검증(php)웹요청할때 응답값에서 빼고
2.2 javascript 난독화
-> 인터넷 이용하여 복원
-> 동적분석
| 정적분석 | 동적분석 |
|---|---|
| 실행안하고 코드만 분석 | 실행하면서 코드분석 |
서버측에 존재는 하지만 눈에 보이지 않는 것을 추측하여 공격
ex) 문제 Authorization 4 -> 관리자만 쓸수 있는 게시판에 글쓰기
notice_read.php가 있으면 notice_post.php notice_write.php notice_create.php 있을것이라 추측
| 게시글 들어가보기(notice_read.php로 방문) | notice_write.php 있을것이라 추측후 입력 |
|---|---|
![]() | ![]() |
페이지를 분석할 때 내가 보낸 값이 어떻게 오는지 생각
ex) Authorization 6 -> admin정보 알아내기
| mapage에 파라미터 값 sfUser | 파라미터 값 admin으로 변경 |
|---|---|
![]() | ![]() |
normaltic study 6기 16주차