0x002 sqlmap的参数解析

devtools/2024/11/14 13:18:30/

0x002 sqlmap的参数解析

重新看到cmdLineParser()​函数

首先检测是否存在argv​,如果没有则设置为系统默认的命令行参数

再调用checkSystemEncoding()​函数来检测系统的编码设置,确保后续能够正确的处理字符编码

调用os.path.basename(argv[0])​来获取脚本的文件名,再通过getUnicode()​函数来将其转换为合适的编码格式

构建命令行工具的使用说明usage​.根据当前环境的不同,将可执行文件的路径和脚本文件名组合成一个使用说明字符串

创建了参数解析器ArgumentParser​,设置了工具的使用说明为上一步构建的usage​字符串

再往下就是参数列表了(Target options​等等)

接下来我们回到init()​函数中

def init():"""Set attributes into both configuration and knowledge base singletonsbased upon command line and configuration file options."""_useWizardInterface()setVerbosity()  # 设置sqlmap输出的详细程度_saveConfig()   # 将命令行选项保存到sqlmap配置的ini文件中_setRequestFromFile()   # 从传入的文件中获取url_cleanupOptions()   # 清除配置文件_cleanupEnvironment()   # 清除环境变量_purge()    # 安全的删除sqlmap根目录下的数据_checkDependencies()    # 检查是否缺少依赖项_createHomeDirectories()_createTemporaryDirectory()_basicOptionValidation()_setProxyList()_setTorProxySettings()_setDNSServer()_adjustLoggingFormatter()_setMultipleTargets()_listTamperingFunctions()_setTamperingFunctions() # 设置tamper脚本_setPreprocessFunctions()_setPostprocessFunctions()_setTrafficOutputFP()_setupHTTPCollector()_setHttpChunked()_checkWebSocket()parseTargetDirect()if any((conf.url, conf.logFile, conf.bulkFile, conf.requestFile, conf.googleDork, conf.stdinPipe)):_setHostname()_setHTTPTimeout()_setHTTPExtraHeaders()_setHTTPCookies()_setHTTPReferer()_setHTTPHost()_setHTTPUserAgent()_setHTTPAuthentication()_setHTTPHandlers()_setDNSCache()_setSocketPreConnect()_setSafeVisit()_doSearch()_setStdinPipeTargets()_setBulkMultipleTargets()_checkTor()_setCrawler()_findPageForms()_setDBMS()_setTechnique()_setThreads()_setOS()_setWriteFile()_setMetasploit()_setDBMSAuthentication()loadBoundaries()loadPayloads()_setPrefixSuffix()update()_loadQueries()

这边我们先看_setRequestFromFile()​方法,先来理解,如果我们通过-r​传递一个文本文件,sqlmap​是如何理解并转换成参数的呢

if conf.requestFile:for requestFile in re.split(PARAMETER_SPLITTING_REGEX, conf.requestFile):requestFile = safeExpandUser(requestFile)url = Noneseen = set()if not checkFile(requestFile, False):errMsg = "specified HTTP request file '%s' " % requestFileerrMsg += "does not exist"raise SqlmapFilePathException(errMsg)

先调用了re.split()​方法对我们传入的conf.requestFile​变量进行拆分,查询setting.py​我们可以找到PARAMETER_SPLITTING_REGEX = r"[,|;]"

然后再调用safeExpandUser()​函数,确保路径的稳定性和可靠性

在调用checkFile()​函数确保文件的存在和可读.否则就报错specified HTTP request file​&&does not exist

当文件确认没有问题的时候,就开始获取目标的URL

for target in parseRequestFile(requestFile):url = target[0]if url not in seen:kb.targets.add(target)if len(kb.targets) > 1:conf.multipleTargets = Trueseen.add(url)

跟进parseRequestFile()​函数

def parseRequestFile(reqFile, checkParams=True):"""Parses WebScarab and Burp logs and adds results to the target URL list>>> handle, reqFile = tempfile.mkstemp(suffix=".req")>>> content = b"POST / HTTP/1.0\\nUser-agent: foobar\\nHost: www.example.com\\n\\nid=1\\n">>> _ = os.write(handle, content)>>> os.close(handle)>>> next(parseRequestFile(reqFile)) == ('http://www.example.com:80/', 'POST', 'id=1', None, (('User-agent', 'foobar'), ('Host', 'www.example.com')))True"""

这里并没有给出这个函数的实现方法,但是把返回值展示了出来,如果我们传入一个WebScarab​或者burp​日志,通过这个函数会返回一个数组,其中target[0]​就是URL

回到_setRequestFromFile()​函数,如果url​不在seen​中,就会自动把url​加入到seen​中

下面就是如果有第二个请求接下来的处理,我们先略过

经过_setRequestFromFile()​函数后,如果我们传入的req​文件没有问题的话,此时seen​中就有了url​属性

然后再经过init​后半段代码,将这些属性初始化


http://www.ppmy.cn/devtools/34297.html

相关文章

Mac 电脑安装 Raptor 流程图软件的方法

0. 安装逻辑 (1)运行 raptor,本质上需要 mac 能够运行 windows 程序,因此需要安装 .NET Runtime 7.0,这是微软程序运行必须的文件。 (2)运行 raptor 还需要安装依赖文件 mono-libgdiplus。 &am…

hadoop学习---Hive分桶表的机制及其查询优化方案

什么是分桶表? 分桶是将数据集分解成更容易管理的若干部分的一个技术,是比分区更为细粒度的数据范围划分。 主要是用于分文件的,在建表的时候,指定按照那些字段执行分桶操作,并可以设置需要分多少个桶,当插…

Having和Where的区别

Having和Where都是过滤数据的关键子句 Where是在分组之前过滤数据 SELECT * FROM Employees WHERE department Tech;Having是在分组之后利用聚合函数进行过滤 SELECT department, AVG(salary) AS average_salary FROM Employees GROUP BY department HAVING AVG(salary) >…

ICode国际青少年编程竞赛- Python-1级训练场-for循环与变量

ICode国际青少年编程竞赛- Python-1级训练场-for循环与变量 1、 a 1 for i in range(4):Spaceship.step(a)Dev.step(2)Dev.step(-2)a a 12、 a 1 for i in range(4):Spaceship.step(a)Dev.step(3)Dev.step(-3)a a 13、 a 1 for i in range(4):Dev.turnLeft()Dev.step(…

计算机网络中常用的网络协议

计算机网络中的网络协议可以按照其功能和作用的不同分为多种类型,常见的网络协议包括 传输层协议: TCP (Transmission Control Protocol):传输控制协议,提供可靠的数据传输服务,保证数据的完整性和顺序性。UDP (User D…

Room简单实操

1. Room介绍,直接Copy官网介绍: Room 持久性库在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库。具体来说,Room 具有以下优势: 提供针对 SQL 查询的编译时验…

【Android】Android应用性能优化总结

AndroidApp应用性能优化总结 最近大半年的时间里,大部分投在了某国内新能源汽车的某款AndroidApp开发上。 由于该App是该款车上,常用重点应用。所以车厂对应用性能的要求比较高。 主要包括: 应用冷启动达到***ms。应用热(温)启动达到***ms应…

Unity 热更--AssetBundle学习笔记 1.0【AB包资源加载工具类的实现】

合集 - Unity学习笔记(13)1.Unity学习笔记–基础2023-11-012.Unity学习笔记–入门2023-10-293.Unity学习笔记–数据持久化之PlayerPrefs的使用2023-11-194.Unity学习笔记–数据持久化XML文件(1)2023-11-205.Unity学习笔记–数据持久化XML文件(2)2023-12-…