CAPTCHA
- Completely Automated Public Turing test to cell Computer and Humans Apart
- 컴퓨터와 인간을 구분하기 위한 완전 자동화된 공개 튜링 테스트. 일반 사용자와 봇을 구별하는데 사용한다. 시각적 / 청각적 CAPTCHA 방식 외에도 미니 퍼즐 게임이나 산술 연습이 사용된다.
- 로그인 등의 과정에 추가적인 인증 요소로 포함되어 접근하고자 하는 대상이 실제 사용자인지 컴퓨터인지 구별하기 위해 사용되는 프로그램
Insecure CAPTCHA 취약점
[특징]
- CAPTCHA를 우회할 수 있는 취약점
[대응방안]
- 대부분의 CAPTCHA 인증의 경우 쉽게 우회가 가능하기 때문에 다른 추가적인 인증 요소(OTP, 기존 패스워드 인증 등)를 추가하여 구현하는 것이 좀 더 안전
[공격 실습 및 분석]
low
비밀번호를 변경할 수 있는 화면이 있다.
변경하고 싶은 비밀번호를 입력한 후,
버프스위트로 관찰해보자.
사용자가 입력한 비밀번호가 그대로 평문으로 노출되어있다.
포워딩을 해준 화면이다. 캡챠를 통과했다고 한다. 버튼을 눌러보자.
step=1이 step=2로 변경되었다. step2도 마찬가지로 평문으로 비밀번호가 적혀있다. 따라서 캡챠를 우회하려면 그냥 평문으로 적힌 비밀번호를 원하는대로 수정하면 된다.
패킷의 비밀번호를 bye로 변경하고 보내주자.
캡챠 인증을 하지 않고도 비밀번호가 변경되었다.
bye로 로그인이 가능했다.
medium
화면은 똑같다.
패킷도 비슷해보인다.
버튼을 눌렀다.
그런데! 이번에는 passed_captcha=true가 생겼다. 물론, 비밀번호는 그대로 평문으로 노출되어있기 때문에 이를 변조한 패킷을 보내면 된다.
이번에도 bye로 변경해보자.
성공!
high
이번에도 같은 화면이다.
그런데 이번에는 사용자 토큰이 패킷에 포함되어있다.
step2같은 것도 없이 바로 비밀번호가 변경된다.
소스코드를 살펴보니 resp 변수에 recaptcha 일치 여부를 담고 있다. 그런데 비밀번호를 변경하는 조건은 resp가 맞거나, 그 뒤의 값이 맞거나이다. OR이기 때문에 resp값이 아닌 뒤의 값으로 패킷을 보내면 된다.
원래 전송할 패킷을 이렇게 변경해주자.
성공했다.
impossible
impossible 단계에서는 현재 비밀번호도 입력해야 했다.
소스코드를 살펴보자.
high에서 취약했던 소스코드 부분이 수정되었다. resp값이 일치하지 않을 경우의 에러를 처리해준 모습이다.
'4-2. 2024-1 심화 스터디 > 웹 취약점 분석' 카테고리의 다른 글
[6주차] Security Misconfiguration 취약점 (2) (0) | 2024.05.25 |
---|---|
[4주차] Injection 취약점 분석/실습 (2/2) (0) | 2024.04.03 |
[3주차] Injection 취약점 분석/실습 (1/2) (1) | 2024.03.27 |
[2주차] Broken Access Control 취약점 분석/실습 (2) | 2024.03.18 |
[1주차] OWASP top 10 & DVWA 환경 구축 (0) | 2024.03.15 |