Skip to content
This repository was archived by the owner on Apr 19, 2020. It is now read-only.

Commit bd99959

Browse files
committed
WiFi-Pumpkin v0.8.4 initial commit
1 parent 9a97c28 commit bd99959

File tree

406 files changed

+1765
-403
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

406 files changed

+1765
-403
lines changed

CHANGELOG

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
Version 0.8.4
2+
-------------
3+
- added new plugin Pumpkin-Proxy (mitmproxy API)
4+
- added new notifications for donations
5+
- fixed theme default QtableView Color hover
6+
17
Version 0.8.3
28
-------------
39
- added new design main tool

README.md

+62-42
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ WiFi-Pumpkin is an open source security tool that provides the Rogue access poin
1515
cd WiFi-Pumpkin
1616
./installer.sh --install
1717
```
18-
or download .deb file to install
18+
or download [.deb](https://github.com/P0cL4bs/WiFi-Pumpkin/releases) file to install
1919
``` sh
20-
sudo dpkg -i wifi-pumpkin-0.8.3-amd64.deb #for arch 64.
20+
sudo dpkg -i wifi-pumpkin-0.8.4-all.deb
2121

2222
```
2323

@@ -40,6 +40,7 @@ refer to the wiki for [Installation](https://github.com/P0cL4bs/WiFi-Pumpkin/wik
4040
* Patch Binaries via MITM
4141
* Karma Attacks (support hostapd-mana)
4242
* LLMNR, NBT-NS and MDNS poisoner (Responder)
43+
* Pumpkin-Proxy (ProxyServer (mitmproxy API))
4344

4445
### Plugins
4546
| Plugin | Description |
@@ -52,49 +53,68 @@ refer to the wiki for [Installation](https://github.com/P0cL4bs/WiFi-Pumpkin/wik
5253
[Responder](https://github.com/lgandx/Responder) | Responder an LLMNR, NBT-NS and MDNS poisoner. Author: Laurent Gaffie
5354

5455
### Transparent Proxy
55-
Transparent proxies that you can use to intercept and manipulate HTTP traffic modifying requests and responses, that allow to inject javascripts into the targets visited. You can easily implement a module to inject data into pages creating a python file in directory "proxy" automatically will be listed on Injector-Proxy tab.
56-
### Plugins Example
57-
The following is a sample module that injects some contents into the <head> tag to set blur filter into body html page:
58-
``` python
59-
import logging
60-
from Plugin import PluginProxy
61-
from core.utils import setup_logger
62-
63-
class blurpage(PluginProxy):
64-
''' this module proxy set blur into body page html response'''
65-
_name = 'blur_page'
66-
_activated = False
67-
_instance = None
68-
_requiresArgs = False
69-
70-
@staticmethod
71-
def getInstance():
72-
if blurpage._instance is None:
73-
blurpage._instance = blurpage()
74-
return blurpage._instance
75-
76-
def __init__(self):
77-
self.injection_code = []
78-
79-
def LoggerInjector(self,session):
80-
setup_logger('injectionPage', './logs/AccessPoint/injectionPage.log',session)
81-
self.logging = logging.getLogger('injectionPage')
56+
![proxy](https://raw.githubusercontent.com/P0cL4bs/WiFi-Pumpkin/master/docs/proxyscenario.png)
8257

83-
def setInjectionCode(self, code,session):
84-
self.injection_code.append(code)
85-
self.LoggerInjector(session)
86-
87-
def inject(self, data, url):
88-
injection_code = '''<head> <style type="text/css">
89-
body{
90-
filter: blur(2px);
91-
-webkit-filter: blur(2px);}
92-
</style>'''
93-
self.logging.info("Injected: %s" % (url))
94-
return data.replace('<head>',injection_code )
58+
Transparent proxies(mitmproxy) that you can use to intercept and manipulate HTTP traffic modifying requests and responses, that allow to inject javascripts into the targets visited. You can easily implement a module to inject data into pages creating a python file in directory "plugins/extension/" automatically will be listed on Pumpkin-Proxy tab.
59+
#### Plugins Example Dev
9560

61+
``` python
62+
from mitmproxy.models import decoded # for decode content html
63+
from plugins.extension.plugin import PluginTemplate
64+
65+
class Nameplugin(PluginTemplate):
66+
meta = {
67+
'Name' : 'Nameplugin',
68+
'Version' : '1.0',
69+
'Description' : 'Brief description of the new plugin',
70+
'Author' : 'by dev'
71+
}
72+
def __init__(self):
73+
for key,value in self.meta.items():
74+
self.__dict__[key] = value
75+
# if you want set arguments check refer wiki more info.
76+
self.ConfigParser = False # No require arguments
77+
78+
def request(self, flow):
79+
print flow.__dict__
80+
print flow.request.__dict__
81+
print flow.request.headers.__dict__ # request headers
82+
host = flow.request.pretty_host # get domain on the fly requests
83+
versionH = flow.request.http_version # get http version
84+
85+
# get redirect domains example
86+
# pretty_host takes the "Host" header of the request into account,
87+
if flow.request.pretty_host == "example.org":
88+
flow.request.host = "mitmproxy.org"
89+
90+
# get all request Header example
91+
self.send_output.emit("\n[{}][HTTP REQUEST HEADERS]".format(self.Name))
92+
for name, valur in flow.request.headers.iteritems():
93+
self.send_output.emit('{}: {}'.format(name,valur))
94+
95+
print flow.request.method # show method request
96+
# the model printer data
97+
self.send_output.emit('[NamePlugin]:: this is model for save data logging')
98+
99+
def response(self, flow):
100+
print flow.__dict__
101+
print flow.response.__dict__
102+
print flow.response.headers.__dict__ #convert headers for python dict
103+
print flow.response.headers['Content-Type'] # get content type
104+
105+
#every HTTP response before it is returned to the client
106+
with decoded(flow.response):
107+
print flow.response.content # content html
108+
flow.response.content.replace('</body>','<h1>injected</h1></body>') # replace content tag
109+
110+
del flow.response.headers["X-XSS-Protection"] # remove protection Header
111+
112+
flow.response.headers["newheader"] = "foo" # adds a new header
113+
#and the new header will be added to all responses passing through the proxy
96114
```
97-
115+
#### About plugins
116+
[plugins](https://github.com/P0cL4bs/WiFi-Pumpkin/wiki/Plugins) on the wiki
117+
98118
### Screenshots
99119
[Screenshot](https://github.com/P0cL4bs/WiFi-Pumpkin/wiki/Screenshots) on the wiki
100120

core/config/app/config.ini

+6-4
Original file line numberDiff line numberDiff line change
@@ -69,21 +69,23 @@ range=10.0.0.20/10.0.0.50
6969

7070
[dockarea]
7171
advanced=true
72-
dock_credencials=true
72+
dock_credencials=false
7373
dock_urlmonitor=true
7474
dock_bdfproxy=false
7575
dock_dns2proxy=false
7676
dock_responder=false
77+
dock_PumpkinProxy=true
7778

7879
[plugins]
7980
noproxy=false
8081
netcreds_plugin=true
81-
dns2proxy_plugin=true
82+
dns2proxy_plugin=false
8283
sergioproxy_plugin=false
8384
bdfproxy_plugin=false
8485
responder_plugin=false
85-
bdfproxy_config=plugins/BDFProxy-ng/bdfproxy.cfg
86-
responder_config=plugins/Responder/Responder.conf
86+
pumpkinproxy_plugin=true
87+
bdfproxy_config=plugins/external/BDFProxy-ng/bdfproxy.cfg
88+
responder_config=plugins/external/Responder/Responder.conf
8789

8890
[iptables]
8991
iptables_0_masq=iptables -P FORWARD ACCEPT

core/config/app/proxy.ini

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
[plugins]
2+
dnsspoof=false
3+
sslstrip=false
4+
jskeylogger=false
5+
stickycookie=false
6+
downloadspoof=false
7+
js_inject=false
8+
html_inject=false
9+
dump_post_data=false
10+
upsidedownternet=false
11+
beef=false
12+
replaceImages=false
13+
inverted_internet=false
14+
shakepage=false
15+
16+
[set_dnsspoof]
17+
domain_0={'facebook.com':'10.0.0.1'}
18+
domain_1={'teste.com':'10.0.0.1'}
19+
domain_2={'example.com':'10.0.0.1'}
20+
domain_3={'website.com':'10.0.0.1'}
21+
22+
[set_js_inject]
23+
url=http://example.com/foo.js
24+
25+
[set_replaceImages]
26+
path=icons/logo.png
27+
28+
[set_beef]
29+
hook=http://172.16.149.141:3000/hook.js
30+
31+
[set_html_inject]
32+
content_path=file.html
33+
34+
[set_downloadspoof]
35+
backdoorExePath=plguins/extension/tmp/exe/backdoor.exe
36+
backdoorPDFpath=plguins/extension/tmp/pdf/backdoor.pdf
37+
backdoorWORDpath=plguins/extension/tmp/doc/backdoor.doc
38+
backdoorXLSpath=plguins/extension/tmp/xls/backdoor.xls

core/config/commits/Lcommits.cfg

+8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
master:
2+
[
3+
{ Version: '0.8.4'}
4+
{ changelog : 'added new plugin Pumpkin-Proxy (mitmproxy API)' },
5+
{ changelog : 'added new notifications for donations' },
6+
{ changelog : 'fixed theme default QtableView Color hover' },
7+
]
8+
9+
WiFiPumpkin083:
210
[
311
{ Version: '0.8.3'}
412
{ changelog : 'added new design main tool' },

core/helpers/about.py

+20-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ def __init__(self,parent = None):
3535
self.scroll.setWidget(self.scrollwidget)
3636

3737
self.formMode = QFormLayout()
38+
self.formMode.addRow(QLabel('<a href="https://github.com/mitmproxy/mitmproxy"><strong>@mitmproxy</strong></a>'))
39+
self.formMode.addRow(QLabel('ProxyServer tranparent HTTP proxy <br>'))
3840
self.formMode.addRow(QLabel('<a href="https://github.com/TimSchumi"><strong>@TimSchumi</strong></a>'))
3941
self.formMode.addRow(QLabel('Debian package build for WiFi-Pumpkin <br>'))
4042
self.formMode.addRow(QLabel('<a href="https://github.com/psychomario"><strong>@psychomario</strong></a>'))
@@ -95,8 +97,9 @@ def Qui_update(self):
9597
self.tabwid = QTabWidget(self)
9698
self.TabAbout = QWidget(self)
9799
self.TabVersion = QWidget(self)
98-
self.TabTranks = QWidget()
100+
self.TabTranks = QWidget(self)
99101
self.TabChangelog = QWidget(self)
102+
self.TabDonate = QWidget(self)
100103
self.btn_exit = QPushButton("Close")
101104
self.btn_exit.setFixedWidth(90)
102105
self.btn_exit.setIcon(QIcon('icons/cancel.png'))
@@ -106,6 +109,7 @@ def Qui_update(self):
106109
self.formVersion = QFormLayout()
107110
self.formTranks = QFormLayout()
108111
self.formChange = QFormLayout()
112+
self.formDonate = QFormLayout()
109113

110114
# About section
111115
self.formAbout.addRow(self.desc)
@@ -121,6 +125,20 @@ def Qui_update(self):
121125
self.formAbout.addRow(QLabel('<center>{}</center>'.format(self.author[-14:])))
122126
self.TabAbout.setLayout(self.formAbout)
123127

128+
#Donate section
129+
self.formDonate.addRow(QLabel('Open source project require developer time.<br>'
130+
' You need dev time to fix bugs, you need dev time<br> to add features,'
131+
" thank you for your contribution! "))
132+
self.imagePay = QLabel()
133+
self.imagePay.setPixmap(QPixmap('icons/donatepay.gif'))
134+
self.formDonate.addRow(QLabel(''))
135+
self.formDonate.addRow(QLabel('Support Donations:'))
136+
self.formDonate.addRow(self.imagePay)
137+
self.formDonate.addRow(QLabel('Paypal:'),QLabel('<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick'
138+
'&hosted_button_id=PUPJEGHLJPFQL">WiFi-Pumpkin project - Paypal Donataion </a>'))
139+
self.formDonate.addRow(QLabel('BTC:'),QLabel('<a href="1HBXz6XX3LcHqUnaca5HRqq6rPUmA3pf6f">1HBXz6XX3LcHqUnaca5HRqq6rPUmA3pf6f</a>'))
140+
self.TabDonate.setLayout(self.formDonate)
141+
124142
# Version Section
125143
self.formVersion.addRow(QLabel('<strong>Version: {}</strong><br>'.format(self.version)))
126144
self.formVersion.addRow(QLabel('Using:'))
@@ -147,6 +165,7 @@ def Qui_update(self):
147165
self.tabwid.addTab(self.TabVersion,'Version')
148166
self.tabwid.addTab(self.TabChangelog,'ChangeLog')
149167
self.tabwid.addTab(self.TabTranks,'TranksTo')
168+
self.tabwid.addTab(self.TabDonate, 'Donate')
150169
self.form.addRow(self.tabwid)
151170
self.form2.addSpacing(240)
152171
self.form2.addWidget(self.btn_exit)

core/helpers/report.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def get_all_items_Unchecked(self):
6060
def convertIt(self,printer):
6161
# generate file pdf
6262
self.ExportPDF.print_(printer)
63-
QMessageBox.information(self, 'WiFi Pumpkin Report PDF', 'file PDF has been generated with success.')
63+
QMessageBox.information(self, 'WiFi Pumpkin Report PDF', 'file PDF has been generated successfully.')
6464

6565
def exportFilesSystem(self):
6666
# export HTML or pdf file
@@ -89,7 +89,7 @@ def exportFilesSystem(self):
8989
if len(filename[0]) != 0:
9090
with open(str(filename[0]),'w') as filehtml:
9191
filehtml.write(contents['HTML']),filehtml.close()
92-
QMessageBox.information(self, 'WiFi Pumpkin Report HTML', 'file has been saved with success.')
92+
QMessageBox.information(self, 'WiFi Pumpkin Report HTML', 'file logs has been saved successfully.')
9393

9494
elif self.checkPDF.isChecked():
9595
filename = QFileDialog.getSaveFileNameAndFilter(self,

core/helpers/update.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ def RcheckCommits(self,commits):
138138
item.setSizeHint(QSize(20,20))
139139
self.LCommits.addItem(item)
140140
return self.btnCheck.setEnabled(True)
141-
elif 'new Version available WiFi-Pumpkin v' in commits:
141+
elif 'New version available WiFi-Pumpkin v' in commits:
142142
reply = QMessageBox.question(self, 'Update Information',
143143
'{}, would you like to update??'.format(commits), QMessageBox.Yes |
144144
QMessageBox.No, QMessageBox.No)
@@ -159,7 +159,7 @@ def RcheckCommits(self,commits):
159159
elif '::updated' in commits:
160160
self.pb.update_bar(100)
161161
QMessageBox.information(self,'Update Information',
162-
"Already up-to-date. You're required to restart the tool to apply this update.")
162+
"Already up-to-date. Please restart WiFi-Pumpkin to apply this update.")
163163
self.btnUpdate.setDisabled(True)
164164
else:
165165
self.LOutput.addItem(commits)

core/loaders/master/github.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def NewVersionUpdate(self):
8383

8484
def checkUpdate(self,Version):
8585
if self.commit_update['Version'] != Version:
86-
return self.emit(SIGNAL('Activated ( QString )'),'new Version available WiFi-Pumpkin v'
86+
return self.emit(SIGNAL('Activated ( QString )'),'New version available WiFi-Pumpkin v'
8787
+self.commit_update['Version'])
8888
if self.commit_update['size'] > self.commit_local['size']:
8989
for commit in self.commit_update['lines'][self.commit_local['size']:]:

core/loaders/models/PackagesUI.py

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from PyQt4.QtCore import *
33
from core.utils import Refactor,set_monitor_mode
44
from subprocess import Popen,PIPE
5+
from core.utility.collection import SettingsINI
56
from core.utility.settings import frm_Settings
67
from modules.servers.PhishingManager import frm_PhishingManager
78
from core.utility.threads import ThreadPopen,ThreadScan,ProcessThread,ThreadFastScanIP

0 commit comments

Comments
 (0)