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