欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何利用sqlmapapi發(fā)起掃描

本篇文章為大家展示了如何利用sqlmapapi發(fā)起掃描,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

靖江網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。

sqlmap可謂是sql注入探測(cè)的神器,但是利用sqlmap測(cè)試SQL注入的效率很低,每一個(gè)url都需要手動(dòng)測(cè)試。sqlmap的開(kāi)發(fā)者新加了sqlmapapi.py,可以直接通過(guò)接口調(diào)用來(lái)操作,簡(jiǎn)化了sqlmap命令執(zhí)行方式。

sqlmap api分為服務(wù)端和客戶端,sqlmap api有兩種模式,一種是基于HTTP協(xié)議的接口模式,一種是基于命令行的接口模式。

sqlmap源碼下載地址:https://github.com/sqlmapproject/sqlmap/

一、查看幫助

python sqlmapapi.py -h如何利用sqlmapapi發(fā)起掃描

二、開(kāi)啟api服務(wù)端

無(wú)論是基于HTTP協(xié)議的接口模式還是基于命令行的接口模式,首先都是需要開(kāi)啟api服務(wù)端的。通過(guò)輸入以下命令即可開(kāi)啟api服務(wù)端:python sqlmapapi.py -s

命令成功后,在命令行中會(huì)返回一些信息。以下命令大概的意思是api服務(wù)端在本地8775端口上運(yùn)行,admin token為c6bbb0c1f86b7d7bc2ed6ce3e3bbdcb5等

如何利用sqlmapapi發(fā)起掃描但是通過(guò)上面的這種方式開(kāi)啟api服務(wù)端有一個(gè)缺點(diǎn),當(dāng)服務(wù)端和客戶端不是一臺(tái)主機(jī)會(huì)連接不上,因此如果要解決這個(gè)問(wèn)題,可以通過(guò)輸入以下命令來(lái)開(kāi)啟api服務(wù)端:python sqlmapapi.py -s -H "0.0.0.0" -p 8775

命令成功后,遠(yuǎn)程客戶端就可以通過(guò)指定遠(yuǎn)程主機(jī)IP和端口來(lái)連接到API服務(wù)端。

三、基于命令行的接口模式

3.1、開(kāi)啟客戶端,發(fā)起注入命令

python sqlmapapi.py -c

如果是客戶端和服務(wù)端不是同一臺(tái)計(jì)算機(jī)的話,輸入以下命令:

python sqlmapapi.py -c -H "192.168.1.101" -p 8775

3.2、help命令,獲取所有命令

help          顯示幫助信息
new ARGS      開(kāi)啟一個(gè)新的掃描任務(wù)
use TASKID    切換
taskid data   獲取當(dāng)前任務(wù)返回的數(shù)據(jù)
log           獲取當(dāng)前任務(wù)的掃描日志
status        獲取當(dāng)前任務(wù)的掃描狀態(tài)
option OPTION 獲取當(dāng)前任務(wù)的選項(xiàng)
options       獲取當(dāng)前任務(wù)的所有配置信息
stop          停止當(dāng)前任務(wù)
kill          殺死當(dāng)前任務(wù)
list          顯示所有任務(wù)列表
flush         清空所有任務(wù)
exit          退出客戶端

如何利用sqlmapapi發(fā)起掃描

3.3、檢測(cè)注入

3.3.1.new命令

new -u "url"

實(shí)例:new -u "http://www.baidu.com"

雖然我們僅僅只指定了-u參數(shù),但是從返回的信息中可以看出,輸入new命令后,首先先請(qǐng)求了/task/new,來(lái)創(chuàng)建一個(gè)新的taskid,后又發(fā)起了一個(gè)請(qǐng)求去開(kāi)始任務(wù),因此可以發(fā)現(xiàn)該模式實(shí)質(zhì)也是基于HTTP協(xié)議的。

如何利用sqlmapapi發(fā)起掃描

3.3.2. status 命令

獲取該任務(wù)的掃描狀態(tài),若返回內(nèi)容中的status字段為terminated,說(shuō)明掃描完成,若返回內(nèi)容中的status字段為run,說(shuō)明掃描還在進(jìn)行中。下圖是掃描完成的截圖:

如何利用sqlmapapi發(fā)起掃描3.3.3. data 命令

獲取掃描完成后注入出來(lái)的信息,若返回的內(nèi)容中data字段不為空就說(shuō)明存在注入。下圖是存在SQL注入返回的內(nèi)容,可以看到返回的內(nèi)容有數(shù)據(jù)庫(kù)類型、payload、注入的參數(shù)等等。

如何利用sqlmapapi發(fā)起掃描

四、基于HTTP協(xié)議的接口模式

簡(jiǎn)單介紹下sqlmapapi.py的h基于http接口調(diào)用模式的主要函數(shù),進(jìn)入到lib/utils/api.py的server類,可以發(fā)現(xiàn)通過(guò)向server提交數(shù)據(jù)進(jìn)行與服務(wù)的交互。 一共分為3種類型。

