zoukankan      html  css  js  c++  java
  • sqlmap

    sqlmap用法不存在太多难度,略过。

    对sqlmap源码的一些注解:

    1. sqlmap/lib/core/common.py

    输出函数dataToStdout中的sys.stdout.write

    控制主要输出点

    2. logging调级

    sqlmap/lib/core/option.py

    设置logging级别函数setVerbosity中,添加conf.verbose=0,则级别将设置为ERROR,级别较高,基本不输出,如有需求,可再设置为critical。 

    控制sqlmap logging输出级别,设置为0则只有最高级的logging才会输出。

    3. logging调级V2

    同样的,还是原来的位置

    conf.verbose=0的时候,将设置logger.setLevel(logging.ERROR)。

    python logging中,有六个级别:

    CRITICA、ERROR、WARNING、INFO、DEBUG、NOTSET

    而即使设置成最高的级别CRITICA,还是会raise出CRITICA级别的信息,为红色的,在主程序的console中不太好看。

    根据logging文档:https://docs.python.org/2/library/logging.html#levels

    logging的级别对应50、40、30、20、10、0

    所以,logger.setLevel(60)时什么logging都不会输出的,因为没有logging.XX级别无对应。

    def setVerbosity():
        """
        This function set the verbosity of sqlmap output messages.
        """
        # set the verbose -1, and the follow "if" would not go in.
        conf.verbose = -1
        if conf.verbose is None:
            conf.verbose = 1
    
        conf.verbose = int(conf.verbose)
        if conf.verbose == -1:
            # setLevel 60, and all logging would not output
            logger.setLevel(60)
    
        if conf.verbose == 0:
            logger.setLevel(logging.ERROR)
        elif conf.verbose == 1:
            logger.setLevel(logging.INFO)
        elif conf.verbose > 2 and conf.eta:
            conf.verbose = 2
            logger.setLevel(logging.DEBUG)
        elif conf.verbose == 2:
            logger.setLevel(logging.DEBUG)
        elif conf.verbose == 3:
            logger.setLevel(CUSTOM_LOGGING.PAYLOAD)
        elif conf.verbose == 4:
            logger.setLevel(CUSTOM_LOGGING.TRAFFIC_OUT)
        elif conf.verbose >= 5:
            logger.setLevel(CUSTOM_LOGGING.TRAFFIC_IN)

    如此甚好,什么输出都空了,舒服,从sys.stdout与logging两个源头中断输出,sqlmap本身程序哑了。

     

    4. 多线程调用sqlmap时,如果不存在注入,调用的程序也会终止。即使使用 try抓取异常,也会被中断。

    这一点刚开始找不到原因。

      1. 表面现象,raise后程序也终止了,注释掉raise SqlmapNotVulnerableException之后,还是会终止。

      2. sqlmap程序return值后,主程序收不到值,同时也终止了,看上去好像return时同时终止了程序。

      3. 最后找到了try: except:finally:,finally中有exit(0)。而finally优先级高于return,就算在try中return了,finally中exit,主程序还是会被exit给退出。

      

    sqlmap.py  main()函数最后一行:

      if threading.activeCount() > 1:
        os._exit(0)

    该语句解决了sqlmap跑完结果出现、该结束时还存在线程在运行(在sqlmap运行时,线程存在于inject过程中;但在二次开发过程中,主程序的线程会影响sqlmap中该处的判断语句),可能导致报错的问题,但也导致主程序被中断。

    将之换成pass吧,不能用return的原因:finally的return会覆盖try中的return,导致try中的retun接受不到。

    之后想要全面消除这种现象,就要将程序中所有exit都看一下。

  • 相关阅读:
    Java基础之集合Collection一:
    Java基础之字符串String:
    Java基础之Map学习代码示例二:
    Jav基础之字符串缓冲区StringBuffer:
    Java基础之TreeSet集合使用泛型、比较器排序示例:
    Java基础之Map学习代码示例一:
    Java基础之StringBuilder
    Java基础之泛型限定的使用示例:
    Java基础之泛型的应用
    spark.primitives 包中的几个基本类
  • 原文地址:https://www.cnblogs.com/huim/p/8978042.html
Copyright © 2011-2022 走看看