Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b9f6fc5

Browse files
committed
First commit (and working one) for an Issue #287 (XML-RPC server)
1 parent b5884c7 commit b9f6fc5

4 files changed

Lines changed: 66 additions & 9 deletions

File tree

_sqlmap.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
from lib.core.testing import smokeTest
3737
from lib.core.testing import liveTest
3838
from lib.parse.cmdline import cmdLineParser
39+
from lib.utils.xmlrpc import XMLRPCServer
3940

4041
def modulePath():
4142
"""
@@ -61,16 +62,20 @@ def main():
6162
# Store original command line options for possible later restoration
6263
cmdLineOptions.update(cmdLineParser().__dict__)
6364

64-
init(cmdLineOptions)
65-
66-
if conf.profile:
67-
profile()
68-
elif conf.smokeTest:
69-
smokeTest()
70-
elif conf.liveTest:
71-
liveTest()
65+
if cmdLineOptions.xmlRpc:
66+
server = XMLRPCServer()
67+
server.serve()
7268
else:
73-
start()
69+
init(cmdLineOptions)
70+
71+
if conf.profile:
72+
profile()
73+
elif conf.smokeTest:
74+
smokeTest()
75+
elif conf.liveTest:
76+
liveTest()
77+
else:
78+
start()
7479

7580
except SqlmapUserQuitException:
7681
errMsg = "user quit"

lib/core/settings.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,9 @@
482482
# Number of rows to generate inside the full union test for limited output (mustn't be too large to prevent payload length problems)
483483
LIMITED_ROWS_TEST_NUMBER = 15
484484

485+
# Default TCP port used for XML-RPC server instance
486+
XML_RPC_SERVER_PORT = 8776
487+
485488
# Regular expression for SOAP-like POST data
486489
SOAP_RECOGNITION_REGEX = r"(?s)\A(<\?xml[^>]+>)?\s*<([^> ]+)( [^>]+)?>.+</\2.*>\s*\Z"
487490

lib/parse/cmdline.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,9 @@ def cmdLineParser():
682682
parser.add_option("--run-case", dest="runCase", type="int",
683683
help=SUPPRESS_HELP)
684684

685+
parser.add_option("--xmlrpc", dest="xmlRpc", action="store_true",
686+
help=SUPPRESS_HELP)
687+
685688
parser.add_option_group(target)
686689
parser.add_option_group(request)
687690
parser.add_option_group(optimization)

lib/utils/xmlrpc.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#!/usr/bin/env python
2+
3+
"""
4+
Copyright (c) 2006-2012 sqlmap developers (http://sqlmap.org/)
5+
See the file 'doc/COPYING' for copying permission
6+
"""
7+
8+
from SimpleXMLRPCServer import SimpleXMLRPCServer
9+
10+
from lib.controller.controller import start
11+
from lib.core.datatype import AttribDict
12+
from lib.core.data import cmdLineOptions
13+
from lib.core.data import logger
14+
from lib.core.option import init
15+
from lib.core.settings import XML_RPC_SERVER_PORT
16+
from lib.core.settings import UNICODE_ENCODING
17+
18+
class XMLRPCServer:
19+
def __init__(self):
20+
self.reset()
21+
22+
def reset(self):
23+
self.options = AttribDict(cmdLineOptions)
24+
25+
def set_option(self, name, value):
26+
self.options[name] = value
27+
28+
def get_option(self, name):
29+
return self.options[name]
30+
31+
def get_option_names(self):
32+
return self.options.keys()
33+
34+
def run(self):
35+
init(self.options, True)
36+
return start()
37+
38+
def serve(self):
39+
server = SimpleXMLRPCServer(addr=("", XML_RPC_SERVER_PORT), logRequests=False, allow_none=True, encoding=UNICODE_ENCODING)
40+
server.register_introspection_functions()
41+
server.register_function(self.reset)
42+
server.register_function(self.set_option)
43+
server.register_function(self.get_option)
44+
server.register_function(self.get_option_names)
45+
server.register_function(self.run)
46+
server.serve_forever()

0 commit comments

Comments
 (0)