웹해킹 :: SSRF 취약점/ Lab: Basic SSRF against the local server
SSRF이란?
공격자가 서버사이드에서 의도하지 않은 지점으로 요청을 하도록 만드는 행위이다.
일반적으로 서버가 조직의 인프라 내에 내부망 서비스에 연결을 하도록 하거나, 외부 시스템에 연결해서 중요한 데이터 유출등이 일어날 수 있음.
SSRF 공격이 성공한다면 조직의 허가되지 않은 행위나 데이터 액세스가 발생할 수 있음. 애플리케이션이 연결되어 있는 백엔드 시스템 같은 취약한 시스템을 이용한다.
SSRF 공격의 예시
서버로 ssrf 공격을 할떄 공격자는 주로 HTTP 요청을 호스팅 서버에 보내는데 여기서 URL을 사용할 수 있다.
예를 들어서 유저가 특정 상품의 재고를 확인해야 할 때, 앱에서는 백엔드의 API 쿼리를 해야 한다. 백엔드에서 받은 쿼리 결과를 브라우저에 전달해서 유저에게 보일 텐데 이 API 리퀘스트는 대략 이렇다
POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118
stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1
위의 쿼리는 특정 URL에 요청을 보내고 재고 상태를 유저에게 반환한다
아래처럼 수정하면
POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118
stockApi=http://localhost/admin
대강 이건 원리로 /admin url의 내용을 서버에서 가져와서 유저에게 리턴할수 있다
HTTP 요청을 이용한 공격이라는 점에서 CSRF와 유사하지만 공격이 이루어지는게 클라이언트/서버 사이드라는 차이가 있다
미국 캐피탈원이라는 은행이 SSRF공격으로 침해사고가 발생한 적이 있는 만큼, xss와 더불어 굉장히 비중 있는 취약점임
SSRF 취약점을 이용한 공격사례 분석 및 대응방안
01. SSRF 개요 서버 측에서 위조된 HTTP 요청을 발생시켜 직접적인 접근이 제한된 서버 내부 자원에 접근하여 외부로 데이터 유출 및 오동작을 유발하는 공격을 SSRF(Server Side Request Forgery)라고 한다.
www.igloo.co.kr
이글루 사이트에 있는 ssrf 설명을 보면 그 공격 과정이 설명되어 있는데
무려 은행 사이트가 이 정도로 허술한게 놀랍다
버그바운티 제보했다면...
SSRF 공격 대응 방법
- url값에 http, https만 허용하기
- 요청 처리 서버와 중요 서버 저장하는 서버 분리
- 사용자 입력값 검증
SSRF 공격 실습
내부 시스템에서 데이터를 가져와 재고를 확인하는 기능이 있다
ssrf 취약점을 이용해서 carlos라는 유저를 삭제해 보자
stockApi=http%3A%2F%2Fstock.weliketoshop.net%3A8080%2Fproduct%2Fstock%2Fcheck%3FproductId%3D3%26storeId%3D1
이렇게 백엔드로 api 쿼리를 하는 url이 있으니 이걸 수정해 보자
POST 메서드의 이 파켓을 Repeater에 보내기
carlos 계정을 삭제하려면 admin으로 들어가야 한다
stockApi 부분의 url 값을 localhost/admin으로 변경하고 send하니
200 ok라고 성공적인 응답을 받았다
그리고 응답 부분의 내용을 자세히 살펴보니까 carlos의 계정을 삭제할 수 있는 url이 있다
처음에는 admin/delete/username=carlos라고 생각했는데
이렇게 친절하게 나와있으니 위의 url을 사용하자
수정한 url을 보내고 follow redirection을 하니까 성공적으로 랩을 해결한 브라우저 화면이 보인다
다음 포스팅에서 다른 ssrf 랩도 풀어보자