NCS보안3기/웹 해킹2017. 6. 7. 19:56

대략적인 서버구축에 필요한 OS, 및 소프트웨어는 다음과 같다.


➢ Parallels 가상머신

➢ Ubuntu 16.04 LTS 버전의 리눅스

➢ Apache 웹 서버

➢ MySQL 데이터베이스 서버 & 클라이언트

➢ php


필자는 Mac을 사용하기 때문에 주로 사용하는 Virtual Machine인 Parallels를 이용한다. 윈도우를 이용하는 방문자는 VMware player 또는 Virtual Box를 이용하도록 한다.


우선 가상머신에 Ubuntu 16.04 LTS 버전의 리눅스를 설치하기 위해 OS를 다운받는다.( LINK )

* 리눅스는 오픈소스 기반 운영체제로 무료로 다운받아 설치할 수 있다.


ios 파일을 다운로드 받은 후 가상머신을 실행하여 Ubuntu를 설치한다.










VMware Fusion에서 설치할 경우의 모습이며 대부분 이와 비슷하게 구성되어 있다.

[Install from disc or image]를 클릭해 다운받은 iso 파일을 선택하여 설치하면 된다.








Parallels에서 설치할 경우의 모습이며, Parallels를 사용할 경우 iso를 다운받을 필요 없이 가상머신에서 바로 다운로드하여 설치할 수 있다.

iso 파일이 있을 경우

[DVD 또는 이미지 파일의 Windows나 다른 OS 설치]를 클릭해 설치하고, iso 파일이 없을 경우 아래 [무료리스템]-[Ubuntu]를 클릭해 설치한다.






설치를 완료하면, Ubuntu를 구동시킨 다음 왼쪽 상단에 우분투 로고를 클릭하여 "terminal"을 실행시킨다.


계정을 방금 만들었기 때문에 root 계정에 대한 비밀번호가 설정되지 않았다. 다음 명령어를 이용해 root의 비밀번호를 설정한다.

sudo passwd root


계정의 비밀번호를 입력하면 root 계정의 비밀번호를 설정할 수 있다.


root 비밀번호 설정이 완료가 되면 다음 명령어를 이용해 apt-get을 업데이트 및 업그레이드 한다.

sudo apt-get update

sudo apt-get upgrade


업데이트 및 업그레이드가 완료되면 apache 웹서버를 다운받기 위해 다음 명령어를 실행한다.

sudo apt-get install apache2


MySQL 서버와 클라이언트를 다운받기 위해 다음 명령을 실행한다.

sudo apt-get install mysql-server mysql-client


php를 설치하기 위해 다음 명령을 실행한다.

sudo apt-get install phpmyadmin


혹시 중간에 dpkg 에러가 발생하게 되면 LINK 를 보고 해결하기 바란다.


설치를 마친 후 브라우저를 이용해 127.0.0.1 ( localhost )에 접속하면 다음과 같은 화면을 볼 수 있다.



위 화면이 확인되면 apache와 php가 제대로 설치된 것이다.


이로써 서버 구축을 위한 기본적인 준비를 마쳤다.

다음엔 데이터베이스를 설정하고 실제 php를 이용해 웹 페이지를 작성한다.


Posted by Imp3rio
NCS보안3기/웹 해킹2017. 6. 7. 19:09

- 웹 어플리케이션이란 ?


웹 기반 소프트웨어로써 ( 기능적으로 ) 사용자 입력을 기반으로 동작하고, 종종 이면의 시스템과 상호작용하는 일체의 웹 기반 소프트웨어라고 한다. 즉, 사용자가 웹 사이트와 상호작용하여 로그인하든가 쇼핑이나 전자 금융거래를 한다면 그것이 바로 웹 어플리케이션이다.


- 웹 서버에 대해 알아야 할 것


웹 서버는 서버의 운영체제 위에서 돌아가는 한 뭉치의 소프트웨어일 뿐이며 웹 어플리케이션이 접근하는 것을 허용한다. 가장 대표적인 웹 서버는 윈도우 서버에서의 인터넷 정보 서비스( IIS )와 리눅스 서버에서의 아파치( HTTP )가 있다. 이러한 서버들은 일반적인 컴퓨터와 같은 디렉터리 구조를 갖고 있는데, 바로 그 곳에 웹 어플리케이션이 자리잡는다.


윈도우에서 IIS 웹 서버를 설치하면 C:/Inetpub/wwwroot 디렉터리에 설치되며, wwwroot 다음 응용 프로그램이 각각의 디렉터리를 가지며 그 속에 모든 중요한 웹 어플리케이션의 자원이 포함된다.


리눅스는 대개의 웹 어플리케이션이 /var/www/ 디렉터리에 위치한다. 리눅스 웹 서버에서는 다음과 같이 특별히 웹 해킹과 관련된 몇 개의 디렉터리가 있다.


/ect/shadow : 이 파일에 시스템의 모든 사용자 비밀번호 해쉬 값이 저장된다.

/usr/lib : 이 디렉터리에는 일반 사용자나 쉘 스크립트로 실행되지 않는 오브젝트 파일내부 바이너리

                  를 포함한다. 또한 응용 프로그램에서 사용하는 모든 의존성 데이터 역시 이 디렉터리에 있다.

