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/
python sqlmapapi.py -h<.>
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 8775
python sqlmapapi.py -cpython sqlmapapi.py -c -H "192.168.1.101" -p 8775Jika klien dan pelayan tidak berada pada komputer yang sama, masukkan arahan berikut:
3.2. Bantu arahan, dapatkan semua arahan
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
3.3.3.3.3.3.3.1.arahan baharu
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
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.4.1 Kaedah penggunaYa Jenis data yang diserahkan adalah seperti berikut:
@get("/task/new")
rreee@get ("/task/delete")1 2 3 4 5 6 7 8 9 10 11 12 |
|
@get("/option/list")
@post. ("/ option/get")
@get("/scan/status")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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>
Salin selepas log masuk@post("/scan/start")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@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>
Salin selepas log masuk@get ("/scan/stop")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@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>
Salin selepas log masuk@get("/scan/kill")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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>
Salin selepas log masuk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
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.
Atas ialah kandungan terperinci Cara menggunakan sqlmapapi untuk memulakan imbasan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!