아임노드

Web Hacking > Command Injection, File Vulnerability, SSRF 본문

[SK shieldus Rookies 23기] 공부 노트/Dreamhack 공부 기록

Web Hacking > Command Injection, File Vulnerability, SSRF

Noody 2024. 12. 28.

 

ServerSide: Command Injection  中

  • 인젝션(Injection)
    • 악의적인 데이터를 프로그램에 입력하여 이를 시스템 명령어, 코드, 데이터베이스 쿼리 등으로 실행되게 하는 기법
  • 이용자의 입력을 시스템 명령어로 실행하게 하는 취약점을 Command Injection이라고 부른다.
  • Command Injection
    • 이용자의 입력을 적절한 검사 없이 명령어로 사용할 때 발생하는 취약점
    • 시스템 함수는 셸 프로그램에 명령어를 전달하여 실행하는데, 셸 프로그램은 다양한 메타 문자를 지원((&&, ;, | 등)
    • 이러한 메타 문자는 여러 개의 명령어를 연속으로 실행시킬 수 있다. 따라서 공격자는 메타 문자를 통해 임의 명령어를 실행하여 셸을 획득할 수 있다.
    • 이러한 취약점을 막으려면 개발자는 입력 값에 대해 메타 문자의 유무를 철저히 검사하거나 시스템 메타 문자를 해석 하지 않고 그대로 사용하는 함수를 사용해야 한다.

 

ServerSide: File Vulnerability   中

  • File Vulnerability
    • 파일 업로드 및 다운로와 관련해서 발생하는 취약점
  • 파일 업로드 취약점(File Upload Vulnerability)
    • 이용자의 파일을 서버의 파일 시스템에 업로드하는 과정에서 발생하는 보안 취약점
    • 이용자가 업로드될 파일의 이름을 임의로 정할 수 있을 때 발생
  • 파일 다운로드 취약점(File Download Vulnerability)
    • 웹 서비스를 통해 서버의 파일 시스템에 존재하는 파일을 내려 받는 과정에서 발생하는 보안 취약점
    • 이용자가 다운로드할 파일의 이름을 임의로 정할 수 있을 때 발생
    • 파일 다운로드 취약점이 자주 발생하는 URL 패턴

  • 업로드 취약점을 막으려면 개발자는 업로드 디렉터리를 웹 서버에서 직접 접근할 수 없도록 하거나, 업로드 디렉터리에서는 CGI가 실행되지 않도록 해야 하고 업로드된 파일 이름을 그대로 사용하지 않고 basepath와 같은 함수를 통해 파일 이름을 검증한 후 사용해야 한다. 또한 허용할 확장자를 명시해 그 외 확장자는 업로드될 수 없도록 해야 한다.
  • 다운로드 취약점을 막으려면 요청된 파일 이름을 basepath과 같은 함수를 통해 검증하거나 파일 이름과 1:1 맵핑되는 키를 만들어 이용자로부터 파일 이름이 아닌 키를 요청하도록 해야 한다.

 

ServerSide: SSRF   中

  • Server-side Request Forgery(SSRF)
    • 웹 서비스의 요청을 변조하는 취약점
    • 브라우저가 변조된 요청을 보내는 CSRF와는 다르게 웹 서비스의 권한으로 변조된 요청을 보낼 수 있다.
    • SSRF를 예방하기 위해서는 입력 값에 대한 적절한 필터링과 도메인 또는 아이피에 대한 검증이 필수적