From 562044577b345847ec9c0fd8685260476015d608 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Tue, 11 Dec 2012 12:02:06 +0100 Subject: [PATCH] Implementation for an Issue #292 --- extra/beep/__init__.py | 8 ++++ extra/beep/beep.py | 92 ++++++++++++++++++++++++++++++++++++ extra/beep/beep.wav | Bin 0 -> 46772 bytes lib/controller/checks.py | 2 +- lib/core/common.py | 44 ----------------- lib/core/optiondict.py | 1 + lib/core/testing.py | 2 +- lib/parse/cmdline.py | 6 +-- lib/techniques/error/use.py | 2 +- sqlmap.conf | 6 +++ 10 files changed, 113 insertions(+), 50 deletions(-) create mode 100755 extra/beep/__init__.py create mode 100644 extra/beep/beep.py create mode 100644 extra/beep/beep.wav diff --git a/extra/beep/__init__.py b/extra/beep/__init__.py new file mode 100755 index 000000000..72630d2e8 --- /dev/null +++ b/extra/beep/__init__.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +""" +Copyright (c) 2006-2012 sqlmap developers (http://sqlmap.org/) +See the file 'doc/COPYING' for copying permission +""" + +pass diff --git a/extra/beep/beep.py b/extra/beep/beep.py new file mode 100644 index 000000000..668d6bb33 --- /dev/null +++ b/extra/beep/beep.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python + +""" +beep.py - Make a beep sound + +Copyright (c) 2006-2012 sqlmap developers (http://sqlmap.org/) +See the file 'doc/COPYING' for copying permission +""" + +import os +import subprocess +import sys +import wave + +BEEP_WAV_FILENAME = os.path.join(os.path.dirname(__file__), "beep.wav") + +def beep(): + try: + if subprocess.mswindows: + _win_wav_play(BEEP_WAV_FILENAME) + elif sys.platform == "darwin": + _mac_beep() + elif sys.platform == "linux2": + _linux_wav_play(BEEP_WAV_FILENAME) + else: + _speaker_beep() + except Exception: + _speaker_beep() + +def _speaker_beep(): + sys.stdout.write('\a') # doesn't work on modern Linux systems + + try: + sys.stdout.flush() + except IOError: + pass + +def _mac_beep(): + import Carbon.Snd + Carbon.Snd.SysBeep(1) + +def _win_wav_play(filename): + import winsound + + winsound.PlaySound(filename, winsound.SND_FILENAME) + +def _linux_wav_play(filename): + import ctypes + + PA_STREAM_PLAYBACK = 1 + PA_SAMPLE_S16LE = 3 + BUFFSIZE = 1024 + + class struct_pa_sample_spec(ctypes.Structure): + _fields_ = [("format", ctypes.c_int), ("rate", ctypes.c_uint32), ("channels", ctypes.c_uint8)] + + pa = ctypes.cdll.LoadLibrary("libpulse-simple.so.0") + + wave_file = wave.open(filename, "rb") + + pa_sample_spec = struct_pa_sample_spec() + pa_sample_spec.rate = wave_file.getframerate() + pa_sample_spec.channels = wave_file.getnchannels() + pa_sample_spec.format = PA_SAMPLE_S16LE + + error = ctypes.c_int(0) + + pa_stream = pa.pa_simple_new(None, filename, PA_STREAM_PLAYBACK, None, "playback", ctypes.byref(pa_sample_spec), None, None, ctypes.byref(error)) + if not pa_stream: + raise Exception("Could not create pulse audio stream: %s" % pa.strerror(ctypes.byref(error))) + + while True: + latency = pa.pa_simple_get_latency(pa_stream, error) + if latency == -1: + raise Exception("Getting latency failed") + + buf = wave_file.readframes(BUFFSIZE) + if not buf: + break + + if pa.pa_simple_write(pa_stream, buf, len(buf), error): + raise Exception("Could not play file") + + wave_file.close() + + if pa.pa_simple_drain(pa_stream, error): + raise Exception("Could not simple drain") + + pa.pa_simple_free(pa_stream) + +if __name__ == "__main__": + beep() diff --git a/extra/beep/beep.wav b/extra/beep/beep.wav new file mode 100644 index 0000000000000000000000000000000000000000..35903d8a853f081e9cbea64469bf1f986ab658e3 GIT binary patch literal 46772 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 literal 0 HcmV?d00001 diff --git a/lib/controller/checks.py b/lib/controller/checks.py index 4413d7543..6c3c8ba2e 100644 --- a/lib/controller/checks.py +++ b/lib/controller/checks.py @@ -12,10 +12,10 @@ import re import socket import time +from extra.beep.beep import beep from lib.core.agent import agent from lib.core.common import arrayizeValue from lib.core.common import Backend -from lib.core.common import beep from lib.core.common import extractRegexResult from lib.core.common import extractTextTagContent from lib.core.common import findDynamicContent diff --git a/lib/core/common.py b/lib/core/common.py index 850b7e405..76be24d68 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -2046,50 +2046,6 @@ def urlencode(value, safe="%&=", convall=False, limit=False): return result -def beep(): - """ - Does an audible beep sound - Reference: http://de3.aminet.net/dev/src/clr.py.txt - """ - - def _failsafe(): - dataToStdout('\a', True) - - if sys.platform == 'linux2': - for dev in ('/dev/audio', '/dev/oss', '/dev/dsp', '/dev/sound'): - if os.path.exists(dev): - try: - audio = file(dev, 'wb') - - for _ in xrange(250): - audio.write(chr(32) * 4) - audio.write(chr(0) * 4) - - audio.close() - return - except: - pass - - try: - import curses - curses.initscr() - curses.beep() - curses.flash() - curses.endwin() - return - except: - _failsafe() - - elif sys.platform == 'darwin': - try: - import Carbon.Snd - Carbon.Snd.SysBeep(1) - except: - _failsafe() - - else: - _failsafe() - def runningAsAdmin(): """ Returns True if the current process is run under admin privileges diff --git a/lib/core/optiondict.py b/lib/core/optiondict.py index 6dbecc5a7..fae83d2fe 100644 --- a/lib/core/optiondict.py +++ b/lib/core/optiondict.py @@ -192,6 +192,7 @@ optDict = { "Miscellaneous": { "mnemonics": "string", "answers": "string", + "beep": "boolean", "checkPayload": "boolean", "cleanup": "boolean", "dependencies": "boolean", diff --git a/lib/core/testing.py b/lib/core/testing.py index 66082fd73..05e83ffdc 100644 --- a/lib/core/testing.py +++ b/lib/core/testing.py @@ -13,8 +13,8 @@ import sys import tempfile import time +from extra.beep.beep import beep from lib.controller.controller import start -from lib.core.common import beep from lib.core.common import clearConsoleLine from lib.core.common import dataToStdout from lib.core.common import readXmlFile diff --git a/lib/parse/cmdline.py b/lib/parse/cmdline.py index 6737f7569..0d3e3f642 100644 --- a/lib/parse/cmdline.py +++ b/lib/parse/cmdline.py @@ -606,6 +606,9 @@ def cmdLineParser(): miscellaneous.add_option("--answers", dest="answers", help="Set question answers (e.g. \"quit=N,follow=N\")") + miscellaneous.add_option("--beep", dest="beep", action="store_true", + help="Make a beep sound when SQL injection is found") + miscellaneous.add_option("--check-payload", dest="checkPayload", action="store_true", help="Offline WAF/IPS/IDS payload detection testing") @@ -658,9 +661,6 @@ def cmdLineParser(): help="Simple wizard interface for beginner users") # Hidden and/or experimental options - parser.add_option("--beep", dest="beep", action="store_true", - help=SUPPRESS_HELP) - parser.add_option("--profile", dest="profile", action="store_true", help=SUPPRESS_HELP) diff --git a/lib/techniques/error/use.py b/lib/techniques/error/use.py index 3ab4efab1..af53494f0 100644 --- a/lib/techniques/error/use.py +++ b/lib/techniques/error/use.py @@ -107,7 +107,7 @@ def _oneShotErrorUse(expression, field=None): None) if output is not None: - output = getUnicode(output, kb.pageEncoding) + output = getUnicode(output) else: trimmed = extractRegexResult(trimcheck, page, re.DOTALL | re.IGNORECASE) \ or extractRegexResult(trimcheck, listToStrValue(headers.headers \ diff --git a/sqlmap.conf b/sqlmap.conf index bc6c82858..52ac36fb7 100644 --- a/sqlmap.conf +++ b/sqlmap.conf @@ -656,10 +656,16 @@ mnemonics = # Set question answers (e.g. "quit=N,follow=N") answers = +# Make a beep sound when SQL injection is found +# Valid: True or False +beep = False + # Offline WAF/IPS/IDS payload detection testing. +# Valid: True or False checkPayload = False # Check for existence of WAF/IPS/IDS protection. +# Valid: True or False checkWaf = False # Clean up the DBMS by sqlmap specific UDF and tables.