모의해킹/beebox

A8 | Cross-Site Request Forgery (CSRF)

팥죽도사 2022. 8. 27. 15:10

CSRF(Cross-Site Request Forgery)?

💡 공격자로 인해 Client가 의도하지 않은 악의적인 행위를 서버에 요청하는 취약점. 웹 서버는 클라이언트의 변조된 요청을 정상적인 요청으로 판단하고 응답한다.

⚠️ XSS와의 차이점

ATTACK VICTIM
XSS Client 그 자체
CSRF Client를 공격자로 대신하여 공격하게 함.
!!누명을 씌움!!

정상 시나리오

더보기

 

접속한 사용자의 비밀번호를 변경할 수 있는 페이지.
비밀번호를 새로 입력하면 변경되었다는 메세지와 함께 URL이 변경된다.

GET 방식을 사용한다는 것을 알 수 있게 되었다.

공격 시나리오

더보기

♪ 변경된 URL을 활용하여 사이즈가 0인 이미지 태그로 사용자 비밀번호를 변경하는 페이지를 호출해보자.

  • Attack code
<img src="http://14.36.28.177:4488/bWAPP/csrf_1.php?password_new=fool&password_conf=fool&action=change" height="0" width="0">

‘htmli_stored.php’ 페이지로 이동한다. (URL bWAPP/ 뒤에 htmli_stored.php 입력하고 ㄱㄱ)

공격 코드 넣고 Submit
Owner: bee(현재 접속자), Entry에는 가로세로를 0으로 줬으므로 보이지 않고 Success 문자를 출력한다.
로그아웃 하고 평소처럼 bee/bug로 로그인하면 로그인 실패, fool로 비밀번호를 입력해야만 로그인 성공

사용자가 공격자에 의해 조작된 코드(img src)를 입력했지만 서버는 정상적인 요청으로 받아들이고 Change Password를 성공적으로 수행했다.

대응방안

더보기

csrf_1.php 코드를 살펴보면,

password_new 변수를 mysqli_real_escape_string 함수를 사용하여 우회한다. 코드를 클릭하면 볼 수 있듯이 SQL 인젝션 공격이 불가능하게 우회하는 함수이므로, 다른 공격이 불가능하다.

난이도 상의 코드
난이도 상은 페이지에 현재 사용자의 비밀번호를 확인하는 입력란이 새로 추가된다.

그런데 위에서 살펴봤듯이 비밀번호 확인 변수(password_curr) 또한 mysqli_real_escape_string 함수로 입력값을 우회한다.

이 게시글은 테스트용으로 작성되었습니다.

해킹은 엄연한 불법입니다.

오로지 테스트용으로만 사용 바랍니다.

728x90