三、HTTP协议如何登陆网站: 解析HTTP登陆报文
前面两讲介绍了通过telnet进行HTTP连接,并且成功提交了表单。
本文给出一个实用的例子:如何通过已经建立的连接登陆网站
-
您需要知道如下要点:
- 捕获网络接口(网卡)收发的数据包
- 如何用telnet建立HTTP连接
- 建立连接后如何提交表单
本文将会以digu.com为例,实现一次简单的登陆。
原理:对于非加密的HTTP连接,我们只需要截获鼠标点击Login之后的HTTP报文,并且分析含有set-cookie命令符的服务器响应(Response)报文。并且记录下SID(Session ID)和对应的用户识别码UID(本文中该识别码并不显式呈现)。
捕获登陆报文
根据之前介绍过的数据包捕获方法截取数据包:
sudo dumpcap -i wlan0
注意:当且仅当准备好点击Login之后才执行该命令!
登陆成功之后立即在终端中按Ctrl + C终止数据包捕获。(这是为了减少要处理的数据包)
查看并过滤出关键包
启动Wireshark,打开捕获文件。
在Filter中输入http.set_cookie
并敲击回车。
选择第一个数据包(含有HTTP/1.1 302 Found
头部),单击鼠标右键,选择Follow TCP Stream:
接下来,我们就可以看到登陆的完整报文了:
提取头部中的关键命令符
如果你正在仔细看那些HTTP报文,你可能会很头大。其实我们只需要提取有用的命令符即可。这是一个耐心细心的工作,感兴趣的话读者可以自己尝试。
现将提取的最终结果发布如下:
POST /login HTTP/1.1 Host: digu.com User-Agent: Mozilla/5.0 Connection: Keep-alive // 本次请求之后还有别的请求 Referer: http://digu.com/login Cookie: sid=nullabc6ybDIrjpl_60hG684s; // 第一次加载网页时加载的,指出SID不可用(未登陆) Content-Type: application/x-www-form-urlencoded // 提交的是form表单 Content-Length: 103 // 指出提交部分的长度 backActionId=%252Fhome&action=1&title=&url=&backURL=&userName=****&password=****&remember=1 (省略Server返回的报文) (Server等待下一个请求,粘贴上去即可) GET /home HTTP/1.1 Host: digu.com Connection: Close Referer: http://digu.com/login User-Agent: Mozilla/5.0 Cookie: sid=(Keep your sid secret!); remember=1; mid=(your username)
注意:之所以要进行第二次GET
,这是因为第二次GET
之后就可以得到前面讲到的用户标识符UID,只不过这里是叫做了CookieId。
进阶:登陆之后的第一条微博
既然已经登陆了,那么就没有理由不能发微博。
还是通过前面讲述的方法,我们提取了发布微博的关键HTTP头部,再进行提炼之后,我们得到下面的报文:
POST /jump?aid=addLekuData HTTP/1.1 Host: digu.com Connection: Close Referer: http://digu.com/home Content-Length: 87 X-Requested-With: XMLHttpRequest Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 Cookie: sid=(Keep your sid secret!) type=1&text=(some+message+here.)&tw_userId=undefined&tId=0&cookieId=(NEADED)&id=0
欢迎留下宝贵建议,文中如有错误,欢迎批评指正!!
版权声明
本文出自 Lesca 技术宅,转载时请注明出处及相应链接。
本文永久链接: https://www.lesca.cn/archives/analize-http-header-about-login.html
lulu
2011-05-17 at 22:50
解释的很清楚,有帮助!