Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Cara menggunakan sqlmapapi untuk memulakan imbasan

Cara menggunakan sqlmapapi untuk memulakan imbasan

WBOY
WBOYke hadapan
2023-05-20 23:13:431111semak imbas

sqlmap boleh dikatakan sebagai artifak pengesanan suntikan SQL, tetapi kecekapan menggunakan sqlmap untuk menguji suntikan SQL adalah sangat rendah, dan setiap URL perlu diuji secara manual. Pembangun sqlmap telah menambah sqlmapapi.py, yang boleh dikendalikan secara langsung melalui panggilan antara muka, memudahkan pelaksanaan arahan sqlmap.

Sqlmap api dibahagikan kepada pelayan dan klien. Sqlmap api mempunyai dua mod, satu ialah mod antara muka berdasarkan protokol HTTP, dan satu lagi ialah mod antara muka berdasarkan baris arahan.

alamat muat turun kod sumber sqlmap: https://github.com/sqlmapproject/sqlmap/

1 Lihat bantuan

python sqlmapapi.py -hCara menggunakan sqlmapapi untuk memulakan imbasan<.>

2. Mulakan pelayan api

Sebelum menggunakan perkhidmatan API, anda perlu memulakan pelayan API terlebih dahulu, sama ada ia berdasarkan protokol HTTP atau mod antara muka berasaskan baris arahan. Untuk memulakan pelayan API, hanya jalankan arahan berikut: python sqlmapapi.py -s

Selepas arahan berjaya, beberapa maklumat akan dikembalikan dalam baris arahan. Perintah berikut secara kasar bermakna pelayan api berjalan pada port tempatan 8775, dan token pentadbir ialah c6bbb0c1f86b7d7bc2ed6ce3e3bbdcb5, dsb.

Walau bagaimanapun, terdapat kelemahan dalam membuka pelayan api dengan cara di atas. Apabila pelayan dan klien Jika klien bukan hos, ia tidak akan disambungkan, jadi jika anda ingin menyelesaikan masalah ini, anda boleh membuka pelayan api dengan memasukkan arahan berikut: python sqlmapapi.py -s -H " 0.0.0.0" -p 8775Cara menggunakan sqlmapapi untuk memulakan imbasan

Selepas arahan berjaya, klien jauh boleh menyambung ke pelayan API dengan menyatakan IP dan port hos jauh.

3. Mod antara muka berasaskan baris perintah

3.1 Buka klien dan mulakan arahan suntikan

python sqlmapapi.py -c

Jika klien dan pelayan tidak berada pada komputer yang sama, masukkan arahan berikut:

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

3.2. Bantu arahan, dapatkan semua arahan
help          显示帮助信息
new ARGS      开启一个新的扫描任务
use TASKID    切换
taskid data   获取当前任务返回的数据
log           获取当前任务的扫描日志
status        获取当前任务的扫描状态
option OPTION 获取当前任务的选项
options       获取当前任务的所有配置信息
stop          停止当前任务 
kill          杀死当前任务
list          显示所有任务列表
flush         清空所有任务
exit          退出客户端

Cara menggunakan sqlmapapi untuk memulakan imbasan3.3.3.3.3.3.3.1.arahan baharu

baru -u "url"

Contoh: new -u "http://www.baidu.com"

Walaupun kami hanya Parameter -u ditentukan, tetapi ia boleh dilihat daripada maklumat yang dikembalikan bahawa selepas memasukkan arahan baru, /task/new mula-mula diminta untuk mencipta taskid baharu, dan kemudian permintaan dimulakan untuk memulakan tugas, jadi ia boleh dapat ditemui Mod ini pada asasnya berdasarkan protokol HTTP.

3.3.2 perintah status

Cara menggunakan sqlmapapi untuk memulakan imbasan mendapatkan status pengimbasan tugasan jika medan status dalam kandungan yang dikembalikan ditamatkan, Ini bermakna imbasan telah selesai Jika medan status dalam kandungan yang dikembalikan dijalankan, ini bermakna imbasan masih dalam proses. Gambar berikut ialah tangkapan skrin imbasan yang telah selesai:

3.3.3 arahan data

Jika medan data dalam data yang dikembalikan tidak kosong, anda boleh mendapatkan suntikan telah berjaya. Contoh ini menunjukkan kandungan pulangan yang mengandungi suntikan SQL, yang mengandungi maklumat seperti jenis pangkalan data, muatan dan parameter suntikan.

Cara menggunakan sqlmapapi untuk memulakan imbasan

4. Mod antara muka berdasarkan protokol HTTP

Perkenalkan secara ringkas fungsi utama h berdasarkan mod panggilan antara muka http sqlmapapi.py, masukkan lib/ Kelas pelayan utils/api.py boleh didapati berinteraksi dengan perkhidmatan dengan menyerahkan data kepada pelayan. Terdapat 3 jenis kesemuanya.

Cara menggunakan sqlmapapi untuk memulakan imbasan

Kaedah pengguna Kaedah pengguna

Fungsi pentadbiran Fungsi pengurusan

fungsi interaksi teras sqlmap Fungsi interaksi teras

Ya Jenis data yang diserahkan adalah seperti berikut:

4.1 Kaedah pengguna

@get("/task/new")

rreee@get ("/task/delete")

@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})
4.2. Fungsi interaktif teras

@get("/option/list")

@post. ("/ option/get")

@post("/option/set")

@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"})</taskid>

@post("/scan/start")

@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})</taskid>

@get ("/scan/stop")

@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()})</taskid>

@get("/scan/kill")

@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})</taskid>
@get("/scan/status")

@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})</taskid>
@ get("/scan/data")

@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()
    })</taskid>
@get("/scan/log")

@get("/download/")

4.3. Fungsi Pengurusan

@get("/admin/list")

@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})</taskid>
@get("/admin//flush")

@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)})</token>
Analisis dan ekstrak daripada perhubungan panggilan fail sqlmapapi.py. Operasi ini boleh memenuhi sepenuhnya keperluan ujian kami, jadi ia boleh digunakan untuk operasi kelompok.

5. Gunakan sqlmapapi untuk memulakan pengimbasan

sqlmapapi.py dengan mudah menyediakan entri permintaan http, tetapi apabila digunakan, anda hanya boleh mendapatkan hasil akhir sama ada untuk menyuntik atau tidak antara muka menjalankan pengimbasan suntikan? Permintaan sedemikian sukar diperoleh dengan sebarang bilangan permintaan. Biar saya kongsikan carta alir yang direkodkan selepas menyisir kod sumber sqlmap. Daripada angka tersebut, anda boleh mencari lokasi khusus permintaan peringkat muatan Jika anda ingin mengetahui jenis permintaan yang dimulakan dan bilangan permintaan, anda hanya perlu menambah kod tersuai di sini.

Cara menggunakan sqlmapapi untuk memulakan imbasan

6. Proses pelaksanaan automasi suntikan SQL

Cara menggunakan sqlmapapi untuk memulakan imbasan

Atas ialah kandungan terperinci Cara menggunakan sqlmapapi untuk memulakan imbasan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam