Hacking_study/해킹과제

SSRF

jin_li 2023. 6. 7. 23:59
SSRF (sever side request forgery)

서버 측 공격 위조. 공격자가 원격 서버에 HTTP 요청을 위조하도록 하는 기법.
서버가 임의의 요청을 하게 하는 공격으로, 원리는 CSRF(클라이언트 측 공격 위조)와 같다.
서버가 외부 자원(리소스)를 이용하는 곳이나, 파라미터로 url을 받는 요청에서 일어날 수 있다.

대응방안 : 파라미터로 url 받지 않기 !

 

 

 

(1) 서버 SSRF 공격

 

서버 자체에 대한 SSRF 공격에서 공격자는 루프백 네트워크 인터페이스를 통해 애플리케이션을 호스팅하는 서버로 다시 HTTP 요청을 하도록 애플리케이션을 유도합니다. 127.0.0.1 여기에는 일반적으로 (루프백 어댑터를 가리키는 예약된 IP 주소) 또는 localhost(동일한 어댑터에 일반적으로 사용되는 이름)과 같은 호스트 이름이 있는 URL을 제공하는 것이 포함됩니다 .

 

서버 SSRF 공격을 실행하기 위해 공격자는 웹 브라우저(또는 다른 클라이언트 앱)에서 사용하는 프로세스를 악용하여 서버의 URL에 액세스하려고 시도합니다. 공격자는 원본 URL을 자신이 만든 악성 URL로 수정하거나 대체합니다. 악성 URL은 일반적으로 127.0.0.1 IP 주소 또는 서버의 로컬 파일 시스템을 가리키는 "localhost" 호스트 이름을 사용합니다. 서버가 요청을 수락하고 라우팅하면 공격자는 서버의 파일 시스템에 성공적으로 침투하여 모든 종류의 잠재적 손상 및 데이터 손실로 이어집니다.

 

 

기초 실습 :

 

Lab: Basic SSRF against the local server | Web Security Academy

This lab has a stock check feature which fetches data from an internal system. To solve the lab, change the stock check URL to access the admin interface at ...

portswigger.net

 

간단히 리뷰하면,

위 문제는 상품의 재고를 확인하기 위해 서버 내에서 데이터를 가지고 오는 웹페이지로,

http://localhost/admin에 접속한 뒤 carlos 유저를 삭제해야 한다.

 

재고를 확인하는 버튼을 클릭하면 stockApi 파라미터에 url이 붙으며 재고 확인 페이지를 불러온다. 이 url에 http://localhost/admin으로 변조하여 보내면 된다. 그러면 관리자 인터페이스에 접속할 수 있다.

 

여기서 계정이 2개가 나오는데, carlos 유저를 삭제하기 위해 그냥 삭제 버튼을 클릭하면 외부에서 요청한 것이라 삭제 되지 않는다. 소스코드를 확인하면 삭제 버튼을 클릭할 때 /admin/delete?username=carlos 로 리다이렉트 되므로, 이 주소를 stockApi 파라미터 값으로 다시 보내면 된다. 즉, 재고를 확인하는 요청을 보낼 때 stockApi=http://localhost/admin/delete?username=carlos 로 변조함으로써 풀 수 있다.

 

 

 

 

(2) 백엔드 SSRF 공격

 

서버측 요청 위조와 함께 자주 발생하는 또 다른 유형의 신뢰 관계는 애플리케이션 서버가 사용자가 직접 연결할 수 없는 다른 백엔드 시스템과 상호 작용할 수 있는 경우입니다. 이러한 시스템에는 라우팅할 수 없는 개인 IP 주소가 있는 경우가 많습니다. 백엔드 시스템은 일반적으로 네트워크 토폴로지에 의해 보호되기 때문에 보안 상태가 약한 경우가 많습니다. 대부분의 경우 내부 백엔드 시스템에는 시스템과 상호 작용할 수 있는 사람이 인증 없이 액세스할 수 있는 민감한 기능이 포함되어 있습니다.

 

SSRF 공격은 신뢰할 수 있는 관계에 있는 서버의 백엔드 구성 요소를 대상으로 할 수도 있습니다. 서버가 콘텐츠를 가져오는 내부 네트워크에 있는 또 다른 시스템입니다. 서버가 백엔드에 연결되면 전체 액세스 권한이 있다고 가정합니다. 이 경우 공격자는 API 호출 URL을 수정하여 중요한 정보에 대한 액세스 권한을 얻거나 무단 작업을 수행할 수 있습니다. 백엔드 구성 요소는 일반적으로 네트워크 경계 내부에 위치하여 보호되는 것으로 간주되기 때문에 보안 메커니즘이 취약합니다.

 

 

기초 실습 :

 

Lab: Basic SSRF against another back-end system | Web Security Academy

This lab has a stock check feature which fetches data from an internal system. To solve the lab, use the stock check functionality to scan the internal ...

portswigger.net

 

간단히 풀이하면,

192.168.0.X에서 포트 8080에 대한 관리자 인터페이스를 찾아서 사용하여 사용자 carlos를 삭제해야 한다.

 

재고를 확인할 때 stockApi 파라미터에 "http://192.168.0.1:8080/product/stock/check?productId=1&storeId=1" 라는 url이 붙는다. 따라서 http://192.168.0.X:8080/admin 을 입력하면 관리자 인터페이스에 접근할 수 있다.

 

X자리에 어떤 숫자가 오는 지는 intruder 탭에서 브루트포싱으로 1부터 255까지 숫자를 임의로 넣어서 관리자 페이지 주소가 http://192.168.0.167:8080/admin 임을 알 수 있다. 

 

이제 첫 번째 문제와 같이, 관리자 인터페이스 소스코드에서 carlos를 삭제하는 주소가 http://192.168.0.167:8080/admin/delete?username=carlos 임을 확인하였고, 이 주소를 다시 stockApi 파라미터에 붙여 보냄으로써 풀게된다.

 

 

 

 

'Hacking_study > 해킹과제' 카테고리의 다른 글

인증/인가 취약점  (0) 2023.06.15
파일 업로드 및 다운로드  (8) 2023.06.01
CSRF 수업 정리(9주차)  (0) 2023.05.25
CSRF 수업 정리(8주차)  (0) 2023.05.18
XSS (stored xss / reflected xss / 대응 방안)  (0) 2023.05.11