涙をこらえて 笑顔でさようなら せつないよね
sqlmapapi使用的是bottle web框架,与flask类似,但是更加精简。
首先开启sqlmapapi服务
python sqlmapapi.py -s
输出结果大致如下:
C:\Users\Administrator\Desktop>sqlmapapi.py -s
[15:42:37] [INFO] Running REST-JSON API server at '127.0.0.1:8775'..
[15:42:37] [INFO] Admin ID: 1624e1c613cf56c1afe4241b28487b4d
[15:42:37] [DEBUG] IPC database: 'c:\users\administrator\appdata\local\temp\sqlmapipc-fh0y03'
[15:42:37] [DEBUG] REST-JSON API server connected to IPC database
[15:42:37] [DEBUG] Using adapter 'wsgiref' to run bottle
[15:42:41] [DEBUG] Created new task: '4ebbb121a16a47ab'
根据输出结果,可以明白bottle开启的服务地址为
http://127.0.0.1:8775
Admin ID 是用来管理 task 所用的,每次开启 sqlmapapi 都会改变,可以通过修改源码的方式将其固定,或是写入文件供其他程序读取。
这里只是开启了服务,进一步需要创建任务,每个注入点对应不同的id。
创建任务方法如下:
r = requests.get(url='http://127.0.0.1:8775/task/new')
print r.json()
此时会返回一个json
{u'success': True, u'taskid': u'4ebbb121a16a47ab'}
代表创建任务成功,后面的id值就是创建任务的时候该任务对应的唯一id值。
注意:每次发送请求返回的id值都是不一样的。
然后发送一个 链接过去 ,sqlmapapi自动判断是否存在注入。
我这里先用phpstudy搭建apache环境,安装好了sqli labs
使用的链接是
url = 'http://127.0.0.1/sqli/Less-1/?id=1'
代码实现如下:
import requests,json,time
def scan_sql(url):
r = requests.get(url='http://127.0.0.1:8775/task/new')
task_id = r.json()['taskid']
sqlmap_set = 'http://127.0.0.1:8775/option/%s/set' % task_id
sqlmap_url = 'http://127.0.0.1:8775/scan/%s/start' % task_id
sqlmap_status = 'http://127.0.0.1:8775/scan/%s/status' % task_id
sqlmap_result = 'http://127.0.0.1:8775/scan/%s/data' % task_id
set = requests.post(url=sqlmap_set,data=json.dumps({'url':url}), headers={'Content-Type':'application/json'})
scans = requests.post(url=sqlmap_url,data=json.dumps({'url':url}), headers={'Content-Type':'application/json'})
r = requests.get(sqlmap_status).json()['status']
print r
while 1:
if requests.get(sqlmap_status).json()['status'] == 'running':
print 'is running'
time.sleep(10)
else:
print requests.get(sqlmap_status).json()['status']
time.sleep(10)
re = requests.get(url=sqlmap_result)
print re.json()
#return requests.get(sqlmap_result).content