mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2025-12-06 04:31:30 +00:00
Compare commits
7 Commits
f95b85194b
...
1.9.10
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5df4c29158 | ||
|
|
71a12bff64 | ||
|
|
f7aa757a9f | ||
|
|
f79e774d31 | ||
|
|
e87521de11 | ||
|
|
43af5008b1 | ||
|
|
cceda39208 |
@@ -488,6 +488,44 @@ pma_relation
|
||||
pma_table_coords
|
||||
pma_table_info
|
||||
|
||||
# Wordpress
|
||||
wp_users
|
||||
wp_posts
|
||||
wp_comments
|
||||
wp_options
|
||||
wp_postmeta
|
||||
wp_terms
|
||||
wp_term_taxonomy
|
||||
wp_term_relationships
|
||||
wp_links
|
||||
wp_commentmeta
|
||||
|
||||
# WooCommerce
|
||||
wp_woocommerce_sessions
|
||||
wp_woocommerce_api_keys
|
||||
wp_woocommerce_attribute_taxonomies
|
||||
|
||||
# Magento
|
||||
catalog_product_entity
|
||||
sales_order
|
||||
sales_order_item
|
||||
customer_entity
|
||||
quote
|
||||
|
||||
# Drupal
|
||||
node
|
||||
users
|
||||
field_data_body
|
||||
field_revision_body
|
||||
taxonomy_term_data
|
||||
taxonomy_vocabulary
|
||||
|
||||
# Joomla
|
||||
joomla_users
|
||||
joomla_content
|
||||
joomla_categories
|
||||
joomla_modules
|
||||
|
||||
# PostgreSQL
|
||||
pg_aggregate
|
||||
pg_am
|
||||
@@ -501,6 +539,8 @@ pg_cast
|
||||
pg_class
|
||||
pg_constraint
|
||||
pg_conversion
|
||||
pg_cron_job
|
||||
pg_cron_job_run_detail
|
||||
pg_database
|
||||
pg_depend
|
||||
pg_description
|
||||
@@ -522,6 +562,7 @@ pg_rewrite
|
||||
pg_shdepend
|
||||
pg_shdescription
|
||||
pg_statistic
|
||||
pg_stat_statements
|
||||
pg_tablespace
|
||||
pg_trigger
|
||||
pg_ts_config
|
||||
@@ -1194,3 +1235,21 @@ smallint
|
||||
text
|
||||
time
|
||||
timestamp
|
||||
|
||||
# common columns
|
||||
created_at
|
||||
updated_at
|
||||
deleted_at
|
||||
created_on
|
||||
modified_on
|
||||
timestamp
|
||||
is_active
|
||||
is_deleted
|
||||
is_published
|
||||
status
|
||||
enabled
|
||||
user_id
|
||||
product_id
|
||||
category_id
|
||||
order_id
|
||||
customer_id
|
||||
|
||||
@@ -24,11 +24,11 @@ f2648a0cb4d5922d58b8aa6600f786b32324b9ac91e3a57e4ff212e901ffe151 data/shell/sta
|
||||
84b431647a2c13e72b2c9c9242a578349d1b8eef596166128e08f1056d7e4ac8 data/shell/stagers/stager.php_
|
||||
26e2a6d6154cbcef1410a6826169463129380f70a840f848dce4236b686efb23 data/txt/common-columns.txt
|
||||
22cda9937e1801f15370e7cb784797f06c9c86ad8a97db19e732ae76671c7f37 data/txt/common-files.txt
|
||||
a166b1958937364968a25e4bc64074c1ac12358443e58b1bf2ac3d8d88b48a30 data/txt/common-outputs.txt
|
||||
30b3eecf7beb4ebbfdb3aadbd7d7d2ad2a477f07753e5ed1de940693c8b145dc data/txt/common-outputs.txt
|
||||
7953f5967da237115739ee0f0fe8b0ecec7cdac4830770acb8238e6570422a28 data/txt/common-tables.txt
|
||||
b023d7207e5e96a27696ec7ea1d32f9de59f1a269fde7672a8509cb3f0909cd3 data/txt/keywords.txt
|
||||
29a0a6a2c2d94e44899e867590bae865bdf97ba17484c649002d1d8faaf3e127 data/txt/smalldict.txt
|
||||
df66c8fdb08cc0eee63b86505bc5b05bc4cad5d0bef6553d5c20346e7202dc2b data/txt/user-agents.txt
|
||||
aaf6be92d51eb502ba11136c7a010872b17c4df59007fc6de78ae665fe66ee5f data/txt/user-agents.txt
|
||||
9c2d6a0e96176447ab8758f8de96e6a681aa0c074cd0eca497712246d8f410c6 data/txt/wordlist.tx_
|
||||
849c61612bd0d773971254df2cc76cc18b3d2db4051a8f508643278a166df44e data/udf/mysql/linux/32/lib_mysqludf_sys.so_
|
||||
20b5a80b8044da1a0d5c5343c6cbc5b71947c5464e088af466a3fcd89c2881ef data/udf/mysql/linux/64/lib_mysqludf_sys.so_
|
||||
@@ -110,7 +110,7 @@ b9017db1f0167dda23780949b4d618baf877375dc14e08ebd6983331b945ed44 doc/translatio
|
||||
070cc897789e98f144a6b6b166d11289b3cda4d871273d2afe0ab81ac7ae90ad doc/translations/README-rs-RS.md
|
||||
927743c0a1f68dc76969bda49b36a6146f756b907896078af2a99c3340d6cc34 doc/translations/README-ru-RU.md
|
||||
65de5053b014b0e0b9ab5ab68fe545a7f9db9329fa0645a9973e457438b4fde5 doc/translations/README-sk-SK.md
|
||||
43de61a9defc5eda42a6c3d746f422b43f486eacefb97862f637ab60650e9ef2 doc/translations/README-tr-TR.md
|
||||
a101a1d68362adbf6a82bf66be55a3bef4b6dc8a8855f363a284c71b2ec4e144 doc/translations/README-tr-TR.md
|
||||
0db2d479b1512c948a78ce5c1cf87b5ce0b5b94e3cb16b19e9afcbed2c7f5cae doc/translations/README-uk-UA.md
|
||||
82f9ec2cf2392163e694c99efa79c459a44b6213a5881887777db8228ea230fa doc/translations/README-vi-VN.md
|
||||
0e8f0a2186f90fabd721072972c571a7e5664496d88d6db8aedcb1d0e34c91f0 doc/translations/README-zh-CN.md
|
||||
@@ -171,13 +171,13 @@ d53a8aecab8af8b8da4dc1c74d868f70a38770d34b1fa50cae4532cae7ce1c87 lib/core/compa
|
||||
ebe518089733722879f5a13e73020ebe55d46fb7410cacf292ca4ea1d9d1c56a lib/core/convert.py
|
||||
ae500647c4074681749735a4f3b17b7eca44868dd3f39f9cab0a575888ba04a1 lib/core/data.py
|
||||
ffae7cfe9f9afb92e887b9a8dbc1630d0063e865f35984ae417b04a4513e5024 lib/core/datatype.py
|
||||
8a5a6f5313726d6880aeb1ffca35bc2ff6ecd3709b3e987551189a72fed25bf0 lib/core/decorators.py
|
||||
1d70d75a1c1a2a0ad295f727ee9f1d90cea851dfc2f8c9a85ef79c7975007ead lib/core/decorators.py
|
||||
d573a37bb00c8b65f75b275aa92549683180fb209b75fd0ff3870e3848939900 lib/core/defaults.py
|
||||
ce6e1c1766acd95168f7708ddcacaa4a586c21ffc9e92024c4715611c802b60c lib/core/dicts.py
|
||||
c9d1f64648062d7962caf02c4e2e7d84e8feb2a14451146f627112aae889afcd lib/core/dump.py
|
||||
c1f211843ccc93a50639ae6f4a50eb434f334e095d9fea440cebe589004374f3 lib/core/enums.py
|
||||
2ca709fb52b4a1bc83cfe2acdad7e7d4dca1fee6a775e9290f0f1f517955d0b9 lib/core/enums.py
|
||||
00a9b29caa81fe4a5ef145202f9c92e6081f90b2a85cd76c878d520d900ad856 lib/core/exception.py
|
||||
629c0d06d4f4d093badfc8d1de49432d058f66f3223b08dded012eaf05719de2 lib/core/gui.py
|
||||
1c48804c10b94da696d3470efbd25d2fff0f0bbf2af0101aaac8f8c097fce02b lib/core/gui.py
|
||||
4608f21a4333c162ab3c266c903fda4793cc5834de30d06affe9b7566dd09811 lib/core/__init__.py
|
||||
3d308440fb01d04b5d363bfbe0f337756b098532e5bb7a1c91d5213157ec2c35 lib/core/log.py
|
||||
2a06dc9b5c17a1efdcdb903545729809399f1ee96f7352cc19b9aaa227394ff3 lib/core/optiondict.py
|
||||
@@ -188,7 +188,7 @@ c4bfb493a03caf84dd362aec7c248097841de804b7413d0e1ecb8a90c8550bc0 lib/core/readl
|
||||
d1bd70c1a55858495c727fbec91e30af267459c8f64d50fabf9e4ee2c007e920 lib/core/replication.py
|
||||
1d0f80b0193ac5204527bfab4bde1a7aee0f693fd008e86b4b29f606d1ef94f3 lib/core/revision.py
|
||||
d2eb8e4b05ac93551272b3d4abfaf5b9f2d3ac92499a7704c16ed0b4f200db38 lib/core/session.py
|
||||
b314c20d254d3bda3bab247b9b2c35dbac4f4f37eda09d030ad1b84c845b543e lib/core/settings.py
|
||||
48068ae9ed07335458e0b7a8bee9a30ec955dbb32a34804899c801435e0a26ce lib/core/settings.py
|
||||
1c5eab9494eb969bc9ce118a2ea6954690c6851cbe54c18373c723b99734bf09 lib/core/shell.py
|
||||
4eea6dcf023e41e3c64b210cb5c2efc7ca893b727f5e49d9c924f076bb224053 lib/core/subprocessng.py
|
||||
cdd352e1331c6b535e780f6edea79465cb55af53aa2114dcea0e8bf382e56d1a lib/core/target.py
|
||||
@@ -399,7 +399,7 @@ bb0edf756903d8a9df7b60272541768102c64e562e6e7a356c5a761b835efde3 plugins/dbms/m
|
||||
d471eb61a33bd3aa1290cdcce40a5966ebc84af79970f75e8992a2688da4be42 plugins/dbms/mysql/connector.py
|
||||
1e29529d6c4938a728a2d42ef4276b46a40bf4309570213cf3c08871a83abdc1 plugins/dbms/mysql/enumeration.py
|
||||
200b2c910e6902ef8021fe40b3fb426992a016926414cbf9bb74a3630f40842d plugins/dbms/mysql/filesystem.py
|
||||
425ae4b571ba4ffece3a15981a1382ccb59378b06a05b46981e6ace0e33bd0ea plugins/dbms/mysql/fingerprint.py
|
||||
55da8384ba32fe9b69022c8d5429acfacd4d44e55c14f902818d6794ed1bd0a2 plugins/dbms/mysql/fingerprint.py
|
||||
88daad9cf2f62757949cb27128170f33268059e2f0a05d3bd9f75417b99149de plugins/dbms/mysql/__init__.py
|
||||
20108fe32ae3025036aa02b4702c4eda81db01c04a2e0e2e4494d8f1b1717eca plugins/dbms/mysql/syntax.py
|
||||
91f34b67fe3ad5bfa6eae5452a007f97f78b7af000457e9d1c75f4d0207f3d39 plugins/dbms/mysql/takeover.py
|
||||
@@ -413,7 +413,7 @@ cd3590fbb4d500ed2f2434cf218a4198febb933793b7a98e3bb58126839b06f1 plugins/dbms/o
|
||||
ec17431637c2329b42ce0d0dd932bbb02aa93d5388a4e1c6f4e0c1b59f27ce00 plugins/dbms/postgresql/connector.py
|
||||
3ebc81646f196624ec004a77656767e4850f2f113b696f7c86b5ca4daf0ee675 plugins/dbms/postgresql/enumeration.py
|
||||
760285195bdfd91777066bf2751c897f87fab1ada24f729556b122db937c7f88 plugins/dbms/postgresql/filesystem.py
|
||||
42fbf2707e9f67554571e63ef2d204d28303e4d25eb7781ec800084fb53324ce plugins/dbms/postgresql/fingerprint.py
|
||||
0fc3e77f569f05724ea689fa70fe9e4fc8be485ab753818b4c77d561943f7503 plugins/dbms/postgresql/fingerprint.py
|
||||
4c76ebe0369647f95114a7807e08cd0821d3f5b7159a3ec659d33ef8175163f7 plugins/dbms/postgresql/__init__.py
|
||||
04f8ce5afb10c91cfb456cf4cce627b5351539098c4ddfeb63311a55951ac6b0 plugins/dbms/postgresql/syntax.py
|
||||
33f5a6676380cdd4dfbe851b5945121399a158a16ad6b6760b931aa140a353e2 plugins/dbms/postgresql/takeover.py
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@
|
||||
|
||||
[](https://github.com/sqlmapproject/sqlmap/actions/workflows/tests.yml) [](https://www.python.org/) [](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [](https://x.com/sqlmap)
|
||||
|
||||
sqlmap sql injection açıklarını otomatik olarak tespit ve istismar etmeye yarayan açık kaynak bir penetrasyon aracıdır. sqlmap gelişmiş tespit özelliğinin yanı sıra penetrasyon testleri sırasında gerekli olabilecek bir çok aracı, -uzak veritabınınından, veri indirmek, dosya sistemine erişmek, dosya çalıştırmak gibi - işlevleri de barındırmaktadır.
|
||||
sqlmap sql injection açıklarını otomatik olarak tespit ve istismar etmeye yarayan açık kaynak bir penetrasyon aracıdır. sqlmap gelişmiş tespit özelliğinin yanı sıra penetrasyon testleri sırasında gerekli olabilecek birçok aracı, uzak veritabanından, veri indirmek, dosya sistemine erişmek, dosya çalıştırmak gibi işlevleri de barındırmaktadır.
|
||||
|
||||
|
||||
Ekran görüntüleri
|
||||
@@ -17,7 +17,7 @@ Ekran görüntüleri
|
||||
Kurulum
|
||||
----
|
||||
|
||||
[Buraya](https://github.com/sqlmapproject/sqlmap/tarball/master) tıklayarak en son sürüm tarball'ı veya [buraya](https://github.com/sqlmapproject/sqlmap/zipball/master) tıklayarak zipbal'ı indirebilirsiniz.
|
||||
[Buraya](https://github.com/sqlmapproject/sqlmap/tarball/master) tıklayarak en son sürüm tarball'ı veya [buraya](https://github.com/sqlmapproject/sqlmap/zipball/master) tıklayarak zipball'ı indirebilirsiniz.
|
||||
|
||||
Veya tercihen, [Git](https://github.com/sqlmapproject/sqlmap) reposunu klonlayarak indirebilirsiniz
|
||||
|
||||
@@ -37,13 +37,13 @@ Bütün seçenekleri gösterir
|
||||
|
||||
python sqlmap.py -hh
|
||||
|
||||
Program ile ilgili örnekleri [burada](https://asciinema.org/a/46601) bulabilirsiniz. Daha fazlası için sqlmap'in bütün açıklamaları ile birlikte bütün özelliklerinin, örnekleri ile bulunduğu [manuel sayfamıza](https://github.com/sqlmapproject/sqlmap/wiki/Usage) bakmanızı tavsiye ediyoruz
|
||||
Program ile ilgili örnekleri [burada](https://asciinema.org/a/46601) bulabilirsiniz. Daha fazlası için sqlmap'in bütün açıklamaları ile birlikte bütün özelliklerinin, örnekleri ile bulunduğu [manuel sayfamıza](https://github.com/sqlmapproject/sqlmap/wiki/Usage) bakmanızı tavsiye ediyoruz
|
||||
|
||||
Bağlantılar
|
||||
----
|
||||
|
||||
* Anasayfa: https://sqlmap.org
|
||||
* İndirme bağlantıları: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) or [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master)
|
||||
* İndirme bağlantıları: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) veya [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master)
|
||||
* Commitlerin RSS beslemeleri: https://github.com/sqlmapproject/sqlmap/commits/master.atom
|
||||
* Hata takip etme sistemi: https://github.com/sqlmapproject/sqlmap/issues
|
||||
* Kullanıcı Manueli: https://github.com/sqlmapproject/sqlmap/wiki
|
||||
|
||||
@@ -43,11 +43,11 @@ def cachedmethod(f):
|
||||
def _f(*args, **kwargs):
|
||||
parts = (
|
||||
f.__module__ + "." + f.__name__,
|
||||
"|".join(repr(a) for a in args),
|
||||
"|".join("%s=%r" % (k, kwargs[k]) for k in sorted(kwargs))
|
||||
"^".join(repr(a) for a in args),
|
||||
"^".join("%s=%r" % (k, kwargs[k]) for k in sorted(kwargs))
|
||||
)
|
||||
try:
|
||||
key = int(hashlib.md5("|".join(parts).encode(UNICODE_ENCODING)).hexdigest(), 16) & 0x7fffffffffffffff
|
||||
key = int(hashlib.md5("`".join(parts).encode(UNICODE_ENCODING)).hexdigest(), 16) & 0x7fffffffffffffff
|
||||
except ValueError: # https://github.com/sqlmapproject/sqlmap/issues/4281 (NOTE: non-standard Python behavior where hexdigest returns binary value)
|
||||
result = f(*args, **kwargs)
|
||||
else:
|
||||
|
||||
@@ -205,19 +205,19 @@ class HASH(object):
|
||||
SHA256_BASE64 = r'\A[a-zA-Z0-9+/]{43}=\Z'
|
||||
SHA512_BASE64 = r'\A[a-zA-Z0-9+/]{86}==\Z'
|
||||
|
||||
# Reference: http://www.zytrax.com/tech/web/mobile_ids.html
|
||||
# Reference: https://whatmyuseragent.com/brand/
|
||||
class MOBILES(object):
|
||||
BLACKBERRY = ("BlackBerry Z10", "Mozilla/5.0 (BB10; Kbd) AppleWebKit/537.35+ (KHTML, like Gecko) Version/10.3.3.2205 Mobile Safari/537.35+")
|
||||
GALAXY = ("Samsung Galaxy S8", "Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW; en-us) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36 Puffin/9.0.0.50263AP")
|
||||
GALAXY = ("Samsung Galaxy A54", "Mozilla/5.0 (Linux; Android 15; SM-A546B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.7339.155 Mobile Safari/537.36 AirWatchBrowser/25.08.0.2131")
|
||||
HP = ("HP iPAQ 6365", "Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320; HP iPAQ h6300)")
|
||||
HTC = ("HTC 10", "Mozilla/5.0 (Linux; Android 8.0.0; HTC 10 Build/OPR1.170623.027) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36")
|
||||
HUAWEI = ("Huawei P8", "Mozilla/5.0 (Linux; Android 4.4.4; HUAWEI H891L Build/HuaweiH891L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36")
|
||||
IPHONE = ("Apple iPhone 8", "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1")
|
||||
LUMIA = ("Microsoft Lumia 950", "Mozilla/5.0 (Windows Phone 10.0; Android 6.0.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Mobile Safari/537.36 Edge/15.15063")
|
||||
HTC = ("HTC One X2", "Mozilla/5.0 (Linux; Android 14; X2-HT) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.7204.46 Mobile Safari/537.36")
|
||||
HUAWEI = ("Huawei Honor 90 Pro", "Mozilla/5.0 (Linux; Android 15; REP-AN00 Build/HONORREP-AN00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/133.0.6943.137 Mobile Safari/537.36")
|
||||
IPHONE = ("Apple iPhone 15 Pro Max", "Mozilla/7.0 (iPhone; CPU iPhone OS 18_7; iPhone 15 Pro Max) AppleWebKit/533.2 (KHTML, like Gecko) CriOS/126.0.6478.35 Mobile/15E148 Safari/804.17")
|
||||
LUMIA = ("Microsoft Lumia 950 XL", "Mozilla/5.0 (Windows Mobile 10; Android 10.0;Microsoft;Lumia 950XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Mobile Safari/537.36 Edge/40.15254.603")
|
||||
NEXUS = ("Google Nexus 7", "Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19")
|
||||
NOKIA = ("Nokia N97", "Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/10.0.012; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) WicKed/7.1.12344")
|
||||
PIXEL = ("Google Pixel", "Mozilla/5.0 (Linux; Android 10; Pixel) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.117 Mobile Safari/537.36")
|
||||
XIAOMI = ("Xiaomi Mi 8 Pro", "Mozilla/5.0 (Linux; Android 9; MI 8 Pro Build/PKQ1.180729.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.66 Mobile Safari/537.36")
|
||||
PIXEL = ("Google Pixel 9", "Mozilla/5.0 (Linux; Android 14; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/24.0 Chrome/139.0.0.0 Mobile Safari/537.36")
|
||||
XIAOMI = ("Xiaomi Redmi 15C", "Mozilla/5.0 (Linux; Android 15; REDMI 15C Build/AP3A.240905.015.A2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.118 Mobile Safari/537.36 XiaoMi/MiuiBrowser/14.43.0-gn")
|
||||
|
||||
class PROXY_TYPE(object):
|
||||
HTTP = "HTTP"
|
||||
|
||||
244
lib/core/gui.py
244
lib/core/gui.py
@@ -61,18 +61,6 @@ def runGui(parser):
|
||||
else:
|
||||
self.set(self.old_value)
|
||||
|
||||
# Reference: https://code.activestate.com/recipes/580726-tkinter-notebook-that-fits-to-the-height-of-every-/
|
||||
class AutoresizableNotebook(_tkinter_ttk.Notebook):
|
||||
def __init__(self, master=None, **kw):
|
||||
_tkinter_ttk.Notebook.__init__(self, master, **kw)
|
||||
self.bind("<<NotebookTabChanged>>", self._on_tab_changed)
|
||||
|
||||
def _on_tab_changed(self, event):
|
||||
event.widget.update_idletasks()
|
||||
|
||||
tab = event.widget.nametowidget(event.widget.select())
|
||||
event.widget.configure(height=tab.winfo_reqheight())
|
||||
|
||||
try:
|
||||
window = _tkinter.Tk()
|
||||
except Exception as ex:
|
||||
@@ -81,11 +69,41 @@ def runGui(parser):
|
||||
|
||||
window.title(VERSION_STRING)
|
||||
|
||||
# Reference: https://www.holadevs.com/pregunta/64750/change-selected-tab-color-in-ttknotebook
|
||||
# Set theme and colors
|
||||
bg_color = "#f5f5f5"
|
||||
fg_color = "#333333"
|
||||
accent_color = "#2c7fb8"
|
||||
window.configure(background=bg_color)
|
||||
|
||||
# Configure styles
|
||||
style = _tkinter_ttk.Style()
|
||||
settings = {"TNotebook.Tab": {"configure": {"padding": [5, 1], "background": "#fdd57e"}, "map": {"background": [("selected", "#C70039"), ("active", "#fc9292")], "foreground": [("selected", "#ffffff"), ("active", "#000000")]}}}
|
||||
style.theme_create("custom", parent="alt", settings=settings)
|
||||
style.theme_use("custom")
|
||||
|
||||
# Try to use a more modern theme if available
|
||||
available_themes = style.theme_names()
|
||||
if 'clam' in available_themes:
|
||||
style.theme_use('clam')
|
||||
elif 'alt' in available_themes:
|
||||
style.theme_use('alt')
|
||||
|
||||
# Configure notebook style
|
||||
style.configure("TNotebook", background=bg_color)
|
||||
style.configure("TNotebook.Tab",
|
||||
padding=[10, 4],
|
||||
background="#e1e1e1",
|
||||
font=('Helvetica', 9))
|
||||
style.map("TNotebook.Tab",
|
||||
background=[("selected", accent_color), ("active", "#7fcdbb")],
|
||||
foreground=[("selected", "white"), ("active", "white")])
|
||||
|
||||
# Configure button style
|
||||
style.configure("TButton",
|
||||
padding=4,
|
||||
relief="flat",
|
||||
background=accent_color,
|
||||
foreground="white",
|
||||
font=('Helvetica', 9))
|
||||
style.map("TButton",
|
||||
background=[('active', '#41b6c4')])
|
||||
|
||||
# Reference: https://stackoverflow.com/a/10018670
|
||||
def center(window):
|
||||
@@ -138,16 +156,16 @@ def runGui(parser):
|
||||
config = {}
|
||||
|
||||
for key in window._widgets:
|
||||
dest, type = key
|
||||
dest, widget_type = key
|
||||
widget = window._widgets[key]
|
||||
|
||||
if hasattr(widget, "get") and not widget.get():
|
||||
value = None
|
||||
elif type == "string":
|
||||
elif widget_type == "string":
|
||||
value = widget.get()
|
||||
elif type == "float":
|
||||
elif widget_type == "float":
|
||||
value = float(widget.get())
|
||||
elif type == "int":
|
||||
elif widget_type == "int":
|
||||
value = int(widget.get())
|
||||
else:
|
||||
value = bool(widget.var.get())
|
||||
@@ -155,7 +173,9 @@ def runGui(parser):
|
||||
config[dest] = value
|
||||
|
||||
for option in parser.option_list:
|
||||
config[option.dest] = defaults.get(option.dest, None)
|
||||
# Only set default if not already set by the user
|
||||
if option.dest not in config or config[option.dest] is None:
|
||||
config[option.dest] = defaults.get(option.dest, None)
|
||||
|
||||
handle, configFile = tempfile.mkstemp(prefix=MKSTEMP_PREFIX.CONFIG, text=True)
|
||||
os.close(handle)
|
||||
@@ -183,12 +203,20 @@ def runGui(parser):
|
||||
|
||||
top = _tkinter.Toplevel()
|
||||
top.title("Console")
|
||||
top.configure(background=bg_color)
|
||||
|
||||
# Create a frame for the console
|
||||
console_frame = _tkinter.Frame(top, bg=bg_color)
|
||||
console_frame.pack(fill=_tkinter.BOTH, expand=True, padx=10, pady=10)
|
||||
|
||||
# Reference: https://stackoverflow.com/a/13833338
|
||||
text = _tkinter_scrolledtext.ScrolledText(top, undo=True)
|
||||
text = _tkinter_scrolledtext.ScrolledText(console_frame, undo=True, wrap=_tkinter.WORD,
|
||||
bg="#2c3e50", fg="#ecf0f1",
|
||||
insertbackground="white",
|
||||
font=('Consolas', 10))
|
||||
text.bind("<Key>", onKeyPress)
|
||||
text.bind("<Return>", onReturnPress)
|
||||
text.pack()
|
||||
text.pack(fill=_tkinter.BOTH, expand=True)
|
||||
text.focus()
|
||||
|
||||
center(top)
|
||||
@@ -196,7 +224,6 @@ def runGui(parser):
|
||||
while True:
|
||||
line = ""
|
||||
try:
|
||||
# line = queue.get_nowait()
|
||||
line = queue.get(timeout=.1)
|
||||
text.insert(_tkinter.END, line)
|
||||
except _queue.Empty:
|
||||
@@ -206,9 +233,10 @@ def runGui(parser):
|
||||
if not alive:
|
||||
break
|
||||
|
||||
menubar = _tkinter.Menu(window)
|
||||
# Create a menu bar
|
||||
menubar = _tkinter.Menu(window, bg=bg_color, fg=fg_color)
|
||||
|
||||
filemenu = _tkinter.Menu(menubar, tearoff=0)
|
||||
filemenu = _tkinter.Menu(menubar, tearoff=0, bg=bg_color, fg=fg_color)
|
||||
filemenu.add_command(label="Open", state=_tkinter.DISABLED)
|
||||
filemenu.add_command(label="Save", state=_tkinter.DISABLED)
|
||||
filemenu.add_separator()
|
||||
@@ -217,7 +245,7 @@ def runGui(parser):
|
||||
|
||||
menubar.add_command(label="Run", command=run)
|
||||
|
||||
helpmenu = _tkinter.Menu(menubar, tearoff=0)
|
||||
helpmenu = _tkinter.Menu(menubar, tearoff=0, bg=bg_color, fg=fg_color)
|
||||
helpmenu.add_command(label="Official site", command=lambda: webbrowser.open(SITE))
|
||||
helpmenu.add_command(label="Github pages", command=lambda: webbrowser.open(GIT_PAGE))
|
||||
helpmenu.add_command(label="Wiki pages", command=lambda: webbrowser.open(WIKI_PAGE))
|
||||
@@ -226,59 +254,173 @@ def runGui(parser):
|
||||
helpmenu.add_command(label="About", command=lambda: _tkinter_messagebox.showinfo("About", "Copyright (c) 2006-2025\n\n (%s)" % DEV_EMAIL_ADDRESS))
|
||||
menubar.add_cascade(label="Help", menu=helpmenu)
|
||||
|
||||
window.config(menu=menubar)
|
||||
window.config(menu=menubar, bg=bg_color)
|
||||
window._widgets = {}
|
||||
|
||||
notebook = AutoresizableNotebook(window)
|
||||
# Create header frame
|
||||
header_frame = _tkinter.Frame(window, bg=bg_color, height=60)
|
||||
header_frame.pack(fill=_tkinter.X, pady=(0, 5))
|
||||
header_frame.pack_propagate(0)
|
||||
|
||||
first = None
|
||||
frames = {}
|
||||
# Add header label
|
||||
title_label = _tkinter.Label(header_frame, text="Configuration",
|
||||
font=('Helvetica', 14),
|
||||
fg=accent_color, bg=bg_color)
|
||||
title_label.pack(side=_tkinter.LEFT, padx=15)
|
||||
|
||||
# Add run button in header
|
||||
run_button = _tkinter_ttk.Button(header_frame, text="Run", command=run, width=12)
|
||||
run_button.pack(side=_tkinter.RIGHT, padx=15)
|
||||
|
||||
# Create notebook
|
||||
notebook = _tkinter_ttk.Notebook(window)
|
||||
notebook.pack(expand=1, fill="both", padx=5, pady=(0, 5))
|
||||
|
||||
# Store tab information for background loading
|
||||
tab_frames = {}
|
||||
tab_canvases = {}
|
||||
tab_scrollable_frames = {}
|
||||
tab_groups = {}
|
||||
|
||||
# Create empty tabs with scrollable areas first (fast)
|
||||
for group in parser.option_groups:
|
||||
frame = frames[group.title] = _tkinter.Frame(notebook, width=200, height=200)
|
||||
notebook.add(frames[group.title], text=group.title)
|
||||
# Create a frame with scrollbar for the tab
|
||||
tab_frame = _tkinter.Frame(notebook, bg=bg_color)
|
||||
tab_frames[group.title] = tab_frame
|
||||
|
||||
_tkinter.Label(frame).grid(column=0, row=0, sticky=_tkinter.W)
|
||||
# Create a canvas with scrollbar
|
||||
canvas = _tkinter.Canvas(tab_frame, bg=bg_color, highlightthickness=0)
|
||||
scrollbar = _tkinter_ttk.Scrollbar(tab_frame, orient="vertical", command=canvas.yview)
|
||||
scrollable_frame = _tkinter.Frame(canvas, bg=bg_color)
|
||||
|
||||
# Store references
|
||||
tab_canvases[group.title] = canvas
|
||||
tab_scrollable_frames[group.title] = scrollable_frame
|
||||
tab_groups[group.title] = group
|
||||
|
||||
# Configure the canvas scrolling
|
||||
scrollable_frame.bind(
|
||||
"<Configure>",
|
||||
lambda e, canvas=canvas: canvas.configure(scrollregion=canvas.bbox("all"))
|
||||
)
|
||||
|
||||
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
|
||||
canvas.configure(yscrollcommand=scrollbar.set)
|
||||
|
||||
# Pack the canvas and scrollbar
|
||||
canvas.pack(side="left", fill="both", expand=True)
|
||||
scrollbar.pack(side="right", fill="y")
|
||||
|
||||
# Add the tab to the notebook
|
||||
notebook.add(tab_frame, text=group.title)
|
||||
|
||||
# Add a loading indicator
|
||||
loading_label = _tkinter.Label(scrollable_frame, text="Loading options...",
|
||||
font=('Helvetica', 12),
|
||||
fg=accent_color, bg=bg_color)
|
||||
loading_label.pack(expand=True)
|
||||
|
||||
# Function to populate a tab in the background
|
||||
def populate_tab(tab_name):
|
||||
group = tab_groups[tab_name]
|
||||
scrollable_frame = tab_scrollable_frames[tab_name]
|
||||
canvas = tab_canvases[tab_name]
|
||||
|
||||
# Remove loading indicator
|
||||
for child in scrollable_frame.winfo_children():
|
||||
child.destroy()
|
||||
|
||||
# Add content to the scrollable frame
|
||||
row = 0
|
||||
|
||||
row = 1
|
||||
if group.get_description():
|
||||
_tkinter.Label(frame, text="%s:" % group.get_description()).grid(column=0, row=1, columnspan=3, sticky=_tkinter.W)
|
||||
_tkinter.Label(frame).grid(column=0, row=2, sticky=_tkinter.W)
|
||||
row += 2
|
||||
desc_label = _tkinter.Label(scrollable_frame, text=group.get_description(),
|
||||
wraplength=600, justify="left",
|
||||
font=('Helvetica', 9),
|
||||
fg="#555555", bg=bg_color)
|
||||
desc_label.grid(row=row, column=0, columnspan=3, sticky="w", padx=10, pady=(10, 5))
|
||||
row += 1
|
||||
|
||||
for option in group.option_list:
|
||||
_tkinter.Label(frame, text="%s " % parser.formatter._format_option_strings(option)).grid(column=0, row=row, sticky=_tkinter.W)
|
||||
# Option label
|
||||
option_label = _tkinter.Label(scrollable_frame,
|
||||
text=parser.formatter._format_option_strings(option) + ":",
|
||||
font=('Helvetica', 9),
|
||||
fg=fg_color, bg=bg_color,
|
||||
anchor="w")
|
||||
option_label.grid(row=row, column=0, sticky="w", padx=10, pady=2)
|
||||
|
||||
# Input widget
|
||||
if option.type == "string":
|
||||
widget = _tkinter.Entry(frame)
|
||||
widget = _tkinter.Entry(scrollable_frame, font=('Helvetica', 9),
|
||||
relief="sunken", bd=1, width=20)
|
||||
widget.grid(row=row, column=1, sticky="w", padx=5, pady=2)
|
||||
elif option.type == "float":
|
||||
widget = ConstrainedEntry(frame, regex=r"\A\d*\.?\d*\Z")
|
||||
widget = ConstrainedEntry(scrollable_frame, regex=r"\A\d*\.?\d*\Z",
|
||||
font=('Helvetica', 9),
|
||||
relief="sunken", bd=1, width=10)
|
||||
widget.grid(row=row, column=1, sticky="w", padx=5, pady=2)
|
||||
elif option.type == "int":
|
||||
widget = ConstrainedEntry(frame, regex=r"\A\d*\Z")
|
||||
widget = ConstrainedEntry(scrollable_frame, regex=r"\A\d*\Z",
|
||||
font=('Helvetica', 9),
|
||||
relief="sunken", bd=1, width=10)
|
||||
widget.grid(row=row, column=1, sticky="w", padx=5, pady=2)
|
||||
else:
|
||||
var = _tkinter.IntVar()
|
||||
widget = _tkinter.Checkbutton(frame, variable=var)
|
||||
widget = _tkinter.Checkbutton(scrollable_frame, variable=var,
|
||||
bg=bg_color, activebackground=bg_color)
|
||||
widget.var = var
|
||||
widget.grid(row=row, column=1, sticky="w", padx=5, pady=2)
|
||||
|
||||
first = first or widget
|
||||
widget.grid(column=1, row=row, sticky=_tkinter.W)
|
||||
# Help text (truncated to improve performance)
|
||||
help_text = option.help
|
||||
if len(help_text) > 100:
|
||||
help_text = help_text[:100] + "..."
|
||||
|
||||
help_label = _tkinter.Label(scrollable_frame, text=help_text,
|
||||
font=('Helvetica', 8),
|
||||
fg="#666666", bg=bg_color,
|
||||
wraplength=400, justify="left")
|
||||
help_label.grid(row=row, column=2, sticky="w", padx=5, pady=2)
|
||||
|
||||
# Store widget reference
|
||||
window._widgets[(option.dest, option.type)] = widget
|
||||
|
||||
# Set default value
|
||||
default = defaults.get(option.dest)
|
||||
if default:
|
||||
if hasattr(widget, "insert"):
|
||||
widget.insert(0, default)
|
||||
|
||||
_tkinter.Label(frame, text=" %s" % option.help).grid(column=2, row=row, sticky=_tkinter.W)
|
||||
elif hasattr(widget, "var"):
|
||||
widget.var.set(1 if default else 0)
|
||||
|
||||
row += 1
|
||||
|
||||
_tkinter.Label(frame).grid(column=0, row=row, sticky=_tkinter.W)
|
||||
# Add some padding at the bottom
|
||||
_tkinter.Label(scrollable_frame, bg=bg_color, height=1).grid(row=row, column=0)
|
||||
|
||||
notebook.pack(expand=1, fill="both")
|
||||
notebook.enable_traversal()
|
||||
# Update the scroll region after adding all widgets
|
||||
canvas.update_idletasks()
|
||||
canvas.configure(scrollregion=canvas.bbox("all"))
|
||||
|
||||
first.focus()
|
||||
# Update the UI to show the tab is fully loaded
|
||||
window.update_idletasks()
|
||||
|
||||
# Function to populate tabs in the background
|
||||
def populate_tabs_background():
|
||||
for tab_name in tab_groups.keys():
|
||||
# Schedule each tab to be populated with a small delay between them
|
||||
window.after(100, lambda name=tab_name: populate_tab(name))
|
||||
|
||||
# Start populating tabs in the background after a short delay
|
||||
window.after(500, populate_tabs_background)
|
||||
|
||||
# Set minimum window size
|
||||
window.update()
|
||||
window.minsize(800, 500)
|
||||
|
||||
# Center the window on screen
|
||||
center(window)
|
||||
|
||||
# Start the GUI
|
||||
window.mainloop()
|
||||
|
||||
@@ -19,7 +19,7 @@ from lib.core.enums import OS
|
||||
from thirdparty import six
|
||||
|
||||
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
|
||||
VERSION = "1.9.8.10"
|
||||
VERSION = "1.9.10.0"
|
||||
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)
|
||||
|
||||
@@ -45,14 +45,15 @@ class Fingerprint(GenericFingerprint):
|
||||
# Reference: https://dev.mysql.com/doc/relnotes/mysql/<major>.<minor>/en/
|
||||
|
||||
versions = (
|
||||
(90300, 90302), # MySQL 9.3
|
||||
(90200, 90202), # MySQL 9.2
|
||||
(90100, 90102), # MySQL 9.1
|
||||
(90000, 90002), # MySQL 9.0
|
||||
(80400, 80405), # MySQL 8.4
|
||||
(80400, 80406), # MySQL 8.4
|
||||
(80300, 80302), # MySQL 8.3
|
||||
(80200, 80202), # MySQL 8.2
|
||||
(80100, 80102), # MySQL 8.1
|
||||
(80000, 80041), # MySQL 8.0
|
||||
(80000, 80043), # MySQL 8.0
|
||||
(60000, 60014), # MySQL 6.0
|
||||
(50700, 50745), # MySQL 5.7
|
||||
(50600, 50652), # MySQL 5.6
|
||||
|
||||
@@ -141,7 +141,7 @@ class Fingerprint(GenericFingerprint):
|
||||
Backend.setVersion(">= 15.0")
|
||||
elif inject.checkBooleanExpression("BIT_COUNT(NULL) IS NULL"):
|
||||
Backend.setVersion(">= 14.0")
|
||||
elif inject.checkBooleanExpression("GEN_RANDOM_UUID() IS NOT NULL"):
|
||||
elif inject.checkBooleanExpression("NULL::anycompatible IS NULL"):
|
||||
Backend.setVersion(">= 13.0")
|
||||
elif inject.checkBooleanExpression("SINH(0)=0"):
|
||||
Backend.setVersion(">= 12.0")
|
||||
|
||||
Reference in New Issue
Block a user