Try Attack/Web Hacking[basic]

Web hacking 이론

D4tai1 2019. 4. 27.

1. 가상화
1) Hyper-V(하이퍼바이저) 란?
▶ Host System에서 다수의 Guest OS를 돌리기 위한 Platform
▶ Host OS = Physical System에 설치된 OS
▶ Guest OS = Virtual Machine, Container 위에 설치된 OS


2) Hyper-V의 유형 [차이 구분]
▶ Type1 = Hyper-V가 하드웨어 위에서 바로 실행
▶ Type2 = Host OS위에 Hyper-V를 실행


3) Hyper-V의 종류
▶ VMware - ESXi(Type1), Workstation(Type2)
▶ MS Hyper-V - Windows Server에 통합
▶ Ctrix Xen (최초의 반가상화 Hyper-V)
▶ KVM (OpenStack, Cloud 구축, 통합형, 커널의서브모듈)
▶ 패러랠즈(Paraellels) - OSX기반
▶ Oracle Virtualbox - GPL기반


4) 전가상화 Vs 반가상화
① 전가상화(Full Virtualization)
▶ Hardware를 완전히 가상화
▶ OS제약 없이 사용가능
▶ Guest OS는 자신이 가상머신 위에서 작동하는지 모름
▶ System에 물리적인 가상화기능 필요
▶ Q. 전가상화 성능이 반가상화보다 저하되는 이유?
  A. Guest OS에서 물리자원 직접접근 불가하여, Hyper-V를 통해 접근해야하기 때문


② 반가상화(Half Virtualization)
▶ Guest OS가 자신이 가상머신 위에서 동작하는지 인식
▶ OS제약이 없음, 단 kernel을 수정해야 함(주로 Linux만)
▶ Guest OS에서 물리자원 직접접근가능(Passthrough)
▶ 바이너리 변환(Binary Translation)
▶ HVM(Hardware Virtual Machine)


5) VM Vs Container
▶ VM = 보안, 멀티OS지원
▶ Container = 작고, 빠르고, 빠른 라이프사이클 적용
  ex) Docker의 경우 kernel을 host와 공유, 보안 취약


6) Guest edition setup
▶ 클립보드 공유, 드래그 앤 드롭, 공유폴더, 해상도 지원


7) Snap Shot[기능 출제]
▶ 현재 Guest OS의 상태를 저장, 복원, 삭제, 복제 할 수 있는 기능


8) 복제
▶ 물리적으로 복제하는 방법 (MAC Address 초기화)


9) OVA
▶ 가상시스템을 하나의 파일로 압축해서 배포시 사용


10) Virtualbox Script / shell_exec
echo '<? echo 'shell_exec("ls"); ' >> look.php ?>' >> test.php


2. Burp Suite - proxy server
▶ proxy = 클라이언트/서버 간 request/response 패킷을 확인가능 [중간역활, 대리, 거쳐가는..]
▶ 사용이유 = 변조하기위해


3. Bruteforce Attack 대응방안
▶ 로그인 횟수제한
▶ 로그인 실패 시 일정시간 로그인 금지
▶ 현재 시간 값으로 접근 시 토큰 값 제작 후 비교
▶ 휴리스틱 = 사용자정보를 통해 조사 (시간단축)


4. Command Execution [cat, echo 사용법, 코드해석]
▶ 명령어를 서버에 원격으로 실행


1) 기본 명령어
▶ which ls = ls의 위치 출력
▶ | = 앞 명령어의 결과를 뒤로 보냄
▶ && = 앞 명령어의 결과가 참이면 뒤 실행
▶ || = 앞 명령어의 결과가 거짓이면 뒤 실행
▶ ; = 한 줄에 여러명령어 실행


2) 공격 스크립트 예
▶ 1   echo > phpinfo.php
▶ 2   chmod 777 phpinfo.php
▶ 3   echo '<? phpinfo(); ?> >> phpinfo.php


