카테고리 없음

웹브라우저 동작 분석 및 흉내내기 소개 (로그인 과정으로 살펴보는)

Lawmin 2011. 1. 26. 09:38
특정 작업 자동화시에 로그인과 같은 인증 과정이 반드시 필요할 때 사용할 수 있는 방법이다.

1. HttpWatch 같이 전송 내용을 살펴볼 수 있는 프로그램을 설치한다.
2. 원하는 사이트에 로그인 하기 전에 HttpWatch 의 Record 버튼을 누른다.
3. 로그인 하면, 전송 정보가 남게 된다.
4. Stop 누르고 어떤 페이지를 거쳐갔고, 어떤 정보를 주고 받았는지 확인한다.
(Stream 탭을 보면 Request, Response Header를 볼수 있다.)
5. 이 Header 정보를 이용하여 브라우저를 통한 정상 로그인 절차를 흉내낼 수 있다.

[Request]
POST [서버주소를 제외한 파일전체경로] HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: [이 페이지 접근 전 방문한 주소]
Accept-Language: ko
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; IPMS/85441C96-14D3E4C3C6C-000000367575; TCO_20110125143517; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Host: [서버 주소]
Content-Length: 260
Connection: Keep-Alive
Cache-Control: no-cache

key1=val1&key2=val2              (<- 이것은 POST data가 key/value pair로 &로 연결되어 있는 것임)

[Response]
HTTP/1.1 302 Found
Date: Wed, 26 Jan 2011 00:22:08 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Location: [서버주소를 제외한 파일전체경로]
Set-Cookie: ASP.NET_SessionId=12ru3gyrbsnzb155yratgbbt; path=/
Set-Cookie: YAPYAP=04765CE607F59878DDF3F105CC0FC8534AA353E57F20DE09716B219EA0F205E9411C0A26F75F487E1D964B08373E0C9F9EA9654A5A5C22DA4B6267F946A3F0FD3F31F179ECCA2DA3; path=/
Cache-Control: private
Content-Type: text/html; charset=euc-kr
Content-Length: 152

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href='[보안상 제거]'>here</a>.</h2>
</body></html>

6. Request 와 동일하게 Header를 설정하여 HttpRequest 를 보내고, 받은 Set-Cookie 정보를 저장해둔다. 띄어쓰기나 newline 은 반드시 지켜야 한다. 그렇지 않으면 계속해서 추가 입력을 대기하고 있거나, 잘못된 요청이라는 에러를 낼 것이다.
(이 과정에서 서버는 아마도 세션을 만들거나 내부적으로 인증절차를 완료할 것이다.)
7. 다음 요청시에 이 Cookie들을 Header에 붙여서 요청하게 되면, 서버는 정상적으로 브라우져를 이용해 통신하는 것으로 알 것이다.

[Request]
GET [서버주소를 제외한 파일전체경로] HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: [이 페이지 접근 전 방문한 주소]
Accept-Language: ko
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; IPMS/85441C96-14D3F5E1E6E-000000367575; TCO_20110126091830; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Host: [서버 주소]
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASP.NET_SessionId=12ru3gyrbsnzb155yratgbbt; YAPYAP=04765CE607F59878DDF3F105CC0FC8534AA353E57F20DE09716B219EA0F205E9411C0A26F75F487E1D964B08373E0C9F9EA9654A5A5C22DA4B6267F946A3F0FD3F31F179ECCA2DA3

[Response]
HTTP/1.1 200 OK
Date: Wed, 26 Jan 2011 00:22:10 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 139195

... 내용 쭉 이어서

원리: http가 지속적인 connection을 하지 않는 protocol이기 때문에 이러한 과정을 수행해야 한다....