[리팩토링] #29 웹 취약점 (3)

Hyungjun·2025년 4월 3일

Mission

  1. 파일 다운로드 취약점
  2. 파일 업로드 취약점
  3. 소스코드 내 중요정보 노출 취약점
  4. 공개용 웹 게시판 취약점

해당 취약점에 대한 설명과, 해당 취약점을 캡쳐, 그리고 대응방안 순으로 알아보자.

#1 파일 다운로드 취약점

설명

파일 다운로드 기능이 존재하는 웹 어플리케이션에서 파일 다운로드 시 파일의 경로 및 파일명을 파라미터로 받아 처리하는 경우 파일에 대한 접근 권한이 설정되어 있지 않다면 공격자가 파라미터를 조작하여 환경설정 파일, 웹 소스코드 파일, 데이터베이스 연동 파일 등을 다운 받을 수 있는 취약점.

취약점 실습

PortSwigger Web Academy에 Directory Traversal Lab 실습을 예시로 가져왔다.

위의 웹 페이지가 랜더링 될 때, Burp suite 를 사용해서 어떤 요청이 진행되는 지 파악하고, Repeater 기능을 사용해 요청을 수정하고 재전송할 수 있다.

F12로 개발자 도구를 사용해 보면, image가 로컬 서버에서 그냥 'filename=' 을 통해 제공받아 오는 것을 확인한다.

Repeater 를 이용해 filename=../../../../etc/passwd 로 수정한다. '../' 을 사용해 가장 높은 루트로 간 다음, 내가 원하는 경로를 입력해 파일을 가져온다.

대응 방안

  1. 파일 경로 매개변수 문자열 필터링 : '../', '..\' 등의 상위 경로를 의미하는 문자열을 필터링한다.

  2. 파일 다운로드 가능 위치 고정 : 가능 위치 외 디렉터리에서는 다운로드가 불가능하도록 로직 구현

  3. 다운로드 파일 이름을 DB.에 저장하고 다운로드 시 요청파일 이름과 비교하여 적정성 검증을 통한 취약한 매개변수 제거

#2 파일 업로드 취약점

설명

서버 측에서 실행 가능한 스크립트 파일(asp, jsp, php 등)이 업로드 가능하고 이 파일을 공격자가 웹을 통해 직접 실행시킬 수 있는 경우, 시스템 내부 명령어를 실행하거나 외부와 연결해 시스템을 제어 등을 할 수 있는 공격

취약점 실습

PortSwigger Web Academy에 Directory Traversal Lab 실습을 예시로 가져왔다.

웹 페이지에서 내 계정의 프로필 사진을 등록할 때, 이미지를 업로드 할 수 있는 버튼이 있다. POST 요청이 되기 때문에, 필터링 기능이 없다면 내가 원하는 웹 쉘을 서버에 업로드 할 수 있다.

POST 요청을 보니, jpg 파일을 업로드하고, 아래에는 jpg 파일의 데이터가 들어간다.

이미지 파일의 데이터를 삭제하고
<?php echo file_get_contents('/etc/passwd'); ?>
/etc/passwd 라는 파일을 출력하는 코드를 작성한다.

파일을 업로드하였을 때, GET 요청을 통해 내가 업로드한 파일을 화면에 보이게 한다. 이 GET 요청을 사용하여 내가 업로드한 웹 쉘을 실행시켜 준다.

Response 를 확인해 보니, passwd 를 출력해오는 것을 확인할 수 있다.

대응 방안

  1. 업로드 확장자 검증 기능 구현

  2. Upload 파일에 대한 실행 권한 제거 : Upload 전용 디렉터리를 별도 생성하고, 해당 디렉터리에 대한 실행 권한 제거

#3 소스코드 내 중요정보 노출 취약점

설명

소스코드 주석에 민감한 정보(개인 정보, 시스템 정보 등) 이 포함되어 있는 경우, 
외부공격자에 의해 패스워드 등 보안 관련정보가 노출될 수 있는 취약점을 의미한다.

  • 하드 코딩된 패스워드
    패스워드와 같은 민감한 정보가 소스코드에 그대로 노출되어 있는 경우
  • 주석에 중요 정보가 포함되어 있는 경우

취약점 실습

filetype:php intext:"$admin_username"

대응방안

  1. 중요 정보 파일 별도 보관 및 난독화

  2. 불필요한 백업 파일 전부 삭제

  3. Client side 대신 Server side에서 중요 로직 처리
    Client side : HTML, JAVA Script, Virtual Basic Script 등
    Server side : ASP, JSP, PHP, Perl 등

#4 공개용 웹 게시판 취약점

설명

웹 서버 구축 시 금전적, 시간적 부담으로 인해 제로보드, 테크노트, 그누보드, 세팔보드 등의 
공개용 웹 게시판 소프트웨어를 사용하는 경우 (오픈소스 기반), 인터넷에 공개된 각종 취약점 정보로 인해 홈페이지 변조 및 공격 등의 주요 보안 취약점이 발생할 수 있다.

특히, 공개용 게시판 소프트웨어는 유지 보수, 보안 점검, 패치, 업데이트 등을 사용자가 직접 해야된다.

사용자가 최신 버전으로 업데이트를 하지 않고 사용할 경우, 공격자가 이미 특정 버전에서 알려진 취약점을 이용해 공격을 시도할 수 있는 것이다.

과거 제로보드의 구 버전에서는 파일 업로드 취약점이 발견되었고, 테크노트의 일부 버전에서는 SQL 인젝션 취약점이 발견된 사례가 있다.

취약점 실습

ExploitDB, CVE 등 취약점 공개 사이트 검색

inurl:zeroboard

제로보드는 제로보드 XE, ZEROTABLE 등으로 다양한 업데이트가 있었지만, 해당 웹사이트와 같이 여전히 구형 제로보드(2003년 8월에 배포된 버전 4.1 pl 4)를 사용하는 경우도 존재한다.

대응 방안

  1. 게시판에 보안 코딩을 적용해서 첨부파일로 업로드되는 파일에 필터를 걸어놓음으로써 정상적으로 올려져야 하는 파일 외에는 스크립트 파일들이 올라가지 못하도록 해야 한다.

  2. 만약 첨부파일로 스크립트가 올라가더라도 이것이 실행되지 않도록 웹 환경 설정에서 보안 설정을 강화해야 하고, DB보안, 계정관리 등 뒷단의 보안과 함께 앞단에서 웹 방화벽이나 IPS 등의 구축으로 보안을 강화할 필요가 있다.

  3. 무엇보다 중요한 것은 홈페이지의 지속적인 모니터링을 통한 보안 관리와 함께 보안 업데이트 등의 필수 보안조치를 철저히 수행하는 것이다.

참고

https://sheow13.tistory.com/41
https://itcase.tistory.com/

profile
Cloud Security / DevSecOps / AWS

0개의 댓글