SSRF

2024. 5. 6. 11:10Study/web

320x100
320x100

HTTP 라이브러리

PHP : php-curl

NodeJS : http

python : urllib, requests

 

=> HTTP 요청을 보낼 client 뿐만 아니라 server와 server간 통신을 위해 사용되기도 한다.

 

SSRF (Server-Side Request Forgery)

웹 서비스의 요청을 변조하는 취약점

브라우저가 변조된 요청을 보내는 CSRF와는 다르게 웹 서비스의 권한으로 변조된 요청을 보낼 수 있다.

 

웹 서비스가 보내는 요청을 변조하기 위해서는 요청 내에 이용자의 입력값이 포함돼야 한다.

 

ex1) 웹 서비스가 이용자가 입력한 URL에 요청을 보내는 경우

image_downloader

이용자가 입력한 image_url을 requests.get 함수를 사용해 GET 메소드로 HTTP 요청을 보내고 응답을 반환

ex) URL 입력

http://127.0.0.1:8000/image_downloader?image_url=https://dreamhack.io/assets/dreamhack_logo.png

=> 엔드포인트 image_url에 request_info 엔드포인트 경로 입력

http://127.0.0.1:8000/image_downloader?image_url=http://127.0.0.1:8000/request_info

 

request_info

웹 페이지에 접속한 브라우저의 정보(User-Agent)를 반환

ex) 해당 엔드포인트에 접근

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4558.0 Safari/537.36

=> 브라우저 정보

python-requests/<LIBRARY_VERSION>

 

 

ex2) 요청을 보낼 URL에 이용자 번호와 같은 내용이 사용되는 경우

http://api.internal/search

=> # 문자를 입력해 경로 조작(# 문제 뒤에 붙는 문자열은 API 경로에서 생략됨)

http://api.internal/search?user_name=secret&user_type=private#&user_type=public

 

ex3) 이용자가 입력한 값이 HTTP Body에 포함되는 경우

data = f"title={title}&body={body}&user={session['idx']}

=> & 구분자를 포함해 user 파라미터를 추가

title=title&user=admin&body=body&user=guest

 

 

 

 

 

 

320x100
320x100

'Study > web' 카테고리의 다른 글

File Vulnerability  (0) 2024.05.06
command injection  (0) 2024.03.06
cookie & session  (0) 2023.10.13
web  (0) 2023.10.12
command injection  (0) 2023.08.30