SQLMAP 弹二 传入数据全局使用

此次需求,是传入集群名给sqlmap使用,让发包函数的QPS限制装饰器拿到集群名

0X01

一开始研究了一会儿的数据跳着传递,后来发现sqlmap本身的conf是一个全局实例,在开始的时候进行初始化,在之后的各个流程中都有引用。所以集群名或者其他数据可以通过参数的形式传入conf配置里,再在其他地方调用。

0X02 sqlmap 传入数据给conf

# sqlmap\lib\parse\cmdline.py

target.add_argument("--cluster", dest="cluster", help="Target cluster(e.g. test)")

添加参数就到了conf里了?

sqlmap.py
def main
148行
initOptions(cmdLineOptions)

\lib\core\options
def initOptions
2638行
_mergeOptions(inputOptions, overrideOptions)

def _mergeOptions(inputOptions, overrideOptions):
2197行
for key, value in inputOptionsItems:
将参数挨个输入到conf里

ps: 如果sqlmap输入不想要的参数

lib\parse\cmdline
987行
SystemExit报错
		try:
            (args, _) = parser.parse_known_args(argv) if hasattr(parser, "parse_known_args") else parser.parse_args(argv)
        except UnicodeEncodeError as ex:
            dataToStdout("\n[!] %s\n" % getUnicode(ex.object.encode("unicode-escape")))
            raise SystemExit
        except SystemExit:
            if "-h" in argv and not advancedHelp:
                dataToStdout("\n[!] to see full list of options run with ‘-hh‘\n")
            raise

0X03 传给装饰器

\lib\request\connect
行 248

@staticmethod
    def getPage(**kwargs):
        kwargs["cluster"] = conf.cluster if conf.cluster else ""
        return Connect._getPage(**kwargs)

    @staticmethod
    @qps_config
    def _getPage(**kwargs):
        """
        This method connects to the target URL or proxy and returns
        the target URL page content
        """

相关推荐