/var/* : 이 디렉터리에는 데이터베이스에 관련된 파일, 시스템 로그, 웹 어플리케이션 자체의 소스코드

                가 있다.

/bin : 이 디렉터리는 쉘, ls, grep 과 같은 프로그램은 물론이고 시스템이 동작하는 데 필요한 기본적이

             고 중요한 실행 파일을 갖고 있다.


- HTTP에 대해 알아야 할 것


HTTP는 웹 어플리케이션과 상호 동작하고 통신하는 것으로 합의된 프로세스다. HTTP 프로토콜은 상태를 관리하지 않는 프로토콜이므로 이전의 요청 상황을 알지 못한다. 따라서 모든 클라이언트의 요청과 웹 어플리케이션의 응답은 완전히 새롭고 독립적인 사건일 뿐이다.


❍ HTTP 사이클

브라우저는 사용자가 입력한 값을 매개변수에 담아 요청으로 보내면 웹 서버는 제출된 요청이 지시하는 응답을 회신한다. 웹 어플리케이션은 매개변수 값에 근거하여 동작하기 때문에 해커가 웹 어플리케이션과 웹 서버를 공격할 때 악의적인 값을 입력하여 공격하는 가장 중요한 목표물이 된다.


❍ HTTP 헤더

❑ 웹 서버가 설정해서 클라이언트 브라우저에 보내주는 주요 헤더 정보

Set-Cookie : 이 값은 사용자의 세션이 유지되도록 보장하기 위하여 가장 흔하게 클라이언트에 제

                        공하는 세션 식별자( 쿠키 )다.

Content-Length : 이 값은 응답문의 바이트 단위 길이다.

Location : 이 값은 응용프로그램이 사용자를 다른 페이지로 보낼 때 사용된다.


❑ 클라이언트 브라우저가 웹 서버에 보내는 주요 헤더 정보

Cookie : 하나( 또는 여러 개 )의 쿠키는 사용자의 세션을 유지하기 위해 헤더에 담겨 서버로 되돌

                  려 보내진다. 이 쿠키의 헤더 값은 서버가 set-cookie로 발행한 헤더 값과 언제나 일치해

                  야한다. 이 값은 응용프로그램의 유효한 세션 값을 제공하므로 다른 응용프로그램 사용자

                  를 공격할 때 사용할 수 있다.

Referrer : 이 헤더 값은 다른 웹 페이지를 요청할 때 이전에 열었던 페이지를 목록으로 만든다. 이 

                    헤더 값은 곧 "마지막으로 방문한 페이지"를 뜻하며, 이 값은 쉽게 바꿀 수 있다.


HTTP 상태 코드

100번대 : 웹 서버가 순수하게 정보를 알려주기 위한 것으로, 보통 웹 서버가 보충 응답을 보낼 것임을 

                    나타낸다.

200번대 : 클라이언트의 요청이 성공적으로 접수되고 웹 서버가 처리한 다음 그 응답이 브라우저로 되

                    돌려 보내졌음을 뜻한다.

300번대 : 다른 페이지로 돌리는 경우 표시한다. 사용자가 웹 어플리케이션에 성공적으로 인증한 후에 

                    브라우저를 안전한 페이지로 전달할 때 가장 많이 사용된다.

400번대 : 클라이언트로부터 온 요청에 오류가 있음을 나타낸다. 즉, 사용자가 보낸 요청을 웹 어플리케

                    이션이 처리할 수 없음을 뜻한다.

500번대 : 서버 측의 오류를 표시한다.

Posted by Imp3rio

- DOS Stub Code


DOS Stub Code는 필수 구성 요소가 아니기 때문에 DOS Stub Code가 없더라도 프로그램이 실행되는 데는 아무런 지장이 없다. 

DOs Stub Code는 도스 모드에서 실행시켰을 때 실행되는 코드이며, 보통 "This Program must be run under Microsoft Windows"라는 메시지를 출력하고 종료되는 코드가 삽입된다. 또는 오브젝트 파일을 링킹할 때 STUB 옵션을 이용하여 원하는 스텁 코드를 삽입할 수 있다는 점 정도만 알아두면 된다.


- PE 만들기 1

PE 파일 제작의 첫번째 단계는 DOS Header를 만들기다.

Hex 에디터를 열고 64바이트의 새 파일을 생성한다. ( 필자는 HxD를 이용한다 )













[편집]-[바이트 삽입] 메뉴를 선택하고 64바이트를 생성한다.




[그림 1] 64 바이트 크기의 새로운 파일 생성


[그림 2]와 같이 처음 2 바이트 부분의 값을 "4D 5A"로 수정한다. 이는 DOS Header의 시그니처인 MZ를 의미한다.


[그림 2] DOS 시그니처 입력


[그림 3]과 같이 마지막 4바이트의 값을 0x40으로 설정한다. DOS Stub Code는 생략이 가능하기 때문에 생략하도록 한다. 즉, DOS Header 다음에 바로 PE Header가 온다. 그리고 기본적으로 리틀엔디안 방식이므로 40 00 00 00으로 입력해야 한다.

[그림 3] PE Header의 시작 지점을 지정


이 파일은 계속 사용해야 하기 때문에 CreatePE라는 이름으로 저장한다.



참고

http://zesrever.tistory.com

'NCS보안3기 > 리버스 엔지니어링' 카테고리의 다른 글

[Reverse Engineering] PE 구조  (0) 2017.05.22
Posted by Imp3rio