mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2024-11-22 17:46:37 +03:00
logging is now handled in a separate file descriptor :) - issue #297
This commit is contained in:
parent
794700eb37
commit
9766f6025e
|
@ -664,7 +664,7 @@ def cmdLineParser():
|
||||||
help="Simple wizard interface for beginner users")
|
help="Simple wizard interface for beginner users")
|
||||||
|
|
||||||
# Hidden and/or experimental options
|
# Hidden and/or experimental options
|
||||||
parser.add_option("--pickle", dest="pickledOptions", help=SUPPRESS_HELP)
|
parser.add_option("--pickled-options", dest="pickledOptions", help=SUPPRESS_HELP)
|
||||||
|
|
||||||
parser.add_option("--profile", dest="profile", action="store_true",
|
parser.add_option("--profile", dest="profile", action="store_true",
|
||||||
help=SUPPRESS_HELP)
|
help=SUPPRESS_HELP)
|
||||||
|
|
|
@ -19,16 +19,15 @@ from subprocess import Popen
|
||||||
from lib.controller.controller import start
|
from lib.controller.controller import start
|
||||||
from lib.core.common import unArrayizeValue
|
from lib.core.common import unArrayizeValue
|
||||||
from lib.core.convert import base64pickle
|
from lib.core.convert import base64pickle
|
||||||
|
from lib.core.convert import base64unpickle
|
||||||
from lib.core.convert import hexencode
|
from lib.core.convert import hexencode
|
||||||
|
from lib.core.convert import jsonize
|
||||||
from lib.core.convert import stdoutencode
|
from lib.core.convert import stdoutencode
|
||||||
from lib.core.data import paths
|
from lib.core.data import paths
|
||||||
from lib.core.datatype import AttribDict
|
|
||||||
from lib.core.data import kb
|
from lib.core.data import kb
|
||||||
from lib.core.data import logger
|
from lib.core.data import logger
|
||||||
|
from lib.core.datatype import AttribDict
|
||||||
from lib.core.defaults import _defaults
|
from lib.core.defaults import _defaults
|
||||||
from lib.core.log import FORMATTER
|
|
||||||
from lib.core.log import LOGGER_HANDLER
|
|
||||||
from lib.core.log import LOGGER_OUTPUT
|
|
||||||
from lib.core.exception import SqlmapMissingDependence
|
from lib.core.exception import SqlmapMissingDependence
|
||||||
from lib.core.optiondict import optDict
|
from lib.core.optiondict import optDict
|
||||||
from lib.core.option import init
|
from lib.core.option import init
|
||||||
|
@ -49,13 +48,11 @@ RESTAPI_SERVER_PORT = 8775
|
||||||
|
|
||||||
# Local global variables
|
# Local global variables
|
||||||
adminid = ""
|
adminid = ""
|
||||||
|
pipes = dict()
|
||||||
procs = dict()
|
procs = dict()
|
||||||
tasks = AttribDict()
|
tasks = AttribDict()
|
||||||
|
|
||||||
# Generic functions
|
# Generic functions
|
||||||
def jsonize(data):
|
|
||||||
return json.dumps(data, sort_keys=False, indent=4)
|
|
||||||
|
|
||||||
def is_admin(taskid):
|
def is_admin(taskid):
|
||||||
global adminid
|
global adminid
|
||||||
if adminid != taskid:
|
if adminid != taskid:
|
||||||
|
@ -254,6 +251,7 @@ def scan_start(taskid):
|
||||||
"""
|
"""
|
||||||
global tasks
|
global tasks
|
||||||
global procs
|
global procs
|
||||||
|
global pipes
|
||||||
|
|
||||||
if taskid not in tasks:
|
if taskid not in tasks:
|
||||||
abort(500, "Invalid task ID")
|
abort(500, "Invalid task ID")
|
||||||
|
@ -269,8 +267,13 @@ def scan_start(taskid):
|
||||||
# Launch sqlmap engine in a separate thread
|
# Launch sqlmap engine in a separate thread
|
||||||
logger.debug("starting a scan for task ID %s" % taskid)
|
logger.debug("starting a scan for task ID %s" % taskid)
|
||||||
|
|
||||||
procs[taskid] = Popen("python sqlmap.py --pickle %s" % base64pickle(tasks[taskid]), shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
|
pipes[taskid] = os.pipe()
|
||||||
stdout, stderr = procs[taskid].communicate()
|
|
||||||
|
# Provide sqlmap engine with the writable pipe for logging
|
||||||
|
tasks[taskid]["fdLog"] = pipes[taskid][1]
|
||||||
|
|
||||||
|
# Launch sqlmap engine
|
||||||
|
procs[taskid] = Popen("python sqlmap.py --pickled-options %s" % base64pickle(tasks[taskid]), shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=False)
|
||||||
|
|
||||||
return jsonize({"success": True})
|
return jsonize({"success": True})
|
||||||
|
|
||||||
|
@ -279,17 +282,17 @@ def scan_output(taskid):
|
||||||
"""
|
"""
|
||||||
Read the standard output of sqlmap core execution
|
Read the standard output of sqlmap core execution
|
||||||
"""
|
"""
|
||||||
|
global pipes
|
||||||
global tasks
|
global tasks
|
||||||
|
|
||||||
if taskid not in tasks:
|
if taskid not in tasks:
|
||||||
abort(500, "Invalid task ID")
|
abort(500, "Invalid task ID")
|
||||||
|
|
||||||
sys.stdout.seek(0)
|
stdout, stderr = procs[taskid].communicate()
|
||||||
output = sys.stdout.read()
|
|
||||||
sys.stdout.flush()
|
|
||||||
sys.stdout.truncate(0)
|
|
||||||
|
|
||||||
return jsonize({"output": output})
|
print "stderr:", stderr
|
||||||
|
|
||||||
|
return jsonize({"stdout": stdout, "stderr": stderr})
|
||||||
|
|
||||||
@get("/scan/<taskid>/delete")
|
@get("/scan/<taskid>/delete")
|
||||||
def scan_delete(taskid):
|
def scan_delete(taskid):
|
||||||
|
@ -315,12 +318,7 @@ def scan_log(taskid):
|
||||||
if taskid not in tasks:
|
if taskid not in tasks:
|
||||||
abort(500, "Invalid task ID")
|
abort(500, "Invalid task ID")
|
||||||
|
|
||||||
LOGGER_OUTPUT.seek(0)
|
return jsonize({"log": base64unpickle(os.read(pipes[taskid][0], 100000))})
|
||||||
output = LOGGER_OUTPUT.read()
|
|
||||||
LOGGER_OUTPUT.flush()
|
|
||||||
LOGGER_OUTPUT.truncate(0)
|
|
||||||
|
|
||||||
return jsonize({"log": output})
|
|
||||||
|
|
||||||
# Function to handle files inside the output directory
|
# Function to handle files inside the output directory
|
||||||
@get("/download/<taskid>/<target>/<filename:path>")
|
@get("/download/<taskid>/<target>/<filename:path>")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user