Users' methods 用戶方法

Admin function 管理函數(shù)

sqlmap core interact functions 核心交互函數(shù)

可以提交數(shù)據(jù)的種類如下:

4.1、用戶方法

@get("/task/new")

@get("/task/new")
def task_new():
    """
    Create a new task
    """
    taskid = encodeHex(os.urandom(8), binary=False)
    remote_addr = request.remote_addr
 
    DataStore.tasks[taskid] = Task(taskid, remote_addr)
 
    logger.debug("Created new task: '%s'" % taskid)
    return jsonize({"success": True, "taskid": taskid})

@get("/task/delete")

@get("/task/<taskid>/delete")
def task_delete(taskid):
    """
    Delete an existing task
    """
    if taskid in DataStore.tasks:
        DataStore.tasks.pop(taskid)
 
        logger.debug("(%s) Deleted task" % taskid)
        return jsonize({"success": True})
    else:
        response.status = 404
        logger.warning("[%s] Non-existing task ID provided to task_delete()" % taskid)
        return jsonize({"success": False, "message": "Non-existing task ID"})

4.2、核心交互函數(shù)

@get("/option/list")

@post("/option/get")

@post("/option/set")

@post("/option/<taskid>/set")
def option_set(taskid):
    """
    Set value of option(s) for a certain task ID
    """
 
    if taskid not in DataStore.tasks:
        logger.warning("[%s] Invalid task ID provided to option_set()" % taskid)
        return jsonize({"success": False, "message": "Invalid task ID"})
 
    if request.json is None:
        logger.warning("[%s] Invalid JSON options provided to option_set()" % taskid)
        return jsonize({"success": False, "message": "Invalid JSON options"})
 
    for option, value in request.json.items():
        DataStore.tasks[taskid].set_option(option, value)
 
    logger.debug("(%s) Requested to set options" % taskid)
    return jsonize({"success": True})

@post("/scan/start")

@post("/scan/<taskid>/start")
def scan_start(taskid):
    """
    Launch a scan
    """
 
    if taskid not in DataStore.tasks:
        logger.warning("[%s] Invalid task ID provided to scan_start()" % taskid)
        return jsonize({"success": False, "message": "Invalid task ID"})
 
    if request.json is None:
        logger.warning("[%s] Invalid JSON options provided to scan_start()" % taskid)
        return jsonize({"success": False, "message": "Invalid JSON options"})
 
    # Initialize sqlmap engine's options with user's provided options, if any
    for option, value in request.json.items():
        DataStore.tasks[taskid].set_option(option, value)
 
    # Launch sqlmap engine in a separate process
    DataStore.tasks[taskid].engine_start()
 
    logger.debug("(%s) Started scan" % taskid)
    return jsonize({"success": True, "engineid": DataStore.tasks[taskid].engine_get_id()})

@get("/scan/stop")

@get("/scan/<taskid>/stop")
def scan_stop(taskid):
    """
    Stop a scan
    """
 
    if (taskid not in DataStore.tasks or DataStore.tasks[taskid].engine_process() is None or DataStore.tasks[taskid].engine_has_terminated()):
        logger.warning("[%s] Invalid task ID provided to scan_stop()" % taskid)
        return jsonize({"success": False, "message": "Invalid task ID"})
 
    DataStore.tasks[taskid].engine_stop()
 
    logger.debug("(%s) Stopped scan" % taskid)
    return jsonize({"success": True})

@get("/scan/kill")

@get("/scan/<taskid>/kill")
def scan_kill(taskid):
    """
    Kill a scan
    """
 
    if (taskid not in DataStore.tasks or DataStore.tasks[taskid].engine_process() is None or DataStore.tasks[taskid].engine_has_terminated()):
        logger.warning("[%s] Invalid task ID provided to scan_kill()" % taskid)
        return jsonize({"success": False, "message": "Invalid task ID"})
 
    DataStore.tasks[taskid].engine_kill()
 
    logger.debug("(%s) Killed scan" % taskid)
    return jsonize({"success": True})

@get("/scan/status")

@get("/scan/<taskid>/status")
def scan_status(taskid):
    """
    Returns status of a scan
    """
 
    if taskid not in DataStore.tasks:
        logger.warning("[%s] Invalid task ID provided to scan_status()" % taskid)
        return jsonize({"success": False, "message": "Invalid task ID"})
 
    if DataStore.tasks[taskid].engine_process() is None:
        status = "not running"
    else:
        status = "terminated" if DataStore.tasks[taskid].engine_has_terminated() is True else "running"
 
    logger.debug("(%s) Retrieved scan status" % taskid)
    return jsonize({
        "success": True,
        "status": status,
        "returncode": DataStore.tasks[taskid].engine_get_returncode()
    })

@get("/scan/data")

