- Python渗透测试教程
- Python渗透测试 - 首页
- 介绍
- 评估方法
- 网络通信入门
- 套接字及其方法
- Python网络扫描器
- 网络数据包嗅探
- ARP欺骗
- 无线网络渗透测试
- 应用层
- 客户端验证
- DoS & DDoS攻击
- SQL注入Web攻击
- XSS Web攻击
- 有用资源
- 快速指南
- 有用资源
- 讨论
应用层
Web应用程序和Web服务器对于我们的在线存在至关重要,针对它们的攻击占互联网上所有攻击尝试的70%以上。这些攻击试图将可信网站转换为恶意网站。由于这个原因,Web服务器和Web应用程序渗透测试发挥着重要的作用。
Web服务器的足迹收集
为什么我们需要考虑Web服务器的安全?这是因为随着电子商务行业的快速发展,攻击者的主要目标是Web服务器。对于Web服务器渗透测试,我们必须了解Web服务器、其托管软件和操作系统以及在其上运行的应用程序。收集关于Web服务器的此类信息称为Web服务器的足迹收集。
在接下来的章节中,我们将讨论Web服务器足迹收集的不同方法。
Web服务器足迹收集的方法
Web服务器是专门用于处理请求和提供响应的服务器软件或硬件。在进行Web服务器渗透测试时,这是渗透测试人员需要关注的关键领域。
现在让我们讨论一些在Python中实现的方法,这些方法可以用于执行Web服务器的足迹收集 -
测试HTTP方法的可用性
渗透测试人员的一个非常好的实践是从列出各种可用的HTTP方法开始。下面是一个Python脚本,借助它我们可以连接到目标Web服务器并枚举可用的HTTP方法 -
首先,我们需要导入requests库 -
import requests
导入requests库后,创建一个我们将要发送的HTTP方法数组。我们将使用一些标准方法,如'GET'、'POST'、'PUT'、'DELETE'、'OPTIONS',以及一个非标准方法'TEST'来检查Web服务器如何处理意外输入。
method_list = ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'TRACE','TEST']
以下代码行是脚本的主循环,它将HTTP数据包发送到Web服务器并打印方法和状态代码。
for method in method_list: req = requests.request(method, 'Enter the URL’) print (method, req.status_code, req.reason)
下一行将通过发送TRACE方法来测试跨站点跟踪(XST)的可能性。
if method == 'TRACE' and 'TRACE / HTTP/1.1' in req.text: print ('Cross Site Tracing(XST) is possible')
对于特定的Web服务器运行上述脚本后,我们将获得Web服务器接受的特定方法的200 OK响应。如果Web服务器明确拒绝该方法,我们将获得403 Forbidden响应。一旦我们发送TRACE方法来测试跨站点跟踪(XST),我们将从Web服务器获得405 Not Allowed响应,否则我们将获得消息'跨站点跟踪(XST)是可能的'。
通过检查HTTP标头进行足迹收集
HTTP标头存在于Web服务器的请求和响应中。它们还承载关于服务器的非常重要的信息。这就是为什么渗透测试人员总是对通过HTTP标头解析信息感兴趣。以下是一个用于获取Web服务器标头信息的Python脚本 -
首先,让我们导入requests库 -
import requests
我们需要向Web服务器发送一个GET请求。以下代码行通过requests库发出一个简单的GET请求。
request = requests.get('enter the URL')
接下来,我们将生成一个关于您需要信息的标头列表。
header_list = [ 'Server', 'Date', 'Via', 'X-Powered-By', 'X-Country-Code', ‘Connection’, ‘Content-Length’]
接下来是一个try和except块。
for header in header_list: try: result = request.header_list[header] print ('%s: %s' % (header, result)) except Exception as err: print ('%s: No Details Found' % header)
对于特定的Web服务器运行上述脚本后,我们将获得标头列表中提供的标头信息。如果某个标头没有信息,则会显示消息'未找到详细信息'。您还可以从以下链接中了解更多关于HTTP_header字段的信息 — https://tutorialspoint.com/http/http_header_fields.htm。
测试不安全的Web服务器配置
我们可以使用HTTP标头信息来测试不安全的Web服务器配置。在下面的Python脚本中,我们将使用try/except块来测试保存在名为websites.txt的文本文件中的多个URL的不安全的Web服务器标头 -
import requests urls = open("websites.txt", "r") for url in urls: url = url.strip() req = requests.get(url) print (url, 'report:') try: protection_xss = req.headers['X-XSS-Protection'] if protection_xss != '1; mode = block': print ('X-XSS-Protection not set properly, it may be possible:', protection_xss) except: print ('X-XSS-Protection not set, it may be possible') try: options_content_type = req.headers['X-Content-Type-Options'] if options_content_type != 'nosniff': print ('X-Content-Type-Options not set properly:', options_content_type) except: print ('X-Content-Type-Options not set') try: transport_security = req.headers['Strict-Transport-Security'] except: print ('HSTS header not set properly, Man in the middle attacks is possible') try: content_security = req.headers['Content-Security-Policy'] print ('Content-Security-Policy set:', content_security) except: print ('Content-Security-Policy missing')
Web应用程序的足迹收集
在上一节中,我们讨论了Web服务器的足迹收集。类似地,从渗透测试的角度来看,Web应用程序的足迹收集也很重要。
在接下来的章节中,我们将了解Web应用程序足迹收集的不同方法。
Web应用程序足迹收集的方法
Web应用程序是一个客户端-服务器程序,由客户端在Web服务器上运行。在进行Web应用程序渗透测试时,这是渗透测试人员需要关注的另一个关键领域。
现在让我们讨论在Python中实现的不同方法,这些方法可用于Web应用程序的足迹收集 -
使用BeautifulSoup解析器收集信息
假设我们想要从网页中收集所有超链接;我们可以使用一个名为BeautifulSoup的解析器。该解析器是一个Python库,用于从HTML和XML文件中提取数据。它可以与urlib一起使用,因为它需要一个输入(文档或URL)来创建soup对象,并且它本身无法获取网页。
首先,让我们导入必要的包。我们将导入urlib和BeautifulSoup。请记住,在导入BeautifulSoup之前,我们需要安装它。
import urllib from bs4 import BeautifulSoup
下面给出的Python脚本将收集网页的标题和超链接 -
现在,我们需要一个变量来存储网站的URL。这里,我们将使用一个名为'url'的变量。我们还将使用page.read()函数,该函数可以存储网页并将网页分配给变量html_page。
url = raw_input("Enter the URL ") page = urllib.urlopen(url) html_page = page.read()
html_page将作为输入分配给创建soup对象。
soup_object = BeautifulSoup(html_page)
以下两行将分别打印带标签和不带标签的标题名称。
print soup_object.title print soup_object.title.text
下面显示的代码行将保存所有超链接。
for link in soup_object.find_all('a'): print(link.get('href'))
横幅抓取
横幅就像一条包含服务器信息的消息,而横幅抓取是获取横幅本身提供的信息的过程。现在,我们需要知道这个横幅是如何生成的。它是通过发送的数据包的头部生成的。当客户端尝试连接到端口时,服务器会做出响应,因为头部包含服务器的信息。
以下Python脚本使用套接字编程来帮助抓取横幅 -
import socket s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800)) targethost = str(raw_input("Enter the host name: ")) targetport = int(raw_input("Enter Port: ")) s.connect((targethost,targetport)) def garb(s:) try: s.send('GET HTTP/1.1 \r\n') ret = sock.recv(1024) print ('[+]' + str(ret)) return except Exception as error: print ('[-]' Not information grabbed:' + str(error)) return
运行上述脚本后,我们将获得与上一节中Web服务器HTTP标头足迹收集的Python脚本获得的标头信息类似的信息。