티스토리 뷰

CERT

Insecure Captcha 모의해킹

뭉크테크 2024. 7. 27. 19:21

목차

  • Insecure Captcha 이론
  • Insecure Captcha 실습
  • Insecure Captcha 대응방안

 

Insecure Captcha 이론

CAPTCHA 

  • Completely Automated Public Turing test to cell Computer and Humans Apart 의 약어
  • 보통 로그인 등의 과정에 추가적인 인증 요소로 포함되어 위 사진과 같이 접근하고자 하는 대상이 실제 사용자인지 컴퓨터인지 구별하기 위해 사용되는 프로그램을 의미한다.
  • 보통 bruteForce와 같이 봇을 이용하여 반복적인 작업을 하는 프로그램을 막기위해 사용되고 있다.

Insecure CAPTCHA는 직역하면 안전하지 않은 캡챠라는 의미로 캡챠 인증이 우회될 수 있는 취약점을 의미한다.

 

 

insecure Captcha 실습

  • dvwa captcha 실습 화면

시나리오

  • recaptcha를 우회하여 비밀번호를 바꾸도록 함 

 

  • insecure Captcha Low 단계 코드의 흐름을 파악해볼 때, step2 단계 if문에서 step1에 진행했던 인증 결과를 반영하지 않는 것으로 보인다.
  • 왜냐하면, step1 if문과 step2 if문이 상관성 없는 별개의 조건문들로 구성되었으며, 나아가 step1 if문에서 step2 if문으로 전달해주는 파라미터 값도 따로 존재하지 않을 뿐더러 이를 확인하는 절차도 없기 때문이다.
  • 그래서, step2 단계에서 조건문만 만족시킨다면, 비밀번호를 바꿀 수 있다는 것으로 보이며, 해당 패킷만 따로 가져와 proxy 툴을 통해 임의의 비밀번호로 설정할 수 있는 것으로 보인다.

 

  • 일단, 실제 로그인 로직은 어떻게 이루어지는지 확인해보기 위해 정상적으로 패스워드를 변경하며 captcha 인증을 받아보도록 함.
  • recaptcha 인증을 받은 후, Change 버튼을 누른 뒤, 

  • burpsuite(proxy)에서 확인한 결과, 오른쪽 사진을 보면, 방금 전에 설정하려고 했던 비밀번호(2222)와 recaptcha-response 값(captcha 인증을 받았다는 인증값)을 전달하는 패킷 확인

 

  • 그 다음 화면으로 넘어가면, Change 버튼을 한 번 더 누르는 페이지가 나오며, 이를 클릭했을 때 패킷을 또 다시 burpsuite에서 확인하였더니,

 

  • step1에서 step2로 넘어갔으며, 설정 예정이었던 비밀번호들이 함께 나온다.

 

  • 그 결과, password가 바뀐 것을 확인해볼 수 있다.

 

  • 이때, step2 가 있는 패킷이 결국 비밀번호를 변경시키는 최종 패킷이고, step1에 대한 인증 결과가 step2에 반영되고 있지 않으므로, step2 패킷만 보내면 된다고 보았고,
  • 해당 패킷을 repeater 탭으로 가져와 비밀번호 3333으로 설정해본 뒤, 서버측에 송신 

 

  • 그 결과, Password Changed 라는 패킷을 수신

 

  • security Level을 medium으로 설정한 뒤, 소스 코드를 확인해보았다. 구조적으로는 달라지는 것이 없어서 step2 if문 내용만 가져왔다.
  • 사진 속 빨간 색 박스 안을 보면, step1을 통과했는지 여부를 확인하는 if문이 있다.
  • 해당 if문이 true가 되면 해당 조건문은 거짓이 되어 그 다음 코드가 진행되겠지만, 만약 false가 되면 빨간 색 박스 친 if문이 작동하여 You have not passed the CAPTCHA라는 문구와 함께 return 값을 반환하여 실패하게 된다.

 

  • 이에 따라 패킷 변조시킬 때 passed captcha를 true로 설정하여 패킷을 전송하였더니, 

 

  • Password Changed 라는 패킷을 수신했다.

 

  • security Level을 high로 설정한 뒤, 소스 코드를 확인해보았다
  • 이전 레벨들과는 다르게, step1, 2로 나누는 것이 아닌, 중첩 if 문 형태로 바뀌었고, 캡차 인증 단계를 거쳤는지 확인하기 위해 $resp 변수에 captcha 인증 결과 값을 담아 갈색 박스에 있는 if문에서 확인해보는 절차를 볼 수 있다.
  • 그러나 $resp 값이 굳이 true가 아니여도 그 뒤에 나오는 or 문을 이용하여 인증을 우회할 수 있다.
  • g-recaptcha-response 파라미터 값을 hidd3n_valu3로, HTTP_USER_AGENT를 reCAPTCHA로 수정하면 captcha 인증을 우회할 수 있다.
  • 이는 reCAPTCHA 서버에서 테스트목적으로 해당서버에 접속할 때, captcha 인증을 우회하기 위해서 작성된 것으로 보인다.

 

  • burpsuite를 이용하여 User-agent를 reCAPTCHA로 설정한 다음, g-recaptcha-response를 hidd3n_valu3로 수정한 다음, 서버에 전송하였더니, 패스워드가 변경되었다는 패킷을 서버측으로부터 수신했다.

 

insecure Captcha 대응 방안

  • CAPTCHA 인증과 관련된 요청은 실습에서 확인했듯이, 요청을 처리하는 과정을 여러 프로세스로 나누어 처리하는 것보다, 하나의 프로세스 안에서 처리되도록 하며, 해당 프로세스 안에서 captcha 인증을 확인하는 과정이 있어야 안전하다.
  • 한 프로세스 내의 처리 로직 내에서도 CAPTCHA에 대한 인증 결과 값을 조건문을 통해 확인해주는 과정이 있어야한다.
  • 하지만 대부분의 CAPTCHA 인증의 경우 쉽게 우회가 가능하기 때문에 중요한 기능을 포함한 요청의 경우에는 다른 추가적인 인증 요소(OTP, 기존 패스워드 인증 등)를 추가하여 구현하는 것이 좀 더 안전하다.

 

'CERT' 카테고리의 다른 글

Weak Session ids 모의해킹  (0) 2024.07.28
Blind SQL Injection 모의해킹  (1) 2024.07.28
File Inclusion 모의해킹  (3) 2024.07.27
BruteForce 모의해킹  (0) 2024.07.27
SQL Injection(Error Bases Injection) 모의해킹  (2) 2024.07.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/08   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함