You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.6 KiB
64 lines
2.6 KiB
#!/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
|