웹 해킹의 목표
- 웹 서버 : 웹 어플리케이션 호스팅, 운영체제 상에서 동작
웹 서버의 파일 구조 및 시스템 파일에 접근 목적 - 웹 어플리케이션 : 사용자와의 상호 작용을 위해 동작하는 프로그램
권한 없이 수행하고자 하는 모든 종류의 공격이 목적, 웹 어플리케이션 취약성 이용 - 웹 사용자 : 관리자 및 외부 클라이언트 사용자
웹 사용자를 목표로 기술적인 사회공학적 해킹 목적
취약점 수집
- 웹 사이트의 정보 수집
ex) 구글 검색엔진을 이용하여 파일 구조를 알아내거나, 관리자 파일을 쉽게 접근 가능한 사이트들을 찾기
es) 해당 사이트의 서버사이드 언어를 알아내고 이를 통해 OS를 알아냄 - 홈페이지에서 게시판이나 자료실, 로그인 부분 포함 여부 확인
ex) 로그인 부분이 제대로 구현이 안되어있을 수 있음 - 홈페이지 파일의 확장자 확인
해당 방법을 통해 웹 서버의 정보 수집과 취약점 분석을 위한 범위를 축소할 수 있다.
웹 프록시 이용
웹 서버에 대한 요청(Request), 응답(Response), 현재 붙잡고 있는 (Trap)을 확인할 수 있음
- Burp suit나 Fiddler Classic이 있음
- 주고받는 request와 response를 확인할 수 있음
OWASP (Open Web Application Security Project)
주요한 웹 취약점을 매년 발표
구글 검색 엔진 활용
검색 엔진 : 웹해킹을 하면서 많은 정보를 수집하는 가장 유용한 방법
구글에서는 고급 검색 기능을 사용한다.
- site : 특정 사이트만을 집중적으로 선정해서 검색할 때 유용
ex) site:wishfree.com admin > wishfree.com 도메인이 있는 페이지에서 admin 문자열 검색 - Filetype : 특정 파일 유형에 대한 검색
ex) filetype:txt passwd >파일 확장자가 txt이고 passwd 라는 문자열이 들어간 파일을 검색 - link : 특정 링크가 포함되어있는 페이지를 검색
ex) link:www.wishfree.com > 해당 주소를 링크하고 있는 웹페이지들을 검색 - cache : 구글에서 백업해 둔 페이지의 정보를 보고자 할 때 사용
- 관리자가 자신이 관리하는 웹의 취약점을 확인하여 수정하더라도, 백업된 데이터에 정보가 남는 경우가 있음
ex) cache:wishfree > 구글에 저장된 페이지를 보여줌 - intitle : 디렉토리 리스팅 취약점이 존재하는 사이트를 쉽게 검색 가능
ex) intitle:index.of admin > 해당 웹 서버가 디렉토리 리스팅이 있는, 즉 타이틀에 index.of나 admin이 있는지 확인
디렉토리 리스팅 : 파일 구조에 접근하여 특정 폴더나 파일을 확인할 수 있도록 하는 기능 - inurl : site 기능과 유사
ex) inurl:login : URL에 login이라는 문자열을 포함하는 사이트 검색
* 검색 엔진의 검색을 피하는 방법
서버의 홈 디렉토리에 robotx.txt 파일이 있는데, 어떤 접근을 허용할 것인지 불허할 것인지 설정할 수 있음
ex) Disallow: /admin/ : admin 디렉토리 불허
ex) User-agent: googlebot : 구글의 검색 불허
이러한 과정을 통해 정보를 수집하여 특정한 웹서버/사이트에서 원하는 정보를 수집할 수 있어야한다.
파일 접근
해커는 웹 서버에 대한 인증 정보 없이 "정보"들을 수집할 수 있어야한다.
디렉토리 리스팅
웹 브라우저에서 웹 서버의 특정 디렉토리를 열면 그 디렉토리에 있는 파일과 디렉토리 목록이 모두 나열
ex) http://~~~/bss/ 이런 경우 찾는 웹페이지가 없을 수 있다.
디렉토리 리스팅이 설정되어 있는 경우, 웹페이지가 없으면 모든 디렉토리 리스트를 제공한다.
따라서, 디렉토리에 어떤 파일이 있는지 전부 확인이 가능하다.
- 화면에 보이지 않는 여러 웹페이지들을 접근 가능
- 디렉토리 목록을 확인할 수 있음
원칙적으로는 login에 먼저 접근해야 board에 접근할 수 있다.
디렉토리 목록을 확인하게 된다면, 현재 url에 해당 경로를 직접 입력하면 접근할 수 있음
* 세션이라는 개념이 프로그래밍되지 않은 경우에만 가능
임시 / 백업 파일 접근
- 상용 에디터 사용시, .bak or .old인 백업 파일을 자동 생성
- 백업 파일들은 클라이언트가 그 파일을 직접 다운로드 가능
- 서버의 로직 뿐만 아니라, 네트워크 정보 등 다양한 정보 포함 가능
- 대부분의 웹 스캐너는 서버 로직, 네트워크 정보 등을 자동으로 검색
> 상용 에디터 등을 이용한 웹 소스 편집을 지양
파일 다운로드
- 웹 서버에서 제공하는 파일 다운로드 페이지 이용
- 정상적인 경우 : http://~~/board/download.jsp?filename=~~.doc
- list.jsp 파일이 board쪽에 있는 경우 : http://~~/board/download.jsp?filename=../list.jsp
(파일의 상대 경로 고려)
list.jsp 파일은 목록을 보여주는 것이기 때문에, DB에 접속해서 해당 글을 읽어오는 쿼리문을 알 수 있다.
따라서 이 파일을 유출시킨다면 DB에 접근 및 DB 구조 등을 파악할 수 있다.
상대 경로를 이용한 파일 다운로드
. : 현재 디렉토리
.. : 상위 디렉토리
download.jsp는 "파일이름"만 주면 /upload로 가서 다운로드 받도록 설정이 되어있음
따라서 download.jsp를 이용하면 /upload로 자동으로 가기 때문에 /upload의 상위 폴더인 /board로 다시 돌아가서 list.jsp를 다운로드 받도록 해야함.
http://www.wishfree.com/board/download.jsp?filename=../admin/adminlogin.jsp
: /board/admin 디렉토리에 있는 adminlogin.jsp를 다운로드
http://www.wishfree.com/board/download.jsp?filename=../donwload.jsp
: download.jsp파일도 다운로드 가능
위의 예시와 같이 시스템 내부의 중요 파일도 위와 같은 방법으로 다운로드를 시도할 수 있다.
만약, 유닉스 시스템인 경우 /etc/passwd에 같이 사용자 계정과 관련된 중요 파일을 저장하고 있기 때문에, root로 계속 올라가서 해당 파일을 얻어낼 수 있다.
http://~~~/download.jsp?filename=../../../../../../../../../../../../etc/passwd
../ :상위 디렉토리로 가는 것이 많은 것일 수록 좋다. 얘가 root를 넘어서도 그대로 root에 머물게 된다.
대응책
- 디렉토리 인덱싱(또는 리스팅) 기능 설정 제거
- 파일 이름을 변수로 주거나, 이에 대한 입력 값을 사용자로부터 입력 받을 때, 해당 변수에 상대 경로가 포함되어 있는지 소스 레벨에서 검사 (소스 레벨에서 구현해야함)
- 다운로드 파일의 이름을 DB에 저장 : 다운로드 수행 시 요청 파일명과 비교
- 다운로드는 특정 디렉토리로 한정 : 소스 프로그램에서 다운로드 디렉토리의 절대경로 지정
ex) objStream.LoadfFromFile Server.MapPath("./upload/) & "\" & 파일 명
파일 업로드
시스템 내부 명령어를 실행시킬 수 있는 웹 프로그램을 제작하여 자료실과 같은 곳에 공격용 프로그램을 업로드하는 공격 방식
ex) cmdasp.asp로 서버사이드 언어로 올리면 공격자 프로그램을 파일 첨부를 통해 올리면, 웹페이지에 저장이됨
파일의 저장 위치만 알 수 있다면, 해당 파일이 저장된 위치/cmdasp.asp로 공격자 프로그램을 실행시킬 수 있음
파일 업로드 공격 형태
- Server Side Script 파일 업로드 ex) .asp .jsp
- 서버 상에 저장된 경로 유추
- 경로를 통해서 업로드한 파일 실행
- 쉘 획득
- 시스템 명령어를 홈페이지를 통해서 실행
- 웹 브라우저는 결과 출력
- 웹 서버와 연동된 다른 서버들(DB서버 등) 공격 가능
* 현재 프로그램이 "어떤 경로"에 올라갔는지 확인할 수 있는 경로가 웹 브라우저에 뜨는 경우가 있음
파일 업로드 시 취약점
실행 파일 확장자를 가진 파일이 아무런 필터링 없이 업로드 됨
- 업로드 시 파일 확장자 체크 필요
- 시스템에서 Asp, jSp 같은 대소문자의 혼합도 인식하기 때문에 가능한 조합을 모두 필터링해야함
- 특정 확장자를 가진 파일만 업로드하도록 설정
- 첨부 파일에 마우스를 가져가면 브라우저 아래에 파일 업로드 경로를 표시
> 경로 정보는 공격자에게 매우 중요
> 웹 브라우저에서도 웹 프록시를 통해 노출되면 안됨
저장 파일 이름이 아무런 변환 없이 그대로 저장
- 웹 서버에 악성 파일이 업로드 되어도 해당 파일을 찾을 수 없게 파일 이름과 확장자를 변경하여 저장
- 훨씬 높은 수준의 보안성을 확보
대응책
- 첨부 파일의 확장자 필터링
- ServerSideScript로 구현
- 모든 실행 가능한 파일 업로드 금지 (대소문자 전부 인식하므로 이를 신경써서 "전부" 필터링 해야함)
- 업로드 가능한 확장자 지정 - 파일명 변환 : 해시를 시켜서 전혀 알 수 없는 이름으로 저장되도록 해야함
- 파일 저장 위치 숨김
- Upload를 위한 디렉토리에는 실행 설정 제거 : 읽기만 가능하고, 실행 설정을 제거한다.
- 웹 서버 구동 시, 일반 사용자 권한으로 구동 : 공격자가 첨부파일을 통해서 권한을 획득하더라도 최소한의 권한만 사용
인증 우회
웹서버에서의 인증 : 사용자 ID / 패스워드
인증 우회
- 관리자 페이지나 인증이 필요한 페이지에 대한 인증 미처리로 인해 인증을 우회하여 접속할 수 있게 되는 취약점
- 일반 사용자나 로그인하지 않은 사용자가 관리자 페이지에 접근
- 제대로 된 인증을 받지 않고 서비스를 이용하고자 함
인증 우회 예시
- 로그인을 하지 않고도 관리자용 웹 페이지에서 특정 작업을 직접 수행
- 관리자로 로그인 한 후에야 admin.asp에 접근할 수 있어야하는데, 로그인 하지 않은 채로 바로 접근하여 관리 권한을 얻는 경우
- 취약 / 디폴트 계정 사용 : admin, guest or 추측이 용이한 계정 or 테스트 계정
- 로그아웃 처리 미흡 : 세션이 열려있는 상태
대응책
- 취약 디폴트 계정의 사용 제한
- 로그아웃 구현 및 세션 파기
- 웹에 존재하는 중요 페이지에 세션값(쿠키)를 확인하도록 검증 로직 입력
쿠키 : 클라이언트 브라우저 정보 참조, 크라이언트에 의해 관리
세션 : 클라이언트 정보 저장, 서버에 의해 관리
모든 관리자용 페이지는 세션 아이디 검증 로직 포함
'Hacking > Web Hacking' 카테고리의 다른 글
SQL Injection (0) | 2024.10.15 |
---|---|
XSS (0) | 2024.10.15 |
패킷 변조 (0) | 2024.07.16 |