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才会输出。
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中该处的判断语句),可能导致报错的问题,但也导致主程序被中断。
将之换成return吧。
之后想要全面消除这种现象,就要将程序中所有exit都看一下。