sqlmapapi的基本使用和源码阅读
很多工程师都使用过sqlmap这个工具,那么你知道sqlmapapi是什么吗?顾名思义,就是sqlmap的接口吗?
其实你可以把sqlmapapi理解为云的概念,本质上就是用web包装了一下sqlmap,从而可以通过网络调用,sqlmap一般情况下只能在本地命令行使用,通过sqlmapapi新瓶装旧酒,味道就不一样了。
在我看来其核心差不多就是这块代码,君仔细一看,这不就是在进程内调用嘛,没错。
阅读源码之前,先看一下sqlmapapi的使用方法。
python sqlmapapi.py -h
Usage: sqlmapapi.py [options]
Options:
-h, --help show this help message and exit
-s, --server Run as a REST-JSON API server
-c, --client Run as a REST-JSON API client
-H HOST, --host=HOST Host of the REST-JSON API server (default "127.0.0.1")
-p PORT, --port=PORT Port of the the REST-JSON API server (default 8775)
--adapter=ADAPTER Server (bottle) adapter to use (default "wsgiref")
--username=USERNAME Basic authentication username (optional)
--password=PASSWORD Basic authentication password (optional)
启动sqlmapapi 的web服务:
$ python sqlmapapi.py -s
使用postman作为客户端进行联调和测试。
也可以使用python sqlmapapi.py -c
self.process = Popen([sys.executable or "python", "sqlmap.py", "--api", "-c", configFile], shell=False, close_fds=not IS_WIN)
sqlmapapi中使用的数据库
创建了一个临时文件
_, Database.filepath = tempfile.mkstemp(prefix=MKSTEMP_PREFIX.IPC, text=False)
os.close(_)
使用这个临时文件作为sqlite的存储文件。
建表语句如下:
创建了三个表logs、data、errors表
CREATE TABLE logs(id INTEGER PRIMARY KEY AUTOINCREMENT, taskid INTEGER, time TEXT, level TEXT, message TEXT)
CREATE TABLE data(id INTEGER PRIMARY KEY AUTOINCREMENT, taskid INTEGER, status INTEGER, content_type INTEGER, value TEXT)
CREATE TABLE errors(id INTEGER PRIMARY KEY AUTOINCREMENT, taskid INTEGER, error TEXT)
这三个表在什么时候使用到了呢?
logs表:
先看下面的代码,如果sqlmap运行时候指定了–api,那么会移除原来的LOGGER_HANDLER,改为把日志记录到数据库中。
然后再看data表和errors表
如果配置了–api,那么标准输出和标准错误输出都会被修改
StdDbOut是什么呢?
总结来说,如果有–api参数,会把日志,标准输出,标准错误输出统统都改到数据库里面去了。
一些引申的想法:
1、使用sqlmapapi实现自动化?
2、sqlmapapi的代码也不是完美,例如删除单个任务的时候,并没有考虑进程的状态。
DataStore.tasks.pop(taskid) 之前没有调用 DataStore.tasks[key].engine_kill()
参考
https://www.freebuf.com/articles/web/204875.html