burp suite는 웹 응용 프로그램 테스트에 사용할 수 있는 최고의 도구 중 하나입니다. request를 가로채서 수정하고, 웹어플리케이션 취약점을 수행하고, 로그인 창에 brute force 공격을 할 수 있는 것과 같이 다양한 업무를 수행하도록 도와줍니다. burp suite의 주요기능을 논의함으로써 전체기능을 사용할 수 있을 것입니다.
기본적으로 backtrack 5에서 burp suite 무료 버전을 이용하실 수 있습니다. 무료 버전에서 사용할 수 없는 기능 중 일부는 스캐너, 작업 스케줄러, 대상 분석기, 등등입니다. 전반적으로 다음과 같은 기능이 있습니다.
1) proxy - burp suite는 proxy와 함께 사용되는데, default로 8080 포트에서 실행됩니다. 이 proxy를 사용하여 클라이언트 시스템에서 웹 응용 프로그램으로 흐르는 트래픽을 가로채서 수정합니다. 이 proxy를 사용하려면 우리는 이 proxy를사용 하도록 브라우저를 구성 해야 합니다. 우리는 패킷을 의도한 대상에 도달 하지 않게 하거나 특정 호스트에redirect 하거나, 패킷을 삭제할 수도 있습니다.
2) spider - spider 기능은 새 링크, 콘텐츠 등을 찾는 데 사용 됩니다. 로그인 폼을 찾으면 자동으로 전송하고, response를 통해 새로운 contents를 찾습니다. 이 정보는 scanner 로 보내져서, 찾아낸 모든 link와 content에 대해 scan을 하게됩니다.
3) scanner - 웹 응용 프로그램을 scan하여 취약점을 찾는데 사용 됩니다. 검사의 종류는 passive, active, user-directed가 있습니다. 몇 가지 false positives가 테스트 하는 동안 발생할 수 있습니다. 자동화된 스캐너에는 100% 정확한 결과가 없음을 기억하는 게 중요합니다. 불행하게도 무료 버전으로는 scanner 기능이 제공되지 않습니다.
4) intruder - 이 기능은 브루트 포스 공격을 수행하거나 웹 응용 프로그램을 fuzzing하거나, 취약점을 exploite하는 것과같은 다양한 목적을 위해 사용할 수 있습니다.
5) repeater - 이 기능은 같은 요청을 많은 횟수로 수정해서 보내서, 응답을 분석할 때 사용 됩니다.
6) sequencer - 이 기능은 주로 웹 응용 프로그램에서 제공 하는 세션 토큰의 임의성을 확인 할 때 사용 됩니다. 이것을알아내기 위해 다양한 고급 테스트를 수행 합니다.
7) decoder - 이 기능을 사용하여 암호화된 데이터를 다시 원래 형태로 해독하거나, 데이터를 암호화 하기 위하여 사용할 수 있습니다.
8) comparer - 이 기능은 두 개의 요청, 응답 또는 다른 형태의 데이터 비교를 수행하는 데 사용됩니다. 이 기능은 다른입력에 대한 응답을 비교 하는 경우에 유용할 수 있습니다.
1) Proxy
proxy 기능은 request를 가로채고 수정할 수 있습니다. request를 가로채고 조작하기 위하여, 우리는 웹 브라우저에서트래픽이 proxy를 향하도록 구성해야 하며, 그것은 default로 127.0.0.1:8080 입니다.
브라우저에서 설정이 끝나면, burp suite 를 열고 [proxy]에서 [intercept is on]으로 되어있는지 확인합니다.
[alerts] 탭으로 가면 8080포트로 proxy가 돌고 있는지 확인할 수 있습니다. 우리는 또한 [proxy] 아래 [옵션] 탭으로 이동하여 이 구성을 변경할 수 있습니다.
proxy를 실행하는 동안 모든 옵션에 대하여 보겠습니다. [proxy] 아래 [옵션] 탭으로 이동합니다.
여기에서 우리는 수신하는 proxy 포트를 수정할 수 있으며, 심지어 새 proxy listner를 추가할 수 있습니다. Burp는 SSL보호 웹 사이트에 인증서를 제공할 수 있는 옵션도 있습니다. 기본적으로 Brup를 설치할 때 자체 서명 된 CA 인증서를만듭니다. 현재 선택 된 옵션 즉, CA-signed per-host certificates는 우리가 연결하려는 특정 host에 대해 Brup의 CA인증서로 서명 된 인증서를 생성 합니다. 우리가 우려할 유일한 일은 ssl로 보호된 웹사이트에 연결할 때 경고 수를 줄이는것입니다.
우리가 [listen in loopback interface only] 옵션에 체크하지 않는다면, 네트워크 상의 다른 시스템을 위해 proxy로서 사용될 수 있습니다. 즉 동일한 네트워크의 모든 컴퓨터는 burp proxy를 proxy로 사용할 수 있으며, 그것의 트래픽을 릴레이 합니다.
[support invisible proxying for non-proxy-aware clients] 옵션은 프락시를 사용하는지 모르는 client에 사용됩니다. proxy에 대한 옵션이 브라우저에 설정되어있지 않고, 다른 곳 예를 들어 hosts.txt 파일에 있는 경우를 말합니다. 이 경우단 한가지 이슈사항은 request가 브라우저에 설정한 경우의 request와 약간 다르다는 점이다. 따라서 non-proxy-aware client로부터 트래픽을 받는다면 이것을 burp 가 알 필요가 있습니다. [redirect to host], [redirect to port]는 옵션에 적은 대로 host와 port를 redirect 할 것 입니다.
마찬가지로 우리는 여기에 지정하는 규칙에 따라 request와 response를 가로챌 수 있습니다. 트래픽이 많을 경우 우리가 원하는 일부 request 만 가로채도록 설정할 수 있습니다.
response에서 받은 HTML을 수정 하기 위한 옵션이 있습니다. 우리 숨겨진 폼 필드를 표시(unhide hidden from fields)하거나, 자바 스크립트 제거(remove all javaScript) 할 수 있습니다. 마찬가지로 특정 패턴 찾기 및 사용자 지정 문자열로 대체할 수 있는 옵션이 있습니다. 우리는 여기에 정규 표현식을 지정해야 합니다. burp는 패턴을 찾아서 지정 문자열로 대체하기 위해, request 나 response를 구분 분석할 것입니다.
이제 우리가 burp suite와 브라우저 안의 환경을 제대로 설정했다면, request를 가로챌 수 있습니다. 우리가 request를보낼 때 마다 burp suite에 의해 가로채어지므로, 우리는 일일이 수작업으로 forward 시켜야 합니다. 따라서 패킷의 내용을 정말 보고자 할 때만 [intercept is on] 옵션을 유지 하는 것이 좋습니다.
브라우저를 열고 검색을 시작 합니다. 우리는 request 가 burp suite에 의해 가로채어지고 있음을 볼 수 있습니다. 따라서 우리의 proxy는 작동하고 있습니다. 우리는 그것에 마우스 우측 클릭해서 분석을 위해 burp의 다른 다양한 도구를 요청할 수 있습니다.
2) Spider
Burp spider 는 웹 응용 프로그램의 지도를 만들어 주기 위해 사용됩니다. 전체 응용프로그램에 대한 상세한 분석을 하기 위해 링크를 찾고 웹 응용 프로그램을 자동으로 크롤링해서 발견하고, 모든 로그인 폼을 submit 할 것이다. 이렇게 찾은 링크들은 세부 검색을 위한 Scanner 로 보내지게 된다. 이 경우 취약한 웹 어플리케이션 상에서 spider 도구를 사용하게 될 것입니다. 간단히 하기 위해서는 브라우저에서 취약한 웹 어플리케이션으로 이동 > Burp suite의 [intercept is on]으로 되어있는지 확인 > burp suite에 의해 request 를 intercept > 마우스 우측 버튼 클릭 > [ send to spider] 클릭.
이렇게 하면 경고 창이 팝업 되면서 scope(범위)에 항목을 추가 하도록 요청합니다. [Yes] 클릭 합니다. scope(범위)는 기본적으로 테스트를 실행 하고자 하는 대상 영역을 정의 합니다.
[target] >[site map] 으로 가면 target에 url이 추가되어 있는 것을 볼 수 있습니다. 아울러 http://google.com 같은 다른대상이 대상 목록에 추가 된 것을 볼 수 있습니다. burp suite Burp의 proxy를 사용 하는 동안, 우리가 탐색하는 웹을target으로 자동 추가 합니다. 어떤 target이든 오른쪽 버튼을 클릭 하고 [add item to scope] 에 항목을 추가 클릭 하여[scope]에 target을 추가할 수 있습니다.
[scope] 탭으로 취약 웹 어플리케이션이 scope에 추가되었음을 확인할 수 있습니다.
이제 [spider] 탭에 가서 [option] 을 클릭 합니다. 여기서 우리는 Burp spider 가 응용 프로그램에서 실행 하는 동안 다양한 옵션을 설정할 수 있습니다. 우리는 그것은 웹 사이트 관리자가 검색 엔진에 인덱싱 되지 않도록 설정한 경우에robots.txt 파일에 대한 확인을 요청할 수 있습니다. 또 다른 중요 한 옵션은 [passively spider as you browse] 입니다. 기본적으로 Burp spider는 passive와 active 모드에서 모두 실행될 수 있습니다. 우리가 Burp의 proxy를 사용하여 웹 어플리케이션 확인하는 동안, 새로운 링크와 콘텐츠를 scanning하는 것을 유지할 것인지 묻습니다.
또 다른 중요 한 옵션은 [application login] 입니다. Burp spider 가 로그인 폼을 만날 때마다 자동적으로 자격증명을 제출할 수 있습니다. 이 취약한 웹 어플리케이션에서 사용되는 자격 증명으로서 [admin/password]를 제출하도록 할 수 있습니다. 그리하여 Burp suit 는 자동으로 이 자격증명을 제출하고 추가 정보를 찾기 위해 crawling을 계속 할 것입니다. 또한 원하는 경우 쓰레드 수를 변경할 수 있습니다.
응용 프로그램 spidering을 시작 하려면, 웹 어플리케이션에 대한 branch(분기)를 표시 하고 마우스 오른쪽 버튼 클릭하여, [spider this branch] 를 클릭
이렇게 하면 Burp spider가 시작 됩니다. 우리는 [spider] > [control] 탭에 가면, 만들어지고 있는 request를 볼 수 있습니다. 또한 Burp spider에 대한 custom scope를 정의할 수 있습니다.
일단 실행이 완료 되면, 우리는 웹 어플리케이션의 branch에 대해 새로 발견된 URL이 많이 표시 됩니다. 이 URL들은 우리에게 웹 응용 프로그램에 대한 매우 유용한 정보를 제공합니다. 우리는 이 URL들을 다음 Burp scanner와 같은 다른Burp 도구들에게 보내어 취약점에 대해 scan 할 수 있습니다.
3) Intruder
Burp Intruder 는 fuzzing, brute force attack 과 같은 취약점에 이용할 수 있습니다. 이번 경우에는 brute force attack 기능을 사용할 것입니다. Burp Suite에서 [ intercept is on] 으로 되어있는지 확인하고 웹에서 로그인 합니다.
request는 burp suite에 의해 가로채어 질 것입니다. 오른쪽 클릭 및 [send to intruder] 클릭.
[intruder] 로 request 정보를 보낼 것입니다. [intruder] 탭으로 이동 합니다. 이제 우리는 Burp suite에서 brute force attack을 설정해야 합니다. [target] 탭에서 이미 request를 보고 목표를 설정 했음을 볼 수 있습니다.
이제 [positions] 탭으로 이동하면 우리가 이미 intruder로 보낸 request를 볼 수 있습니다. 일부는 강조 표시가 되어있습니다. 이것은 기본적으로 brute suite attack 에서 변경되어질 부분을 추정한 것입니다. 이번 경우는 단지 사용자 이름및 암호가 변경 될 것입니다. 우리는 Burp을 적절하게 구성해야 합니다.
오른쪽에 clear 버튼을 클릭 합니다. 강조 표시 된 텍스트가 모두 제거 됩니다. 이제 공격에 대한 매개변수로 사용자 이름및 암호만을 설정해야 합니다. 이 request에서 username(이 경우 "infosecinstitute")을 강조 표시 하고 [add ]를 클릭 합니다. 마찬가지로 password를 강조 표시하고 [add] 를 클릭 합니다. username 과 password를 첫 번째 및 두 번째 매개변수로 추가 됩니다. 완료 되면 다음과 같이 보일 것입니다.
우리가 해야 다음 일은 request 윗부분에 있는 공격에 대한 유형[attack type]을 설정해야 합니다. default로는 [sniper]로설정되어 있습니다. 하지만 이 경우에는 [cluster bomb]를 사용해야 합니다.
아래는 Portswigger.net 에서의 Burp의 설명서 에 따라 공격의 종류의 차이에 대한 설명입니다.
Sniper - 단일 페이로드 집합을 사용 합니다. 그것은 차례로 각 위치를 target으로 하고 그 자리에 차례로 각 페이로드를 삽입합니다. 주어진 request를 처리하는 동안 target이 아닌 위치는 영향을 받지 않습니다. 이 공격 형식은 XSS처럼공통적이고 개별적인 다수의 필드를 테스트 하는 데 유용 합니다. 총 공격에서 생성되는 request 수는 총 위치 수와 페이로드 집합 수의 곱과 같습니다.
(위에서처럼 username과 password 의 두 필드를 변수로 지정하고 공격유형을 sniper로 하고 intruder를 시작 하면… username에 페이로드가 순서대로 적용되고, 그 동안 password는 페이로드가 적용되지 않습니다. username에 페이로드가 끝까지 적용되면 그 다음 username에는 원래 값이 들어가고 password에 페이로드가 순서대로 적용됩니다.)
battering ram - 단일 페이로드 집합을 사용합니다. 변수 위치에 동일한 페이로드를 한 번에 삽입합니다. 이 공격 유형은 공격 HTTP 요청(즉, 사용자 쿠키 헤더 및 메시지 본문) 내의 여러 위치에 같은 입력을 삽입할 경우에 유용 합니다. 총공격에 생성 하는 request 수는 페이로드 집합의 수 입니다. (즉 username과 password 에 같은 페이로드 값이 들어갑니다.)
pitchfork - 여러 페이로드 집합이 사용 됩니다. 각각의 정의된 위치에 다른 페이로드 집합(최대 8까지)이 사용됩니다. 한 페이로드가 각각의 정의 된 위치에 삽입되는데, 모든 페이로드 집합이 동시에 반복 합니다. 예를 들어, 첫 번째request는 위치 1에 페이로드 집합1의 첫 번째 페이로드를 삽입하고, 위치 2에 페이로드집합 2의 첫 번째 페이로드를 설정 합니다. 두 번째 request에서는 페이로드 집합 1의 두 번째 페이로드를 위치 1에에 삽입 하고, 두 번째 페이로드 집합2의 두 번째 페이로드를 위치 2 에 설정 합니다. 이 공격 유형은 다르지만 관련된 입력을 다수의 위치에 삽입해야 할 경우(즉, 사용자이름과 사용자 번호 등)에 유용합니다. 총 공격에 의해 생성되는 request수는 페이로드집합 중 가장 작은 페이로드 집합의 수와 같습니다.
cluster bomb - 이것은 여러 개의 페이로드 집합을 사용합니다. 각 위치에 다른 페이로드 집합을 설정합니다. (최대 8까지) 공격은 각 페이로드 집합을 순서대로 반복합니다. 그래서 모든 페이로드의 조합을 테스트합니다. 예를 들어, 두 개의 위치가 있는 경우, 페이로드 집합 1에서 첫 번째 페이로드가 위치 1에 적용되고, 페이로드집합 2의 모든 페이로드가위치 2에서 반복 적용된 다음, 페이로드집합 1의 두 번째 페이로드가 위치 1에 설정되고, 페이로드집합 2의 모든 페이로드가 위치 2에서 반복됩니다. 이 공격 유형은 서로 다르고 관련이 없는 변수가 다수 위치에 있는 경우 (예를 들어, 사용자 이름과 패스워드)에 유용합니다. 공격에 의해 생성 된 요청의 총 수는 모든 페이로드집합 안의 페이로드 수의 곱이므로 매우 클 수 있습니다. (예 : 페이로드1에 10개, 페이로드 2에 5개, 페이로드 3에 10개라면 10*5*10 = 500개가 됩니다.)
우리는 아래그림처럼, 공격 유형을 "cluster bomb"으로 설정합니다.
[payload] 탭으로 가서, payload set 1이 선택 되어 있는지 확인하고, [load] 를 클릭해서 사용자 이름 목록이 들어 있는파일을 선택합니다. 사용자 이름 목록이 있는 파일을 로드 하면 모든 사용자이름이 아래 그림처럼 보여집니다.
마찬가지로 페이로드 집합 2 를 선택 > [load] 를 클릭 > 암호목록이 들어 있는 파일을 선택합니다.
[options] 탭으로 가서 [results] 아래에 "store requests" 및 "store responses" 옵션이 설정 되어 있는지 확인 합니다. 모든 옵션에 대해 필요한지 필요 없는지 확인하십시오
공격을 하기 위한 설정이 다 되었습니다. 왼쪽 상단에 [intruder] 를 클릭하고 [start attack] 을 클릭합니다. 새 창이 팝업 되고 결과가 만들어지는 것을 확인할 수 있습니다.
그럼 우리는 request가 성공한 것을 어떻게 알 수 있을까요? 일반적으로 성공한 request는 실패한 request와 다른 다른response 또는 다른 상태의 response 를 가질 것입니다. 이 경우 우리는 사용자 이름 "admin"과 암호 "password" 인 경우는 다른 reponse 보다 길이가 다른 길이를 가지게 됨을 볼 수 있습니다.
다른 response 길이를 가진 request를 클릭합니다. response 섹션을 클릭하면 response 에서 "Welcome to the password protected area admin" 이란 문구를 보게 됩니다. 이것으로 사용자 이름/암호가 맞다는 것을 확인할 수 있습니다.
4) Repeater
Burp Repeater를 사용하면, 수동으로 request를 수정하고 response 를 분석하기 위해 재전송할 수 있습니다. 우리는 이것을 위해 request를 Burp Repeater로 보냅니다. Intruder, Proxy등 다양한 곳에서 request를 보낼 수 있습니다.
우리는 방금 수행한 intruder attack 에서 request를 Repeater로 보냅니다. request 를 repeater로 보내기 위해 단지request를 우 클릭해서 [send to repeater] 를 선택하면 됩니다.
우리가 Repeater 탭으로 이동하면 보낸 request를 볼 수 있습니다. 우리는 그곳에서 1, 2, 3 으로 되어있는 세 개의 탭을볼 수 있습니다. 각 request에 한 개씩 탭이 사용됩니다.
request를 [raw], [params],[headers],[hex] 형식으로 볼 수 있습니다. 우리는 request를 보내기 전에 이러한 것들을 수정할 수 있습니다.
그냥 username, password 를 맞는 것으로 바꿉니다. 그리고 [go]를 눌러 이 request를 보냅니다.
우리는 response 섹션에서 response 을 분석할 수 있습니다. 그리고 response를 [raw], [params],[headers],[hex] 형식 으로 볼 수 있습니다 [render] 옵션은 완벽하지는 않지만 브라우저에서 보는 것처럼 보여줍니다.
5) Sequencer
burp suite Sequencer는 웹 응용 프로그램에 의해 생성된 세션 토큰의 임의성을 파악하는 데 사용 됩니다. 세션 토큰은일반적으로 사용자 인증을 사용되기 때문입니다. 따라서 훼손 되지 않아야 합니다. 웹 응용 프로그램이 세션 토큰에 대해 높은 임의성을 가지는 것이 중요하므로, burte force attack이 성공적이지 않다. 우리는 request를 보내어 돌아오는 세션 토큰을 sequencer로 보내야 합니다. 다음에 sequencer가 request를 반복적으로 보내어 많은 수의 세션 Id 얻습니다.그것은 임의성을 확인 하기 위해 다양한 통계적 테스트를 통해 전달 합니다.
세션 토큰을 반환 하는 request를 보내 봅니다. request를 우 클릭하여 [send to sequencer] 선택합니다.
sequencer 에서 자동으로 ID 매개 변수를 식별한 것을 볼 수 있습니다. 우리는 또한, 스스로 선택하기 위해 [manual selection]을 사용할 수 있습니다. 또는 우리는 우리가 생각하는 세션 토큰 값을 선택하기 위해 [cookie] 와 [form field] drop box 를 사용할 수 있습니다.
프로세스를 시작 하려면 [start capture]를 클릭 합니다.
우리는 만들어지고 있는 요청과 수신하고 있는 다른 토큰을 볼 수 있습니다. 분석을 시작하기 전에 적어도 100-200토큰 정도의 샘플 크기를 가지고 하는 것이 좋습니다. 하지만 더 많은 토큰이 더 나은 테스트 결과를 가져오게 됩니다. 일단 충분한 토큰을 캡처 했다면, [analyse now]를 클릭 하십시오. 우리는 Burp Sequencer 가 모든 시험을 수행하는 것을 보게 될 것입니다.
결과는 아래 그림과 같이 표시 됩니다. 보이는 것처럼, 샘플의 전반적인 임의성은 우수한 것으로 추정됩니다. 다양 한 유형의 분석의 결과를 보기 위하여 탭들간에 전환할 수 있습니다.
burp suite 는 계속 토큰을 수집할 수 있으므로, 토큰을 더 많이 수집한 후에 다시 테스트를 수행할 수 있습니다.
6) Comparer
burp suite Comparer 도구는 request, response 등과 같이 두 가지 데이터를 비교하는데 사용됩니다. 우리는 그렇게 하기 위해서는 데이터의 두 가지 Comparer 도구를 제공 해야 합니다. 이 경우에 우리가 이미 수행한 bruet force attack에서 성공한 response와 실패한 response 를 비교할 수 있는 tool이 주어질 것입니다. request가 아닌 response 를 보내기위해, comparer로 보내는 동안 [response] 탭이 선택되어있는지 확인합니다. 실패한 response 에 우 클릭하고 [send to comparer] 선택하고, 성공한 response에 동일한 작업을 수행합니다.
[Comparer] 탭으로 이동 합니다. 우리가 이미 보낸 두 개의 response를 볼 수 있습니다. 윗 부분(item 1) 첫 번째response (#3)와 아랫부분(item 2) 두 번째 응답 (#4) 를 클릭합니다. 이제 선택된 두 개의 response가 비교를 수행하기위해 선정되었습니다.
2개의 response를 비교하기 위해서 단어 또는 byte로 비교하는 두 가지 방법이 있습니다. [words]를 선택하면 단어로 비교합니다. 결과는 아주 분명합니다. 한 응답은 " Username and/or password incorrect " 메시지, 다른 하나는 " Welcome to the password protected area admin " 메시지가 있습니다.
마찬가지로, 바이트를 사용하여 비교하면 다음과 같은 출력을 돌려줍니다.
7) Decoder
burp suite decoder는 암호화된 데이터를 해독하고 정규형식으로 돌려주는데 사용할 수 있습니다. 그것은 역시 암호화하는데 사용할 수도 있습니다. 우리는 수동으로 decoder에 데이터를 붙여 넣을 수 있거나 또는 인코딩된 request를 보낼수도 있습니다. 이 경우 base64 인코딩 형식으로 암호화된 사용자 이름 및 암호를 포함하는 HTML 기본 인증 request 를decoder로 보낼 것입니다. request를 우 클릭하여 [send to decoder]를 선택 클릭합니다.
암호화된 부분을 선택하여 [decode as] 클릭하고 [base64] 선택
Burp Decoder 가 base64로 암호화된 문자열을 해독하여 사용자 이름/암호를 평문으로 제공합니다.
burp suite 에서 [smart decoder] 기능도 확인해야 합니다. 비록 그것이 완전히 신뢰할 수는 없고, 몇 가지 실수를 발생할수 있습니다.
8) Scanner
Burp 스캐너는 가장 강력한 웹 응용 프로그램 스캐너 중 하나이다. 하지만, 다른 웹 응용 프로그램 스캐너 처럼 완벽 하지 않습니다 그리고 false positive가 발생할 수 있습니다. Burp 스캐너는 무료 버전에서는 사용할 수 없습니다.
결론
우리는 proxy, scanner, sequencer, repeater 등 거의 모든 기능을 보았습니다. 웹 어플리케이션을 테스트할 때 도움이 될수 있는 범위는 웹 어플리케이션을 테스트하기 위한 유용한 도구로 만들기 위한 사용자의 상상력에 달려있습니다.
원문 : http://resources.infosecinstitute.com/burp-suite-walkthrough/
'Hacking > Basic' 카테고리의 다른 글
악성코드 탐지 기법 (0) | 2016.01.31 |
---|---|
TCP 제어 플래그 (0) | 2015.11.18 |
Footprinting scanning (0) | 2015.11.18 |
Footprinting (0) | 2015.11.18 |
APT 공격 (0) | 2015.11.18 |