SSRF 실습 문제 Basic SSRF
SSRF 란?
- 서버가 임의의 요청을 보내도록 하는 공격이다.
SSRF 문제
문제 내용
- 수량 체크를 하기위해 내부 시스템으로 부터 데이터를 가지고온다.
- 문제를 해결하기 위해서는
http://localhost/admin
에 접근하여carlos
유저를 삭제해야 한다.
문제 풀이
사이트 분석 및 취약점 찾기
상품 수량 체크부분
-
상품 수량 체크부분 POST요청의 파라미터로 URL을 넣어 요청을 보낸다. 즉 이 부분에서 SSRF 공격을 시도할 수 있다.
-
오직 POST 요청으로만 수량을 체크할 수 있다. GET 요청을 보냈을 때 수량을 체크할 수가 없다.
admin 페이지 접속 시도
https://문제 주소/admin
을 통해 바로 접속을 시도해 보았다. 하지만 admin 페이지에 접속하기 위해서는administrator
로 로그인 하거나 내부에서 접속해야 한다.
공격 시나리오
- 서버로 수량 체크 요청을 보낼 때 수량을 체크하기 위한 링크가 아닌 서버 내부 페이지 URL를 파라미터에 넣어 요청을 보낸다.
- 서버에서 파라미터에 들어있는 URL주소로 요청을 보낸다.
- 서버는 URL주소 응답을 받는다.
- 서버는 공격자에게 URL 페이지 응답을 그대로 사용자에게 보내준다.
admin 페이지 접속 공격
stockApi
파라미터에http://localhost/admin
주소를 입력해 준다.- Post 요청을 보내면
http://localhost/admin
페이지가 나타난다. 이 페이지는 서버 내부에서 접속된 페이지이다. - admin 페이지 접속에 성공하였다. 이제
carlos
유저를 삭제하면 된다. 즉 위의 사진에서 보이듯Delete
링크를 눌러줘야한다. 하지만 바로 누르면 외부에서 요청한 것이라 동작을 안한다. 따라서 파라미터에Delete링크
를 넣어 요청을 보내주면 된다.
유저 삭제하기
stockApi
파라미터에http://localhost/admin/delete?username=wiener
링크를 입력해 준다.- Post 요청을 보내면 성공적으로
wiener
유저가 삭제되었다. - 목표는
carlos
유저를 삭제하는 것이다. 따라서carlos
를 링크에 넣어주자. 그러면stockApi
파라미터에는http://localhost/admin/delete?username=carlos
가 들어가게 된다. - Post 요청을 보내면 목표였던
carlos
유저가 삭제된다.
후기
- 직접 스터디에서 풀이해 주었지만 직접 SSRF 문제를 풀어보니 파라미터로 URL을 입력받는 것이 얼마나 위험한지 알 수 있었다. SSRF 취약점을 이용하면 외부에서 접근이 불가능한 내부 페이지에 접속을 직접 확인할 수 있어 재밌었다.
댓글남기기