sqlmap源码解析(二)
init()
_basicOptionValidation
这里检查了所有的参数的正确性并给出使用建议
_listTamperingFunctions
这里有一个可以列举tamper 的方法=。=
以前居然不知道
可以找到用--list-tamper就可以打开
__priority__
通过这个做标识符来匹配下面的介绍
_setTamperingFunctions
加载插件
首先判断文件存在不存在以及更改工作路径等事情
然后用内置函数import()将文件导入
在对插件的优先级进行判断
_setTrafficOutputFP
没想到sqlmap还可以将http记录到文件中
只要-t参数就好了
_setHostname
从url中取出hostname
_doSearch
之前全是很简单的给请求头赋值
这里看样子有点意思了
This function performs search dorking, parses results
and saves the testable hosts into the knowledge base.
可以直接获得google搜索的结果
可以这样用
sqlmap -g "inurl:\".php?id=1\""
不过我的命令行好像连接不到google
_setBulkMultipleTargets()
sqlmap 的 -m参数
getFileItems
在这里读取文件
将文件中的url一个一个读取放到kb.target
_setSitemapTargets
sqlmap的-x的参数
通过parseSitemap
来解析target
将url从Sitemap中提取出来
_setCrawler
--crawl:从起始位置爬站深度
如果没有标签
访问一个网站用
r'(?i)<a[^>]+href="(?P<href>[^>"]+)"'
这个正则
将别的url提取出来
checkSameHost
sqlmap 在爬虫的时候对相同url的处理
findPageForms
Parses given page content for possible forms (Note: still not implemented for Python3)
>> findPageForms('<html><form action="/input.php" method="POST"><input type="text" name="id" value="1"><input type="submit" value="Submit"></form></html>', '')
set([(u'/input.php', 'POST', u'id=1', None, None)])
从form中获得所有的参数
使用了clientform的ParseResponse来解析
没了解过这个第三方库以后学习一下
loadBoundaries
接下来都是一些set来初始化的
这两个差不多最后都用了
parseXmlNode
来解析了xml
parseXmlNode
for element in node.getiterator("boundary"):
boundary = AttribDict()
for child in element.getchildren():
if child.text:
values = cleanupVals(child.text, child.tag)
boundary[child.tag] = values
else:
boundary[child.tag] = None
conf.boundaries.append(boundary)
for element in node.getiterator("test"):
test = AttribDict()
for child in element.getchildren():
if child.text and child.text.strip():
values = cleanupVals(child.text, child.tag)
test[child.tag] = values
else:
if len(child.getchildren()) == 0:
test[child.tag] = None
continue
else:
test[child.tag] = AttribDict()
for gchild in child.getchildren():
if gchild.tag in test[child.tag]:
prevtext = test[child.tag][gchild.tag]
test[child.tag][gchild.tag] = [prevtext, gchild.text]
else:
test[child.tag][gchild.tag] = gchild.text
conf.tests.append(test)
差不多就是解析处理了之后放入到conf中
update
--update
这个命令行可以更新
首先先检查有没有.git文件
然后会询问要不要通过zip来下载安装
一个通过https://github.com/sqlmapproject/sqlmap/zipball/master
下来zip来更新
另一个这样更新git checkout . && git pull %s HEAD
后记
终于看完了init要往下继续看了=。=
是我看的太不认真了