diff --git a/data/html/index.html b/data/html/index.html
deleted file mode 100644
index 576f2763b..000000000
--- a/data/html/index.html
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
-
-
-
-
- DEMO
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/txt/sha256sums.txt b/data/txt/sha256sums.txt
index 31cdb6e8d..b245cd729 100644
--- a/data/txt/sha256sums.txt
+++ b/data/txt/sha256sums.txt
@@ -1,4 +1,3 @@
-39a8a35d730f49daf657fa58903a9cd309813b275df29a86439297a10a15261a data/html/index.html
e70317eb90f7d649e4320e59b2791b8eb5810c8cad8bc0c49d917eac966b0f18 data/procs/mssqlserver/activate_sp_oacreate.sql
6a2de9f090c06bd77824e15ac01d2dc11637290cf9a5d60c00bf5f42ac6f7120 data/procs/mssqlserver/configure_openrowset.sql
798f74471b19be1e6b1688846631b2e397c1a923ad8eca923c1ac93fc94739ad data/procs/mssqlserver/configure_xp_cmdshell.sql
@@ -189,7 +188,7 @@ a033f92d136c707a25927c2383125ddb004d4283db62c004dcd67c3fc242bb1c lib/core/dump.
48797d6c34dd9bb8a53f7f3794c85f4288d82a9a1d6be7fcf317d388cb20d4b3 lib/core/replication.py
0b8c38a01bb01f843d94a6c5f2075ee47520d0c4aa799cecea9c3e2c5a4a23a6 lib/core/revision.py
888daba83fd4a34e9503fe21f01fef4cc730e5cde871b1d40e15d4cbc847d56c lib/core/session.py
-d6577e20ed58d058dcde4341010e3ea26240cc959185ce9471eda0fab17a21cf lib/core/settings.py
+2259cd254a49009d258ba1aee0e6b3e07792264992cac11779767ef89915b59e lib/core/settings.py
cd5a66deee8963ba8e7e9af3dd36eb5e8127d4d68698811c29e789655f507f82 lib/core/shell.py
bcb5d8090d5e3e0ef2a586ba09ba80eef0c6d51feb0f611ed25299fbb254f725 lib/core/subprocessng.py
d35650179816193164a5f177102f18379dfbe6bb6d40fbb67b78d907b41c8038 lib/core/target.py
@@ -251,7 +250,6 @@ a94958be0ec3e9d28d8171813a6a90655a9ad7e6aa33c661e8d8ebbfcf208dbb lib/utils/deps
366e6fd5356fae7e3f2467c070d064b6695be80b50f1530ea3c01e86569b58b2 lib/utils/har.py
ca82ddc36d660c479bb47201182f47411b1f75a847a556229987f2d005fc5832 lib/utils/hashdb.py
84bf572a9e7915e91dbffea996e1a7b749392725f1ad7f412d0ff48c636a2896 lib/utils/hash.py
-dc68b7fdb2ae0e958f2a553984a94a06832d216a3209f632ad9ff53f17554524 lib/utils/httpd.py
1966ca704961fb987ab757f0a4afddbf841d1a880631b701487c75cef63d60c3 lib/utils/__init__.py
22ba65391b0a73b1925e5becf8ddab6ba73a196d86e351a2263509aad6676bd7 lib/utils/pivotdumptable.py
c1dfc3bed0fed9b181f612d1d747955dd2b506dbe99bc9fd481495602371473a lib/utils/progress.py
diff --git a/lib/core/settings.py b/lib/core/settings.py
index 6927ca342..e3b1eeb97 100644
--- a/lib/core/settings.py
+++ b/lib/core/settings.py
@@ -19,7 +19,7 @@ from lib.core.enums import OS
from thirdparty import six
# sqlmap version (...)
-VERSION = "1.10.1.60"
+VERSION = "1.10.1.61"
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)
diff --git a/lib/utils/httpd.py b/lib/utils/httpd.py
deleted file mode 100644
index bdd9646ba..000000000
--- a/lib/utils/httpd.py
+++ /dev/null
@@ -1,141 +0,0 @@
-#!/usr/bin/env python
-
-"""
-Copyright (c) 2006-2026 sqlmap developers (https://sqlmap.org)
-See the file 'LICENSE' for copying permission
-"""
-
-from __future__ import print_function
-
-import mimetypes
-import gzip
-import os
-import re
-import sys
-import threading
-import time
-import traceback
-
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")))
-
-from lib.core.enums import HTTP_HEADER
-from lib.core.settings import UNICODE_ENCODING
-from lib.core.settings import VERSION_STRING
-from thirdparty import six
-from thirdparty.six.moves import BaseHTTPServer as _BaseHTTPServer
-from thirdparty.six.moves import http_client as _http_client
-from thirdparty.six.moves import socketserver as _socketserver
-from thirdparty.six.moves import urllib as _urllib
-
-HTTP_ADDRESS = "0.0.0.0"
-HTTP_PORT = 8951
-DEBUG = True
-HTML_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "data", "html"))
-DISABLED_CONTENT_EXTENSIONS = (".py", ".pyc", ".md", ".txt", ".bak", ".conf", ".zip", "~")
-
-class ThreadingServer(_socketserver.ThreadingMixIn, _BaseHTTPServer.HTTPServer):
- def finish_request(self, *args, **kwargs):
- try:
- _BaseHTTPServer.HTTPServer.finish_request(self, *args, **kwargs)
- except Exception:
- if DEBUG:
- traceback.print_exc()
-
-class ReqHandler(_BaseHTTPServer.BaseHTTPRequestHandler):
- def do_GET(self):
- path, query = self.path.split('?', 1) if '?' in self.path else (self.path, "")
- params = {}
- content = None
-
- if query:
- params.update(_urllib.parse.parse_qs(query))
-
- for key in params:
- if params[key]:
- params[key] = params[key][-1]
-
- self.url, self.params = path, params
-
- if path == '/':
- path = "index.html"
-
- path = path.strip('/')
-
- path = path.replace('/', os.path.sep)
- path = os.path.abspath(os.path.join(HTML_DIR, path)).strip()
-
- if not os.path.isfile(path) and os.path.isfile("%s.html" % path):
- path = "%s.html" % path
-
- if ".." not in os.path.relpath(path, HTML_DIR) and os.path.isfile(path) and not path.endswith(DISABLED_CONTENT_EXTENSIONS):
- content = open(path, "rb").read()
- self.send_response(_http_client.OK)
- self.send_header(HTTP_HEADER.CONNECTION, "close")
- self.send_header(HTTP_HEADER.CONTENT_TYPE, mimetypes.guess_type(path)[0] or "application/octet-stream")
- else:
- content = ("404 Not FoundNot Found
The requested URL %s was not found on this server.
" % self.path.split('?')[0]).encode(UNICODE_ENCODING)
- self.send_response(_http_client.NOT_FOUND)
- self.send_header(HTTP_HEADER.CONNECTION, "close")
-
- if content is not None:
- for match in re.finditer(b"", content):
- name = match.group(1)
- _ = getattr(self, "_%s" % name.lower(), None)
- if _:
- content = self._format(content, **{name: _()})
-
- if "gzip" in self.headers.get(HTTP_HEADER.ACCEPT_ENCODING):
- self.send_header(HTTP_HEADER.CONTENT_ENCODING, "gzip")
- _ = six.BytesIO()
- compress = gzip.GzipFile("", "w+b", 9, _)
- compress._stream = _
- compress.write(content)
- compress.flush()
- compress.close()
- content = compress._stream.getvalue()
-
- self.send_header(HTTP_HEADER.CONTENT_LENGTH, str(len(content)))
-
- self.end_headers()
-
- if content:
- self.wfile.write(content)
-
- self.wfile.flush()
-
- def _format(self, content, **params):
- if content:
- for key, value in params.items():
- content = content.replace("" % key, value)
-
- return content
-
- def version_string(self):
- return VERSION_STRING
-
- def log_message(self, format, *args):
- return
-
- def finish(self):
- try:
- _BaseHTTPServer.BaseHTTPRequestHandler.finish(self)
- except Exception:
- if DEBUG:
- traceback.print_exc()
-
-def start_httpd():
- server = ThreadingServer((HTTP_ADDRESS, HTTP_PORT), ReqHandler)
- thread = threading.Thread(target=server.serve_forever)
- thread.daemon = True
- thread.start()
-
- print("[i] running HTTP server at '%s:%d'" % (HTTP_ADDRESS, HTTP_PORT))
-
-if __name__ == "__main__":
- try:
- start_httpd()
-
- while True:
- time.sleep(1)
- except KeyboardInterrupt:
- pass