@get("/scan/<taskid>/data")
def scan_data(taskid):
    """
    Retrieve the data of a scan
    """
 
    json_data_message = list()
    json_errors_message = list()
 
    if taskid not in DataStore.tasks:
        logger.warning("[%s] Invalid task ID provided to scan_data()" % taskid)
        return jsonize({"success": False, "message": "Invalid task ID"})
 
    # Read all data from the IPC database for the taskid
    for status, content_type, value in DataStore.current_db.execute("SELECT status, content_type, value FROM data WHERE taskid = ? ORDER BY id ASC", (taskid,)):
        json_data_message.append({"status": status, "type": content_type, "value": dejsonize(value)})
 
    # Read all error messages from the IPC database
    for error in DataStore.current_db.execute("SELECT error FROM errors WHERE taskid = ? ORDER BY id ASC", (taskid,)):
        json_errors_message.append(error)
 
    logger.debug("(%s) Retrieved scan data and error messages" % taskid)
    return jsonize({"success": True, "data": json_data_message, "error": json_errors_message})

@get("/scan/log")

@get("/download/")

4.3、管理函數(shù)

@get("/admin/list")

@get("/admin/list")
@get("/admin/<token>/list")
def task_list(token=None):
    """
    Pull task list
    """
    tasks = {}
 
    for key in DataStore.tasks:
        if is_admin(token) or DataStore.tasks[key].remote_addr == request.remote_addr:
            tasks[key] = dejsonize(scan_status(key))["status"]
 
    logger.debug("(%s) Listed task pool (%s)" % (token, "admin" if is_admin(token) else request.remote_addr))
    return jsonize({"success": True, "tasks": tasks, "tasks_num": len(tasks)})

@get("/admin//flush")

@get("/admin/flush")
@get("/admin/<token>/flush")
def task_flush(token=None):
    """
    Flush task spool (delete all tasks)
    """
 
    for key in list(DataStore.tasks):
        if is_admin(token) or DataStore.tasks[key].remote_addr == request.remote_addr:
            DataStore.tasks[key].engine_kill()
            del DataStore.tasks[key]
 
    logger.debug("(%s) Flushed task pool (%s)" % (token, "admin" if is_admin(token) else request.remote_addr))
    return jsonize({"success": True})

從sqlmapapi.py文件分析,提取調(diào)用關(guān)系。不難發(fā)現(xiàn)這些操作可以完全滿足我們的測(cè)試需求,因此利用這些就可以批量了。

五、利用sqlmapapi發(fā)起掃描

sqlmapapi.py很方便的提供了http請(qǐng)求入口,但是使用起來(lái)只能得到最終是否注入的結(jié)果,每個(gè)接口進(jìn)行注入掃描時(shí)具體發(fā)起了什么樣的請(qǐng)求,多少個(gè)請(qǐng)求就難以得到,下面分享一下個(gè)人梳理sqlmap源碼后記錄的流程圖。從圖中可以定位到具體發(fā)起payload級(jí)別的請(qǐng)求位置,從而想要獲取發(fā)起了什么樣的請(qǐng)求,多少個(gè)請(qǐng)求,只需要在此處增加自定義代碼即可。

如何利用sqlmapapi發(fā)起掃描

六、sql注入自動(dòng)化實(shí)現(xiàn)流程

如何利用sqlmapapi發(fā)起掃描

上述內(nèi)容就是如何利用sqlmapapi發(fā)起掃描,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

新聞標(biāo)題:如何利用sqlmapapi發(fā)起掃描
URL網(wǎng)址:http://chinadenli.net/article48/ppdhep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)公司、搜索引擎優(yōu)化網(wǎng)站策劃、小程序開(kāi)發(fā)手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司
国产日韩在线一二三区| 中文字幕高清免费日韩视频| 美女黄色三级深夜福利| 国产日韩熟女中文字幕| 女厕偷窥一区二区三区在线| 国产精品亚洲综合天堂夜夜| 欧美精品激情视频一区| 91偷拍裸体一区二区三区| 精品国产日韩一区三区| 国产精品十八禁亚洲黄污免费观看| 国产精品成人又粗又长又爽| 国产精品国三级国产专不卡| 国产目拍亚洲精品区一区| 国产亚洲视频香蕉一区| 东北女人的逼操的舒服吗| 热情的邻居在线中文字幕| 日韩精品一区二区不卡| 亚洲深夜精品福利一区| 91超精品碰国产在线观看| 五月天丁香亚洲综合网| 可以在线看的欧美黄片| 日韩日韩欧美国产精品| 欧美精品激情视频一区| 国产色偷丝袜麻豆亚洲| 午夜福利黄片免费观看| 欧美人妻盗摄日韩偷拍| 国产精品成人一区二区在线| 91福利视频日本免费看看| 久久老熟女一区二区三区福利| 日本精品免费在线观看| 国产极品粉嫩尤物一区二区| 麻豆国产精品一区二区三区| 亚洲欧美国产网爆精品| 欧美日韩国产亚洲三级理论片| 国产精品亚洲综合天堂夜夜| 又色又爽又无遮挡的视频| 国产丝袜极品黑色高跟鞋| 久久免费精品拍拍一区二区| 国产一区二区精品丝袜| 国产一级内射麻豆91| 中文字幕高清不卡一区|