모의해킹/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 방식을 사용한다는 것을 알 수 있게 되었다.
공격 시나리오
더보기

공격 코드 넣고 Submit

Owner: bee(현재 접속자), Entry에는 가로세로를 0으로 줬으므로 보이지 않고 Success 문자를 출력한다.

로그아웃 하고 평소처럼 bee/bug로 로그인하면 로그인 실패, fool로 비밀번호를 입력해야만 로그인 성공
♪ 변경된 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 입력하고 ㄱㄱ)



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


난이도 상의 코드

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

csrf_1.php 코드를 살펴보면,

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



그런데 위에서 살펴봤듯이 비밀번호 확인 변수(password_curr) 또한 mysqli_real_escape_string 함수로 입력값을 우회한다.
이 게시글은 테스트용으로 작성되었습니다.
해킹은 엄연한 불법입니다.
오로지 테스트용으로만 사용 바랍니다.
728x90