1 분 소요

SSRF 란?

  • 서버가 임의의 요청을 보내도록 하는 공격이다.

SSRF 문제

문제 내용

  • 수량 체크를 하기위해 내부 시스템으로 부터 데이터를 가지고온다.
  • 문제를 해결하기 위해서는 http://localhost/admin 에 접근하여 carlos 유저를 삭제해야 한다.

Pasted image 20230527001755

문제 풀이

사이트 분석 및 취약점 찾기

상품 수량 체크부분

  • 상품 수량 체크부분 POST요청의 파라미터로 URL을 넣어 요청을 보낸다. 즉 이 부분에서 SSRF 공격을 시도할 수 있다.
    Pasted image 20230527005245
    Pasted image 20230527004914
    Pasted image 20230527005001

  • 오직 POST 요청으로만 수량을 체크할 수 있다. GET 요청을 보냈을 때 수량을 체크할 수가 없다.
    Pasted image 20230527005515

admin 페이지 접속 시도

  • https://문제 주소/admin 을 통해 바로 접속을 시도해 보았다. 하지만 admin 페이지에 접속하기 위해서는 administrator로 로그인 하거나 내부에서 접속해야 한다.
    Pasted image 20230527005910

공격 시나리오

  1. 서버로 수량 체크 요청을 보낼 때 수량을 체크하기 위한 링크가 아닌 서버 내부 페이지 URL를 파라미터에 넣어 요청을 보낸다.
  2. 서버에서 파라미터에 들어있는 URL주소로 요청을 보낸다.
  3. 서버는 URL주소 응답을 받는다.
  4. 서버는 공격자에게 URL 페이지 응답을 그대로 사용자에게 보내준다.

admin 페이지 접속 공격

  1. stockApi 파라미터에 http://localhost/admin 주소를 입력해 준다.
    Pasted image 20230527013431
  2. Post 요청을 보내면 http://localhost/admin 페이지가 나타난다. 이 페이지는 서버 내부에서 접속된 페이지이다.
    Pasted image 20230527013531
  3. admin 페이지 접속에 성공하였다. 이제 carlos 유저를 삭제하면 된다. 즉 위의 사진에서 보이듯 Delete 링크를 눌러줘야한다. 하지만 바로 누르면 외부에서 요청한 것이라 동작을 안한다. 따라서 파라미터에 Delete링크를 넣어 요청을 보내주면 된다.
    Pasted image 20230527014116

유저 삭제하기

  1. stockApi 파라미터에 http://localhost/admin/delete?username=wiener 링크를 입력해 준다.
    Pasted image 20230527014517
  2. Post 요청을 보내면 성공적으로 wiener 유저가 삭제되었다.
    Pasted image 20230527014556
  3. 목표는 carlos 유저를 삭제하는 것이다. 따라서 carlos 를 링크에 넣어주자. 그러면 stockApi 파라미터에는 http://localhost/admin/delete?username=carlos 가 들어가게 된다.
    Pasted image 20230527015033
  4. Post 요청을 보내면 목표였던 carlos 유저가 삭제된다.
    Pasted image 20230527015153

후기

  • 직접 스터디에서 풀이해 주었지만 직접 SSRF 문제를 풀어보니 파라미터로 URL을 입력받는 것이 얼마나 위험한지 알 수 있었다. SSRF 취약점을 이용하면 외부에서 접근이 불가능한 내부 페이지에 접속을 직접 확인할 수 있어 재밌었다.

댓글남기기