반응형
목표
서버의 비즈니스 로직 취약점을 이용하여 잔액을 조작하고, 고가의 플래그를 성공적으로 구매.
문제 분석
애플리케이션 동작
- 상품 구매 기능: 사용자는 잔액 내에서만 상품 구매 가능.
- 플래그 가격: 플래그는 매우 높은 가격(예: 9,999,999원)으로 설정.
- 기본적으로 제공된 잔액으로는 플래그 구매 불가.
초기 확인
- 정상적인 구매 시도:
- 잔액 부족 시 구매 불가 메시지 출력.
- 서버에서 잔액을 검증하는 로직 존재.
공격 과정
1. Burp Suite를 사용한 요청 가로채기
- 분석 대상: /store/{item} 경로로 전송되는 POST 요청.
- 요청 내용:
- quantity: 구매 수량을 나타내며, 기본적으로 양수 값(예: 1)으로 설정.
- 요청 차단 시, 서버는 잔액 부족을 이유로 구매를 거부.
POST /store/flag HTTP/1.1
Host: war.knock-on.org:10016
Content-Length: 10
Content-Type: application/x-www-form-urlencoded
quantity=1
2. 음수 값 사용을 통한 취약점 탐지
- 테스트: quantity 값을 음수로 설정:
- 결과:
- 서버는 음수 수량을 처리하지 못하고, 잔액을 차감하는 대신 증가시킴.
- 예: 원래 잔액이 10,000원 → 음수 수량 요청 후 잔액이 수백만 원으로 증가.
quantity=-1
3. 플래그 구매
- 잔액을 조작한 후, 다시 정상적인 요청을 통해 플래그 구매:
- 결과:
- 서버는 충분한 잔액을 확인하고, 플래그 구매 허용.
- 플래그 획득 성공.
quantity=1
취약점 분석
취약점 유형
- 비즈니스 로직 에러:
- quantity 값에 대한 적절한 검증 부재.
- 음수 값이 비정상적으로 처리되어 잔액 조작 가능.
공격 가능 원인
- 수량 값 검증 부족:
- quantity 값이 음수일 경우의 처리 로직 미비.
- 서버 로직 결함:
- 음수 수량이 잔액 차감이 아닌 증가로 처리됨.
결론
과정 요약
- 취약점 유형: 비즈니스 로직 에러.
- 이용된 기법: 음수 값을 이용한 잔액 조작.
- 사용 도구: Burp Suite를 이용한 요청 분석 및 수정.
공격 흐름
- Burp Suite에서 **수량 값(quantity)**을 음수로 수정.
- 음수 요청으로 잔액을 비정상적으로 증가.
- 충분한 잔액을 확보한 후 정상적으로 플래그 구매.
보안 대책
1. 입력 값 검증
- quantity 값에 대한 철저한 검증:
- 양수 값만 허용.
- 범위를 벗어난 값은 에러 반환.
2. 서버 로직 개선
- 음수 값 처리 방지:
- 서버에서 음수 값 확인 후 차단.
- 예외적인 값에 대한 추가 로직 구현.
3. 로깅 및 모니터링
- 비정상적인 요청(예: 음수 값)의 탐지 및 알림.
- 잔액 변경 및 상품 구매 내역에 대한 상세 로깅.
부록: Burp Suite 사용법
- Proxy 설정:
- Burp Suite의 Proxy를 활성화하고, 브라우저를 프록시에 연결.
- 요청 가로채기:
- 특정 요청을 수행한 후, Burp Suite에서 Intercept 활성화.
- 파라미터 수정:
- quantity=-1 등 값을 수정.
- 요청 전송:
- 수정된 요청을 Forward로 전송.
이번 사례는 입력 값 검증이 부족한 경우, 비즈니스 로직이 쉽게 악용될 수 있음을 보여줍니다. 이를 통해 입력 검증과 보안 로직 강화의 중요성을 다시 한번 확인할 수 있습니다.
반응형
'Security > CTF' 카테고리의 다른 글
| 12.3 Race condition (0) | 2025.01.22 |
|---|---|
| 12.2 IDOR (0) | 2025.01.22 |
| 8.2 SSTI - secretkey (0) | 2025.01.22 |
| 8.1 SSTI - server flag (0) | 2025.01.22 |
| 3.3 SQLi_WAF_3 (0) | 2025.01.22 |