#!/usr/bin/env python """ Copyright (c) 2006-2024 sqlmap developers (https://sqlmap.org/) See the file 'LICENSE' for copying permission """ # 导入必要的模块 # kb (Knowledge Base) 是一个全局对象,用于存储程序运行时的各种状态和数据 # 比如原始页面内容、错误状态、页面模板缓存等信息都存储在这里 from lib.core.data import kb # 从connect模块导入Request类并重命名为Request # Request类用于发送HTTP请求,是与目标网站交互的核心类 from lib.request.connect import Connect as Request def getPageTemplate(payload, place): """ 获取页面模板的函数 这个函数的主要作用是: 1. 根据给定的SQL注入payload和注入位置获取目标页面 2. 将页面内容缓存起来避免重复请求 3. 返回页面内容和错误状态信息 参数说明: payload: SQL注入的载荷,即要注入的SQL代码 place: 注入点的位置,表示在请求中的哪个位置进行注入 (比如URL参数、POST数据、Cookie等) 返回值: 返回一个包含两个元素的元组: 1. 页面内容 - 可能是原始页面或注入后的页面 2. 错误状态 - 表示页面解析是否出现错误 """ # 初始化返回值 # kb.originalPage 存储了未注入时的原始页面内容 # kb.errorIsNone 表示错误检查的状态 retVal = (kb.originalPage, kb.errorIsNone) # 只有当payload和place都不为空时才执行注入操作 if payload and place: # 检查这个payload和place的组合是否已经在缓存中 # kb.pageTemplates是一个字典,用于缓存不同注入组合的结果 if (payload, place) not in kb.pageTemplates: # 如果没有缓存,则发送新的请求 # Request.queryPage方法用于发送带有注入payload的请求 # content=True 表示需要返回页面内容 # raise404=False 表示遇到404错误时不抛出异常 # 返回值中的page是页面内容,其他两个值用下划线忽略 page, _, _ = Request.queryPage(payload, place, content=True, raise404=False) # 将结果存入缓存 # page 是获取到的页面内容 # kb.lastParserStatus is None 表示页面解析是否成功 # (None表示解析成功,非None表示解析出错) kb.pageTemplates[(payload, place)] = (page, kb.lastParserStatus is None) # 从缓存中获取之前存储的结果 retVal = kb.pageTemplates[(payload, place)] # 返回页面内容和错误状态 return retVal