Skip to content

Commit d1204be

Browse files
committed
refact handlers
1 parent 608ed09 commit d1204be

File tree

6 files changed

+115
-123
lines changed

6 files changed

+115
-123
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@ don't use python2 any more please.
1010
![screenshot](https://github.com/needle-wang/sqlmap-gtk/blob/master/screenshots/sqlmap-ui1.png)
1111

1212
#### HOW-TO
13-
1. **pre-request**
13+
1. **Prerequisites**
1414
- *python3.6+, GTK+3.20 above*(linux has contained)
1515
- pygobject: (choose one)
1616
- `apt-get install python3-gi`(suggestion)
1717
- `pip3 install PyGObject`
1818
- requests: `pip3 install requests`
1919
- lastest [sqlmap](https://github.com/sqlmapproject/sqlmap): `git clone` it.
20-
2. **download**
20+
2. **Download**
2121
- `git clone https://github.com/needle-wang/sqlmap-gtk.git`
22-
3. **run**
22+
3. **Run**
2323
- `./sqlmap_gtk.py`
2424

2525
#### FUNCTION

handlers.py

Lines changed: 69 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,16 @@
33
# 2018-08-29 15:34:10
44

55
import time
6-
from os import environ, name as OS_NAME
6+
from os import environ
77
from pathlib import Path
8+
from shlex import quote
89
from urllib.parse import urlparse
910

1011
from widgets import (g, GLib, Vte)
1112
from handler_api import Api
1213
# from basis_and_tool.logging_needle import get_console_logger
1314
# logger = get_console_logger()
1415

15-
IS_POSIX = True if OS_NAME == 'posix' else False
16-
QUOTE = "'%s'" if OS_NAME == 'posix' else '"%s"' # for win, legacy
17-
1816

1917
class Handler(object):
2018
def __init__(self, window, m):
@@ -29,32 +27,26 @@ def __init__(self, window, m):
2927
self.api = Api(window, m)
3028

3129
def build_all(self, button):
32-
_opts_list = self._collect_opts()
33-
34-
_opts_list = ''.join(_opts_list)
35-
# print(_opts_list)
36-
if _opts_list is not None:
37-
self.m._cmd_entry.set_text(_opts_list.strip())
38-
# self.m._cmd_entry.grab_focus()
30+
_ = self._collect_opts()
31+
_ = ' '.join(_).strip()
32+
# print(_)
33+
self.m._cmd_entry.set_text(_)
34+
# self.m._cmd_entry.grab_focus()
3935

4036
def run_cmdline(self, button):
41-
'''
42-
won't work at win.
43-
'''
4437
sqlmap_path = self.get_sqlmap_path()
4538
_target = self._get_target()
4639
_sqlmap_opts = self.m._cmd_entry.get_text().strip()
4740

48-
if IS_POSIX:
49-
self.w.main_notebook.next_page()
50-
_cmdline_str = '%s %s %s\n' % (sqlmap_path, _target, _sqlmap_opts)
51-
# print(_cmdline_str, len(_cmdline_str.encode('utf8')))
52-
if Vte.MAJOR_VERSION >= 0 and Vte.MINOR_VERSION > 52:
53-
self.m._page2_terminal.feed_child_binary(_cmdline_str.encode('utf8'))
54-
else:
55-
# old version Vte's api
56-
self.m._page2_terminal.feed_child(_cmdline_str, len(_cmdline_str.encode('utf8')))
57-
self.m._page2_terminal.grab_focus()
41+
self.w.main_notebook.next_page()
42+
_cmdline_str = '%s %s %s\n' % (sqlmap_path, _target, _sqlmap_opts)
43+
# print(_cmdline_str, len(_cmdline_str.encode('utf8')))
44+
if Vte.MAJOR_VERSION >= 0 and Vte.MINOR_VERSION > 52:
45+
self.m._page2_terminal.feed_child_binary(_cmdline_str.encode('utf8'))
46+
else:
47+
# old version Vte's api
48+
self.m._page2_terminal.feed_child(_cmdline_str, len(_cmdline_str.encode('utf8')))
49+
self.m._page2_terminal.grab_focus()
5850

5951
def respawn_terminal(self, button):
6052
'''
@@ -187,19 +179,17 @@ def read_dumped_file(self, button):
187179
def _get_target(self):
188180
m = self.m
189181
_current_pagenum = self.w._target_notebook.get_current_page()
190-
_target_list = [("-u ", m._url_combobox.get_child().get_text),
191-
("-l ", m._burp_logfile.get_text),
192-
("-r ", m._request_file.get_text),
193-
("-m ", m._bulkfile.get_text),
194-
("-c ", m._configfile.get_text),
195-
("-g ", m._google_dork.get_text),
196-
("-d ", m._direct_connect.get_text)]
197-
198-
_target_tmp = _target_list[_current_pagenum][1]().strip()
199-
if _target_tmp:
200-
return _target_list[_current_pagenum][0] + QUOTE % _target_tmp
201-
else:
202-
return ''
182+
_target_list = [("-u", m._url_combobox.get_child().get_text),
183+
("-l", m._burp_logfile.get_text),
184+
("-r", m._request_file.get_text),
185+
("-m", m._bulkfile.get_text),
186+
("-c", m._configfile.get_text),
187+
("-g", m._google_dork.get_text),
188+
("-d", m._direct_connect.get_text)]
189+
190+
_ = _target_list[_current_pagenum][1]().strip()
191+
if _:
192+
return "{} {}".format(_target_list[_current_pagenum][0], quote(_))
203193

204194
def _collect_opts(self):
205195
m = self.m
@@ -295,7 +285,7 @@ def _collect_opts(self):
295285
m._page1_general_eta_ckbtn),
296286
self._get_text_from_entry("--gpage=",
297287
m._page1_misc_gpage_ckbtn,
298-
m._page1_misc_gpage_spinbtn, None),
288+
m._page1_misc_gpage_spinbtn),
299289
self._get_text_only_ckbtn("--beep",
300290
m._page1_misc_beep_ckbtn),
301291
self._get_text_only_ckbtn("--offline",
@@ -418,10 +408,10 @@ def _collect_opts(self):
418408
m._dump_area_dump_all_ckbtn),
419409
self._get_text_from_entry("--start=",
420410
m._limit_area_start_ckbtn,
421-
m._limit_area_start_entry, None),
411+
m._limit_area_start_entry),
422412
self._get_text_from_entry("--stop=",
423413
m._limit_area_stop_ckbtn,
424-
m._limit_area_stop_entry, None),
414+
m._limit_area_stop_entry),
425415
self._get_text_from_entry("--first=",
426416
m._blind_area_first_ckbtn,
427417
m._blind_area_first_entry),
@@ -487,7 +477,7 @@ def _collect_opts(self):
487477
m._request_area_headers_entry),
488478
self._get_text_from_entry("--method=",
489479
m._request_area_method_ckbtn,
490-
m._request_area_method_entry, None),
480+
m._request_area_method_entry),
491481
self._get_text_from_entry("--param-del=",
492482
m._request_area_param_del_ckbtn,
493483
m._request_area_param_del_entry),
@@ -537,7 +527,7 @@ def _collect_opts(self):
537527
m._request_area_ignore_redirects_ckbtn),
538528
self._get_text_from_entry("--ignore-code=",
539529
m._request_area_ignore_code_ckbtn,
540-
m._request_area_ignore_code_entry, None),
530+
m._request_area_ignore_code_entry),
541531
self._get_text_only_ckbtn("--skip-urlencode",
542532
m._request_area_skip_urlencode_ckbtn),
543533
self._get_text_only_ckbtn("--force-ssl",
@@ -546,13 +536,13 @@ def _collect_opts(self):
546536
m._request_area_hpp_ckbtn),
547537
self._get_text_from_entry("--delay=",
548538
m._request_area_delay_ckbtn,
549-
m._request_area_delay_entry, None),
539+
m._request_area_delay_entry),
550540
self._get_text_from_entry("--timeout=",
551541
m._request_area_timeout_ckbtn,
552-
m._request_area_timeout_entry, None),
542+
m._request_area_timeout_entry),
553543
self._get_text_from_entry("--retries=",
554544
m._request_area_retries_ckbtn,
555-
m._request_area_retries_entry, None),
545+
m._request_area_retries_entry),
556546
self._get_text_from_entry("--randomize=",
557547
m._request_area_randomize_ckbtn,
558548
m._request_area_randomize_entry),
@@ -573,8 +563,8 @@ def _collect_opts(self):
573563
m._request_area_safe_freq_entry),
574564
self._get_text_only_ckbtn("--ignore-proxy",
575565
m._request_area_ignore_proxy_ckbtn),
576-
self._get_http_proxy(),
577-
self._get_http_proxy_cred(),
566+
self._get_http_proxy('--proxy='),
567+
self._get_http_proxy_cred('--proxy-cred='),
578568
self._get_text_from_entry("--proxy-freq=",
579569
m._request_area_proxy_freq_ckbtn,
580570
m._request_area_proxy_freq_entry),
@@ -650,7 +640,7 @@ def _collect_opts(self):
650640
m._detection_area_re_entry),
651641
self._get_text_from_entry("--code=",
652642
m._detection_area_code_ckbtn,
653-
m._detection_area_code_entry, None),
643+
m._detection_area_code_entry),
654644
self._get_text_only_ckbtn("--text-only",
655645
m._detection_area_text_only_ckbtn),
656646
self._get_text_only_ckbtn("--titles",
@@ -659,13 +649,13 @@ def _collect_opts(self):
659649
m._detection_area_smart_ckbtn),
660650
self._get_text_from_entry("--technique=",
661651
m._tech_area_tech_ckbtn,
662-
m._tech_area_tech_entry, None),
652+
m._tech_area_tech_entry),
663653
self._get_text_from_entry("--time-sec=",
664654
m._tech_area_time_sec_ckbtn,
665-
m._tech_area_time_sec_entry, None),
655+
m._tech_area_time_sec_entry),
666656
self._get_text_from_entry("--union-cols=",
667657
m._tech_area_union_col_ckbtn,
668-
m._tech_area_union_col_entry, None),
658+
m._tech_area_union_col_entry),
669659
self._get_text_from_entry("--union-char=",
670660
m._tech_area_union_char_ckbtn,
671661
m._tech_area_union_char_entry),
@@ -685,7 +675,7 @@ def _collect_opts(self):
685675
m._optimize_area_turn_all_ckbtn),
686676
self._get_text_from_entry("--threads=",
687677
m._optimize_area_thread_num_ckbtn,
688-
m._optimize_area_thread_num_spinbtn, None),
678+
m._optimize_area_thread_num_spinbtn),
689679
self._get_text_only_ckbtn("--predict-output",
690680
m._optimize_area_predict_ckbtn),
691681
self._get_text_only_ckbtn("--keep-alive",
@@ -703,7 +693,8 @@ def _collect_opts(self):
703693
m._general_area_batch_ckbtn),
704694
self._get_text_only_ckbtn("--wizard",
705695
m._page1_misc_wizard_ckbtn),
706-
self._get_tampers(),
696+
self._get_tampers('--tamper=',
697+
m._tamper_area_tamper_view),
707698
self._get_text_only_ckbtn("--crack",
708699
m._hidden_area_crack_ckbtn),
709700
self._get_text_only_ckbtn("--debug",
@@ -741,89 +732,55 @@ def _collect_opts(self):
741732
self._get_text_only_ckbtn("--database",
742733
m._hidden_area_database_ckbtn),
743734
]
744-
745-
return (_setting_opts
746-
+ _request_opts
747-
+ _enumeration_opts
748-
+ _file_opts
749-
+ _other_opts)
750-
751-
def _get_http_proxy_cred(self):
735+
# https://stackoverflow.com/questions/3845423/remove-empty-strings-from-a-list-of-strings
736+
return filter(None, (_setting_opts
737+
+ _request_opts
738+
+ _enumeration_opts
739+
+ _file_opts
740+
+ _other_opts))
741+
742+
def _get_http_proxy_cred(self, opt_str):
752743
m = self.m
753744
_use_proxy = m._request_area_proxy_ckbtn.get_active()
754745
_username = m._request_area_proxy_username_entry.get_text()
755746
_pass = m._request_area_proxy_password_entry.get_text()
756747

757748
if all((_use_proxy, _username, _pass)) :
758-
return ''.join((" --proxy-cred=", QUOTE % '{}:{}'.format(_username, _pass)))
759-
return ''
749+
return '{}{}:{}'.format(opt_str, _username, _pass)
760750

761-
def _get_http_proxy(self):
751+
def _get_http_proxy(self, opt_str):
762752
m = self.m
763753
_use_proxy = m._request_area_proxy_ckbtn.get_active()
764754
_ip = m._request_area_proxy_ip_entry.get_text().strip()
765755
_port = m._request_area_proxy_port_entry.get_text()
766756

767757
if _use_proxy and _ip:
768758
if _port:
769-
return "".join((" --proxy=", QUOTE % '{}:{}'.format(_ip, _port)))
770-
else:
771-
return "".join((" --proxy=", QUOTE % _ip))
772-
return ''
759+
_port = ':%s' % _port
760+
return "{}{}{}".format(opt_str, _ip, _port)
773761

774-
def _get_tampers(self):
775-
_tamper_textbuffer = self.m._tamper_area_tamper_view.get_buffer()
776-
_tampers = ''
762+
def _get_tampers(self, opt_str, textview):
763+
_tamper_textbuffer = textview.get_buffer()
777764

778765
_start = _tamper_textbuffer.get_start_iter()
779766
_end = _tamper_textbuffer.get_end_iter()
780-
for _tamper_tmp in _tamper_textbuffer.get_text(_start, _end, False).splitlines():
781-
if _tamper_tmp.strip():
782-
_tampers = _tampers + _tamper_tmp.strip() + ','
783-
784-
if _tampers:
785-
return " --tamper=" + QUOTE % _tampers.rstrip(',')
786-
return ''
767+
_ = _tamper_textbuffer.get_text(_start, _end, False)
768+
_ = ','.join(_.split())
769+
if _:
770+
return "{}{}".format(opt_str, quote(_))
787771

788772
def _get_text_from_scale(self, opt_str, ckbtn, scale):
789773
if ckbtn.get_active():
790-
return ''.join((' ', opt_str, str(int(scale.get_value()))))
791-
return ''
774+
return "{}{}".format(opt_str, int(scale.get_value()))
792775

793776
def _get_text_only_ckbtn(self, opt_str, ckbtn):
794777
if ckbtn.get_active():
795-
return ''.join((' ', opt_str))
796-
return ''
797-
798-
def _get_text_from_entry(self, opt_str, ckbtn, entry, quote = QUOTE):
799-
_entry_str = entry.get_text().strip()
800-
if ckbtn.get_active() and _entry_str:
801-
802-
if quote:
803-
return ''.join((' ',
804-
opt_str,
805-
quote % self._escape_quote_in_QUOTE(_entry_str)))
806-
else:
807-
return ''.join((' ',
808-
opt_str,
809-
self._escape_quote(_entry_str)))
810-
return ''
811-
812-
def _escape_quote_in_QUOTE(self, widget_text):
813-
'''
814-
注意bash中, 双单引号内无法使用'(即无法转义)
815-
'''
816-
if widget_text:
817-
if IS_POSIX:
818-
return widget_text.replace("'", r"'\''")
819-
else:
820-
return widget_text.replace('"', r"\"")
821-
return widget_text
822-
823-
def _escape_quote(self, widget_text):
824-
if widget_text:
825-
return widget_text.replace("'", r"\'").replace('"', r'\"')
826-
return widget_text
778+
return opt_str
779+
780+
def _get_text_from_entry(self, opt_str, ckbtn, entry):
781+
_ = entry.get_text().strip()
782+
if ckbtn.get_active() and _:
783+
return '{}{}'.format(opt_str, quote(_))
827784

828785

829786
def main():

model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,13 +181,13 @@ def __init__(self, language):
181181
self._request_area_cookie_entry = et()
182182
self._request_area_cookie_del_ckbtn = cb(_('--cookie-del'))
183183
self._request_area_cookie_del_entry = et(width_chars = 5)
184+
self._request_area_drop_set_cookie_ckbtn = cb(_('--drop-set-cookie'))
184185
self._request_area_live_cookies_ckbtn = cb(_('--live-cookies'))
185186
self._request_area_live_cookies_entry = FileEntry()
186187
self._request_area_live_cookies_chooser = btn.new_with_label(_('open'))
187188
self._request_area_load_cookies_ckbtn = cb(_('--load-Cookies'))
188189
self._request_area_load_cookies_entry = FileEntry()
189190
self._request_area_load_cookies_chooser = btn.new_with_label(_('open'))
190-
self._request_area_drop_set_cookie_ckbtn = cb(_('--drop-set-cookie'))
191191
self._request_area_auth_type_ckbtn = cb(_('--auth-type'))
192192
self._request_area_auth_type_entry = et()
193193
self._request_area_auth_cred_ckbtn = cb(_('--auth-cred'))

0 commit comments

Comments
 (0)