secumark 2025. 6. 8. 09:58
728x90

Jr Penetration Tester > Introduction to Web Hacking > Intro to SSRF

 

SSRF = Side Request

항목 SSRF RFI
서버가 공격자가 지정한 URL로 요청을 보내도록 유도 서버가 공격자가 지정한 URL의 파일을 include(포함) 하도록 유도
목적 내부망 접근, 메타데이터 조회, 포트스캔, 내부 서비스 공격 외부 파일을 서버에 포함/실행하여 명령 실행 등
이용 함수 curl, file_get_contents(), fetch() 등 요청 관련 함수 include(), require() 등 파일 불러오는 함수
주요 피해 - 내부망 접근 (ex. 127.0.0.1:8000)  
 
핵심 차이점
구분 SSRF RFI
서버가 요청하는가? ✔️ 서버가 요청만 함 (데이터 가져오기) ✔️ 요청 + 코드 실행
코드 실행 가능? ❌ (보통 불가) ✔️ (PHP로 실행)
목표 내부 시스템 접근, 스캔, 우회 원격 코드 실행 (웹쉘, RCE)

 

SSRF는 서버에게 내부망 또는 외부망 요청을 대신하게 만드는 것이고, RFI는 원격 파일 코드를 실행시키는 것

 

ssrf 방법도 여러가지가 있지만, 그 중 주목할만한 부분은 여기. 서브도메인을 조작하는 것이다. 페이로드가 &x=로 끝나는 것은 url 끝에 서버가 추가 path를 덧붙이지 않도록 막는 용도이고, 이후에 붙는 문자열을 url 경로가 아니라 쿼리 스트링 파라미터(?=)로 전환하는 역할을 한다.

server=http://attacker.com  → 서버가 실제 요청하는 주소:
http://attacker.com/item/9

 

예를 들어서 나는 첫번째 주소처럼 요청을 한건데, 두번째처럼 /item/9가 붙는다. 이때

server=http://attacker.com&x=

 

이런식으로 &x=를 붙이면 뒤에 따로 경로가 안붙게 됨

 

 

원하는 주소가 https://server[.]website[.]thm/flag?id=9이거라서 server=뒤에 뒤에 server.website.thm/flag?id=9까지 적고, 뒤에는 &x로 날렸다.

 

&x이 없었다면 server.website.thm/flag?id=9/item/9 이런식으로 붙어버림 &x=를 붙이면 서버는 /item/9 같은 경로를 붙이지 않고, 그 뒤는 더 이상 경로(path)가 아닌, 추가적인 쿼리 문자열로 처리함

 

SSRF의 4가지 예

  1. URL 전체가 주소창에 파라미터로 쓰였을 때
  2. hidden field를 사용했을 때
  3. hostname 같은.. 부분 url
  4. only 경로

만약 아무런 출력값도 보이지 않는 블라인드 SSRF 공격 수행시 외부 HTTP 로깅툴을 사용해야 할 것이다.. requestbin.com 같은 걸로 모니터링할 수 있게.. 나만의 HTTP 서버나 버프스위트를 사용해도 되고

 

Deny List와 Allow List

  • 추가 우회 방법은 바로 open redirect를 이용하는 것

 

예를들어 https://website.thm/link?url=https://tryhackme.com. 

광고/마케팅 목적으로 visitors이 얼마나 많이 방문했는지 기록하려고 카운트를 세는 역할을 함

 

 https://website[.]thm/ 으로 시작하는 주소여야만 할 때. 이때 이 기능을 사용할 수 있다. 내부 http 요청을 해커의 선택에 따른 도메인에.. 입력할 수 있도록

 

ACME 웹사이트에 들어가면

첫번째 /private 경로, 이 컨텐츠는 우리 ip로는 접근이 안된다는 에러 메시지를 표출할 것임

두번째 /customers/new-account-page에 있는 새 버전의  customer account page임 

 

avatars의 경로가 /assets/avatars/1.png 라는 것 확인할 수 있음

 

 

그리고 내가 고른 아바타를 다시 보면 base64 인코딩된 것을 확인할 수 있음

 

이후 avatar를 다시 바꾸면서 값을 private으로 바꿔봄

 

x/../private  !?

디렉터리/../ 구조로 경로를 정규화했을 때 원래보다 상위로 이동하는 효과가 있음

728x90