1. Web 服务应用工作机制
- 监听80或者是443端口
- 80为普通的http协议,443为https。
- 等待客户端请求
- GET、POST、HEAD… …
- 处理请求
- 保存文件
- 执行CGI脚本
2. 创建一个简单的Web服务
- 使用SimpleHTTPServer类
- 实现do_GET()方法
- 可以当做刺透客户端的服务端渗透代码
- 可以做渗透测试的客户端代码
从终端进入python编辑模式,输入以下代码:
>>>
>>> import SocketServer
>>> import SimpleHTTPServer
>>>
>>>
>>> httpServer = SocketServer.TCPServer(("",8888),SimpleHTTPServer.SimpleHTTPRequestHandler)
>>>
>>>
>>> httpServer.serve_forever()
需要导入SocketServer和SimpleHTTPServer模块,创建TCPServer的一个实例,("",8888)
表示绑定本机IP和8888端口。server_forever()表示持续监听。
打开浏览器,输入本机IP地址和端口号,查看结果:
浏览器列出了当前目录下的文件,再来空一下服务端的处理情况。
左侧的ip和我浏览器IP不一致是因为我是用了代理,这里不多做解释。至于出现了404代码,我们来看一下浏览器地址左侧的小标志,点击查看,原因是身份未验证。
如果只是利用web服务列出文件列表,这就可以了。如果你想更进一步,提供不同的输出服务,例如你想不同的用户访问输出不同的结果。作为一个安全测试人员,你想查看由服务器发送的不同的参数,那么请看一下代码:
#!/usr/bin/env python
# _*_ coding=utf-8 _*_
import SocketServer
import SimpleHTTPServer
#创建HTTPserver处理类,继承SimpleHTTPServer
class HttpRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
if self.path == ‘/root‘:
self.wfile.write(‘This page is only for root‘)
self.wfile.write(self.headers)
else:
SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
httpServer = SocketServer.TCPServer(("",8888),HttpRequestHandler)
httpServer.serve_forever()
自己写一个HTTP的处理类,并继承SimpleHTTPServer,重写do_GET()方法。运行此脚本,用浏览器访问。
如果只输入和上面一样的地址(10.128.175.36:8888
)进行访问,得到的结果依然和之前一样,但是我们10.128.175.36:8888/root
访问root目录,再来看一下结果:
从结果上看,已经无法访问,而且后面已经dump出了http头部的详细信息。包括主机的IP和端口,user-agent,Accept等信息。
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36
这个user-agent描述的是本机google浏览器的相关信息。对做网页爬虫,伪造http头是很有用的。