sqlmap
Posted huim
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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都看一下。
以上是关于sqlmap的主要内容,如果未能解决你的问题,请参考以下文章
整理篇(sqlmap 源码分析os-shell 原理攻防角度使用sqlmap)
NoClassDefFoundError: com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig处理(示例代码