编写ldap扫描插件时,遇到的问题是,如何判断页面有变化。如果是已知的页面,可以根据页面中的字符串判断变化;如果是未知的页面,也就是通用页面,可以参考sqlmap:
sqlmap中,页面相似度的判断位于 lib/request/comparison.py,其中 _comparison为核心判断函数。
从中剥离出来,如下代码:
def compartion(cont1,cont2): """ 页面相似度检测 """ UPPER_RATIO_BOUND = 0.95 seqMatcher = difflib.SequenceMatcher(None) seqMatcher.set_seq1(cont1) seqMatcher.set_seq2(cont2) ratio = seqMatcher.quick_ratio() if ratio < UPPER_RATIO_BOUND: return False else: return True
其中,cont1,cont2代表两个页面的content,sqlmap中相似度UPPER_RATIO_BOUND的值为0.98,在程序中,相同的页面都达到了0.98,确实已经够用了,但是为了容错率,改为了0.95。