菜鸟渗透日记39--python渗透测试编程之对web应用进行渗透测试1

这个模块将从三个方面来展开对web应用进行渗透测试的学习

1)什么是HTTP

2)Python对Web应用进行渗透测试的模块

3)使用Python对Web应用进行渗透测试的实例

目录

HTTP简介

对Web程序进行渗透测试所需模块

1.urllib2库的使用

2.其他模块文件


HTTP简介

HTTP是一个无状态的明文传输协议,这意味着每次请求都是独立的。它的执行情况和结果与前后的请求都是没有关系的,其实这个协议在设计之初就是考虑到便捷,而没有考虑到安全,目前大网站基本都采用HTTPS的方式来进行传输,后面会出一篇文章讲讲什么是HTTPS,我们地址栏输入一个地址如”www.csdn.com“,这就是HTTP完成的数据通信。浏览器会根据用户在地址栏中输入的内容向目标服务器发送请求,目标服务器在收到请求之后会给出回应,将数据发回给浏览器。

    抓个包看看吧

菜鸟渗透日记39--python渗透测试编程之对web应用进行渗透测试1这次通信中,数据包显示了一个”GET /HTTP/1.1“ 信息。这里面的GET是HTTP方法中的一个。HTTP的方法主要有如下几个。

1)GET 请求资源

2)HEAD:类似GET请求,但是只请求页面的首部。

3)POST:向指定资源提交数据进行处理请求。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。

4)PUT:创建或者更新资源。

5)DELETE:请求服务器删除指定界面

6)CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

7)OPTIONS:列出服务器支持的所有方法、内容类型和编码方式。

8)TRACE:回显服务器收到的请求。

通过抓包发现,整个HTTP中实际起作用的只有客户端(浏览器)和服务端(服务器)两个角色,其中主要通信方式,客户端向服务端放松Request信息。然后经过服务端处理后,收到来自服务端的Response信息。

这里的通信使用了HTTP Request与HTTP Reponse。其中,HTTP Request由请求方法URI协议/版本、请求头(Request Header)、请求正文(Request Body)三个部分组成。看一下抓包的图:

HTTP Request

菜鸟渗透日记39--python渗透测试编程之对web应用进行渗透测试1

HTTP Reponse

菜鸟渗透日记39--python渗透测试编程之对web应用进行渗透测试1

简单讲一下状态行,就是302那一行。302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。其他的状态码具体的信息建议查询一下http状态码大全

HTTP简介到此结束。

对Web程序进行渗透测试所需模块

在python中提供了大量的用来处理HTTP的模块,比如urllib、urllib2、urllib3、httplib、httplib2、request和BeatuifulSoup模块。这些模块有的功能重合,经常看到有些相同的功能程序却使用了不同的模块文件。这里先讲一下本部分要使用的模块文件。

1.urllib2库的使用

urllib2是Python2中自带的一个很有用的库,可以利用这个库轻松完成对网页的访问。需要注意的是,这个库在Python3中被分为urllib.request和urllib.error两个类。在urllib2中提供了很多函数。

首先导入包

import urllib2

然后使用urllib2.urlopen函数打开一个链接地址,并且将返回的内容保存在response中。

菜鸟渗透日记39--python渗透测试编程之对web应用进行渗透测试1

可以对urlopen()返回的类文件对象进行如下操作。

1) response.read():

执行的结果会返回该页面的所有HTML代码。

2)info():返回一个httplib.HTTPMessage对象,获取meta-informa信息,例如服务器发送的headers信息。

菜鸟渗透日记39--python渗透测试编程之对web应用进行渗透测试1

3)getcode():返回HTTP状态码。如果是HTTP请求,例如200表示请求成功,404表示网址未找到

4)geturl():获取真实打开的地址,通常可以识别网址是否设置跳转。这个时候urllib2得到的是真实的地址。

菜鸟渗透日记39--python渗透测试编程之对web应用进行渗透测试1

urllib2.urlopen函数除了使用url作为参数之外,也可以使用request对象。操作的步骤如下

菜鸟渗透日记39--python渗透测试编程之对web应用进行渗透测试1

urllib2中第二个经常使用的函数就是urllib2.Request(),这个函数的完整格式为urllib2.Request(url[,data][,headers][,originreqhost][,unverifiable]),比较常用的两个参数如下。

1)url:是一个字符串,其中包含一个有效的URL。

2)data:是一个字符串,指定额外的数据发送到服务器,如果没有data需要发送可以为“None”。

2.其他模块文件

除了urllib2之外,在web应用的渗透测试过程中还有其他很多种模块,Python2和Python3的模块都各有区别,其中python2常用的由urllib、httplib2、requests。线面给出了常见的模块介绍。

1)urllib模块:这个模块的功能较为基础,提供一些比较原始基础的方法而urllib2没有这些,例如urlencode提供url编码。

urllib.urlencode(values) # 其中values为所需要编码的数据,并且只能为字典

这个在模拟登陆时候特别好用,后面会介绍到。

2)httplib2模块:这个模块和urllib2有相似的地方。httplib2种提供对缓存的支持,例如下面的例子,就是用了.cacahe目录保存了对页面的访问缓存。

菜鸟渗透日记39--python渗透测试编程之对web应用进行渗透测试1

3)requests模块:使用Requests发送网络请求非常简单。

import requests

r = requests.get('http://4399.com')

现在我们获取了一个对象r。可以从这个对象中获取我们想要的信息。requests简便的API意味着所有请求类型都是显而易见的。利用这个库发送HTTP请求十分简单,下面举例使用requests模块发送POST的方式。

r = requests.post("htttp://4399.com/post")

PUT、DELETE、HEAD、OPTIONS的方式类似。

4)BeautifulSoup模块:BeauitfulSoup提供一些简单的、python式的函数,用来处理导航、搜索、修改分析树等功能。他是一个工具箱,通过解析文档为用户提供需要抓取的数据。

5)cookielib模块:Python中的cookielib库为存储和管理Cookie提供客户端支持。该模块的主要功能式提供可存储cookie的对象。使用此模块捕获Cookie并在后续连续请求时重新发送,还可以用来处理包含Cookie数据的文件。