版權:http://blog.csdn.net/yueguanghaidao/article/details/38026431
每次看都不方便 摘抄下來
之前一搞滲透的同事問我,sqlmapapi.py是干啥的,我猜很多人都玩過sqlmap,但玩過sqlmapapi的應該比較少,今天就和大家一起看看如何使用以及一些美的地方。
說白了,sqlmapapi.py就是提供了一個檢查sql注入的接口,我們可以直接通過發送http請求掃描sql注入,獲取掃描結果等一系列操作。
下面通過實例演示如何使用:
一.啟動服務器端
服務器后端使用的是bottle,一個Python Web微框架。
二. 我們使用requests這個庫發送請求
1.新建任務
2.發送掃描選項,開啟掃描
注意:那個cd92e4e99406715b就是新建任務返回的taskid
3.查看掃描狀態
任務已經結束,可以獲取掃描結果了
4.查看掃描結果
我們很明顯的看出是存在sql注入的
嘿嘿,是不是很簡單,但很強大啊,其實如果深入源碼查看,你會發現也很簡單。
比如說啟動一個任務,
- def engine_start(self):
- self.process = Popen("python sqlmap.py --pickled-options %s" % base64pickle(self.options),
- shell=True, stdin=PIPE, close_fds=False)
其它的也是一目了然,
- def engine_stop(self):
- if self.process:
- return self.process.terminate()
- else:
- return None
- def engine_kill(self):
- if self.process:
- return self.process.kill()
- else:
- return None
- def engine_get_returncode(self):
- if self.process:
- self.process.poll()
- return self.process.returncode
- else:
- return None
- def engine_has_terminated(self):
- #如何任務沒有結束,returncode的返回值為None
- return isinstance(self.engine_get_returncode(), int)
我們restful api設計也是很有講究的,一般少用動詞,而是通過http的方法代表動作。比如說獲取狀態,並不是getstatus,而是通過get方法,和status名稱就很貼切。
但有時動詞是不可避免的,如何說start,stop等。其實看看新建任務的api設計作者肯定也很糾結,本來如果新建任務有參數的話,直接post方法就可以,壓根不需要new這個動詞。但由於新建任務不需要任何參數,使用post方法也不太恰當,所以改為get方法了。這也符合上面開啟任務使用post,而停止任務使用的是get。
更多細節問題需要大家去看文檔或源碼,剛好趁着這個機會好好分析下subprocess模塊和bottle框架,后期也會有這方面的分析。