3) 공격방법
▶ Fuzzing(퍼징) = 예상치 않은 데이터 입력하여 장애발생
▶ ex) rm -rf /*


4) 페이로드 Vs 익스플로잇
▶ payload = 공격 자체의 코드, 즉 옮겨졌을 때 실행되는 코드, 침투가 끝나고 실행되는 코드
▶ exploit = 침투를 하기 위한 코드


5) 대응방안 = Secure coding
▶ input형태가 ping xxx.xxx.xxx.xxx 아니면 차단
▶ &, |, ; 등의 특수기호 input시 차단


5. File inclusion
1) 취약점
▶ Web Server의 resource를 권한 없이 가져오는 것
▶ Open source로 개발 된 App는 디렉토리 구조가 알려져 있어서 $_GET, $_POST, $_Cookie 값을 전달 받을 때 매개변수의 값을 서버에서 검증하지 않아 취약


2) 공격방법
▶ Server의 URL을 통해 공격코드 삽입하여 공격
https://naver.com/admin/?page=/etc/passwd


3) RFI Attack(Remote File Include)
 ① Remote File Include 란?
▶ 악성 스크립트를 서버에 전달하여 실행
▶ 원격지의 파일보기 가능
▶ 원격지의 파일실행 가능
▶ 외부사이트의 파일주소 내용 실행 가능


 ② php 코드
▶ 1   if(isset($_GET['page'])) {
▶ 2     $file=$_GET['page'];
▶ 3   }
▶ 4   include($file. '.php'); //변수에 php를 붙여 호출
▶ php문을 호출하지 않을 경우 ?를 사용하여 뒤 생략


 ③ 대응방안
▶ php 환경설정 파일[php.ini] 수정
  + allow_url_fopen = OFF [URL을 파일의 값처럼]
  + allow_url_include = OFF
▶ 지정된 파일만 열도록 조건


6. File Upload
1) 취약점
▶ 악성스크립트(Web shell) File을 Web Server에 Upload
▶ Web Shell = Web에서 System에서 할 수 있는 모든 것을 사용 가능


2) Bind Shell Vs Reverse Shell
 ① Bind Shell
▶ 공격 대상이 자신의 호스트에 listener port를 열고 들어오는 요청을 대기하게 만드는 shell
▶ 공격자는 사설 IP를 사용해도 무관, 서버는 공인IP
▶ Web Server에 netcat Server 띄우기
▶ 방법 = nc [Server IP] [port number]


 ② Reverse Shell
▶ 공격 대상이 공격자에게 통신하도록 만드는 shell
▶ 공격자는 코드나 커맨드 실행의 성공 후 발생하는 연결을 수신할 listener port를 가져야 함
▶ Client에 netcat Server 띄우기
▶ 방법 = nc -l -v -p [port number]


 ③ Reverse Shell이 필요한 이유?
▶ 방화벽 정책 때문
▶ 대체로 서버의 방화벽 정책은 들어오는 아웃바운드 정책은 모두 오픈되어있고, 인바운드 정책은 특정포트만 오픈해 놓는다. 그래서 Server에 port를 지정해놓고 내가 접속하는 Bind Shell 방식이 방화벽에서 차단된다. Reverse Shell방식은 Server에서 Client로 접속하기 때문에 방화벽 정책에 걸리지 않는다.


3) 대응방안
▶ File Upload시 확장자 검사하여 jpg, png만 Upload
[파일 확장자만 바꿔서 올리고 올린 후 변경하면 무용지물]
▶ 모든 파일을 업로드 시 소스를 분석하여 Web Shell과 비슷한 유형의 소스가 있으면 차단


7. 클라이언트 분석
 ① Debugging Tool 사용방법
▶ Firefox 접속
▶ Developer - Developer Toolbar
▶ Break point / Step over / Step into / Step out


8. 프로토콜 분석
1) HTTP 1.0 Vs HTTP 1.1
▶ 1.0 = 연결 - 요청 - 전송 - 종료 - 연결
▶ 1.1 = 연결 - 요청 - 전송 - 요청 - 전송


2) 동작과정
 ① Request
▶ 요청문(get /index.php), 헤더(URL), 공백라인, 본문


 ② Response
▶ 상태문(HTTP/1.1 200OK)
▶ 헤더정보(Date, Server, ...)
▶ 공백라인
▶ 바디정보(<HTML>로 시작) - 본문


 ③ Request Line
▶ method = 서비스 수행 기능 명시
▶ URL = 웹 페이지 위치정보
   + URL =  프로토콜 :// 호스트주소 : 포트번호 / 경로
▶ HTTP Version 정보


 ④ Status Line
▶ HTTP Version = 응답메세지에서 사용하는 HTTP Version
▶ 상태코드 = 요청 수락 및 수행 시도의 결과를 나타내는 3자리의 10진수 코드
▶ 상태설명 = 사용자를 위한 상태 코드의 설명


 ⑤ 상태코드

▶ 1xx = 정보
▶ 2xx = 성공
▶ 3xx = 재전송 요구
▶ 4xx = 클라이언트 에러
▶ 5xx = 서버 에러


'Try Attack > Web Hacking[basic]' 카테고리의 다른 글

불충분한 세션관리  (0) 2019.09.20
command injection  (0) 2019.09.20
File Upload  (0) 2018.08.12
File Inclusion  (0) 2018.08.12
프로토콜 분석  (0) 2018.08.12

댓글