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

Commit

Permalink
WiFi-Pumpkin v0.8.5
Browse files Browse the repository at this point in the history
  • Loading branch information
mh4x0f committed May 4, 2017
1 parent bd7fba6 commit cc55b63
Show file tree
Hide file tree
Showing 54 changed files with 1,667 additions and 2,000 deletions.
13 changes: 13 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
Version 0.8.5
-------------
- added new plugin TCP-Proxy
- added capture image HTTP request (Tab ImageCap)
- added new HTTP-request widgets get info from Headers requests
- added new columm (url) on HTTP-Authentication
- added now WF allow to start without internet connection
- added option that exclude USB card on start
- added support to use 2 wireless cards #211
- remove netcreds plugin thks for all DanMcInerney
- added Python DNS Server improvements #165
- added new style in progressbar on home

Version 0.8.4
-------------
- added new plugin Pumpkin-Proxy (mitmproxy API)
Expand Down
55 changes: 54 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,13 @@ refer to the wiki for [Installation](https://github.com/P0cL4bs/WiFi-Pumpkin/wik
* Karma Attacks (support hostapd-mana)
* LLMNR, NBT-NS and MDNS poisoner (Responder)
* Pumpkin-Proxy (ProxyServer (mitmproxy API))
* Capture images on the fly
* TCP-Proxy


### Plugins
| Plugin | Description |
|:-----------|:------------|
[net-creds](https://github.com/DanMcInerney/net-creds) | Sniff passwords and hashes from an interface or pcap file
[dns2proxy](https://github.com/LeonardoNve/dns2proxy) | This tools offer a different features for post-explotation once you change the DNS server to a Victim.
[sslstrip2](https://github.com/LeonardoNve/sslstrip2) | Sslstrip is a MITM tool that implements Moxie Marlinspike's SSL stripping attacks based version fork @LeonardoNve/@xtr4nge.
[sergio-proxy](https://github.com/supernothing/sergio-proxy) | Sergio Proxy (a Super Effective Recorder of Gathered Inputs and Outputs) is an HTTP proxy that was written in Python for the Twisted framework.
Expand Down Expand Up @@ -114,6 +116,57 @@ class Nameplugin(PluginTemplate):
#### About plugins
[plugins](https://github.com/P0cL4bs/WiFi-Pumpkin/wiki/Plugins) on the wiki

#### TCP/UDP Proxy
A proxy that you can place between in a TCP stream. It filters the request and response streams with ([scapy](http://www.secdev.org/projects/scapy/) module) and actively modify packets of a TCP protocol that gets intercepted by WiFi-Pumpkin. this plugin uses modules to view or modify the intercepted data that possibly easiest implementation of a module, just add your custom module on "plugins/analyzers/" automatically will be listed on TCP/UDP Proxy tab.

``` python
from scapy.all import *
from scapy_http import http # for layer HTTP
from default import PSniffer # base plugin class

class ExamplePlugin(PSniffer):
_activated = False
_instance = None
meta = {
'Name' : 'Example',
'Version' : '1.0',
'Description' : 'Brief description of the new plugin',
'Author' : 'your name',
}
def __init__(self):
for key,value in self.meta.items():
self.__dict__[key] = value

@staticmethod
def getInstance():
if ExamplePlugin._instance is None:
ExamplePlugin._instance = ExamplePlugin()
return ExamplePlugin._instance

def filterPackets(self,pkt): # (pkt) object in order to modify the data on the fly
if pkt.haslayer(http.HTTPRequest): # filter only http request

http_layer = pkt.getlayer(http.HTTPRequest) # get http fields as dict type
ip_layer = pkt.getlayer(IP)# get ip headers fields as dict type

print http_layer.fields['Method'] # show method http request
# show all item in Header request http
for item in http_layer.fields['Headers']:
print('{} : {}'.format(item,http_layer.fields['Headers'][item]))

print ip_layer.fields['src'] # show source ip address
print ip_layer.fields['dst'] # show destiny ip address

print http_layer # show item type dict
print ip_layer # show item type dict

return self.output.emit({'name_module':{'IP': ip_layer.fields,
'Headers': http_layer.fields}})

```
#### About TCP/UDP Proxy
[TCP/UDPProxy](https://github.com/P0cL4bs/WiFi-Pumpkin/wiki/TCP-UDPProxy) on the wiki

### Screenshots
[Screenshot](https://github.com/P0cL4bs/WiFi-Pumpkin/wiki/Screenshots) on the wiki

Expand Down
10 changes: 7 additions & 3 deletions core/config/app/config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,14 @@ hostapd_custom=false
statusAP=false
dhcpd_server=false
pydhcp_server=true
pydns_server=true
dnsproxy_server=false
channel=11
ssid=PumpAP
interfaceAP=None
sessions={}
persistNetwokManager=false
checkConnectionWifi=true
check_support_ap_mode=true
enable_Security=false
WPA_SharedKey=1234567890
Expand Down Expand Up @@ -73,16 +76,17 @@ range=10.0.0.20/10.0.0.50

[dockarea]
advanced=true
dock_credencials=false
dock_credencials=true
dock_urlmonitor=true
dock_bdfproxy=false
dock_dns2proxy=false
dock_responder=false
dock_PumpkinProxy=true
dock_PumpkinProxy=false
dock_tcpproxy=true

[plugins]
noproxy=false
netcreds_plugin=true
tcpproxy_plugin=true
dns2proxy_plugin=false
sergioproxy_plugin=false
bdfproxy_plugin=false
Expand Down
9 changes: 9 additions & 0 deletions core/config/app/tcpproxy.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[plugins]
emails=true
ftp=true
hexdump=true
imageCap=true
httpCap=true
summary=true
kerberos=true
NTLMSSP=true
15 changes: 15 additions & 0 deletions core/config/commits/Lcommits.cfg
Original file line number Diff line number Diff line change
@@ -1,4 +1,19 @@
master:
[
{ Version: '0.8.5'}
{ changelog : 'added new plugin TCP-Proxy' },
{ changelog : 'added capture image HTTP request (Tab ImageCap)' },
{ changelog : 'added new HTTP-request widgets get info from Headers requests' },
{ changelog : 'added new columm (url) on HTTP-Authentication' },
{ changelog : 'added now WF allow to start without internet connection' },
{ changelog : 'added option that exclude USB card on start' },
{ changelog : 'added support to use 2 wireless cards #211' },
{ changelog : 'remove netcreds plugin thks for all DanMcInerney' },
{ changelog : 'added Python DNS Server improvements #165' },
{ changelog : 'added new style in progressbar on home' },
]

WiFiPumpkin084:
[
{ Version: '0.8.4'}
{ changelog : 'added new plugin Pumpkin-Proxy (mitmproxy API)' },
Expand Down
1 change: 0 additions & 1 deletion core/config/hostapd/hostapd+.conf
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ driver=nl80211
#ignore_broadcast_ssid=0 #AP will broadcast SSID
#macaddr_acl=0 #not use MAC address allow/deny list
#auth_algs=1 #Shared Key Authentication
#ignore_broadcast_ssid=0 #AP will broadcast SSID

### hostapd event logger configuration
#logger_syslog=127
Expand Down
6 changes: 2 additions & 4 deletions core/helpers/about.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def __init__(self,parent = None):
self.formMode.addRow(QLabel('<a href="https://github.com/mitmproxy/mitmproxy"><strong>@mitmproxy</strong></a>'))
self.formMode.addRow(QLabel('ProxyServer tranparent HTTP proxy <br>'))
self.formMode.addRow(QLabel('<a href="https://github.com/TimSchumi"><strong>@TimSchumi</strong></a>'))
self.formMode.addRow(QLabel('Debian package build for WiFi-Pumpkin <br>'))
self.formMode.addRow(QLabel('Debian package build and password improvements <br>'))
self.formMode.addRow(QLabel('<a href="https://github.com/psychomario"><strong>@psychomario</strong></a>'))
self.formMode.addRow(QLabel('<a href="https://github.com/psychomario/PyPXE">PyPXE</a> class implements a DHCP Server<br>'))
self.formMode.addRow(QLabel('<a href="https://github.com/xtr4nge"><strong>@xtr4nge</strong></a>'))
Expand All @@ -52,8 +52,6 @@ def __init__(self,parent = None):
self.formMode.addRow(QLabel('Plugin <a href="https://github.com/lgandx/Responder"> Responder</a><br>'))
self.formMode.addRow(QLabel('<a href="https://github.com/supernothing"><strong>Ben Schmidt @supernothing</strong></a>'))
self.formMode.addRow(QLabel('Plugin <a href="https://github.com/supernothing/sergio-proxy">SergioProxy</a> - bypass HSTS<br>'))
self.formMode.addRow(QLabel('<a href="https://github.com/DanMcInerney"><strong>Dan McInerney @danhmcinerney</strong></a>'))
self.formMode.addRow(QLabel('Plugin <a href="https://github.com/DanMcInerney/net-creds">Netcreds</a> - Sniffs sensitive data<br>'))
self.formMode.addRow(QLabel('<a href="http://www.yasinuludag.com/darkorange.stylesheet"><strong>Yasin Uludag</strong></a>'))
self.formMode.addRow(QLabel('theme1.qss - Qt dark orange stylesheet<br>'))
self.formMode.addRow(QLabel('<a href="https://github.com/ColinDuquesnoy/QDarkStyleSheet"><strong>Colin Duquesnoy @ColinDuquesnoy</strong></a>'))
Expand Down Expand Up @@ -118,7 +116,7 @@ def Qui_update(self):
self.formAbout.addRow(QLabel('Feedback:'))
self.formAbout.addRow(QLabel(self.emails[0]))
self.formAbout.addRow(QLabel(self.emails[1]+'<br>'))
self.formAbout.addRow(QLabel('Copyright 2015-2016, '+self.author[:-14]))
self.formAbout.addRow(QLabel('Copyright 2015-2017, '+self.author[:-14]))
self.gnu = QLabel('<a href="link">License: GNU General Public License Version</a><br>')
self.gnu.linkActivated.connect(self.link)
self.formAbout.addRow(self.gnu)
Expand Down
32 changes: 30 additions & 2 deletions core/helpers/report.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@
from PyQt4.QtWebKit import QWebView
except Exception:
QWebView_checker = False
from os import getcwd,listdir
from shutil import copyfile
from os import path,mkdir

"""
Description:
This program is a module for wifi-pumpkin.py. Report FIles Logger PDF or HTML
Copyright:
Copyright (C) 2015-2016 Marcos Nesster P0cl4bs Team
Copyright (C) 2015-2017 Marcos Nesster P0cl4bs Team
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
Expand Down Expand Up @@ -62,13 +65,35 @@ def convertIt(self,printer):
self.ExportPDF.print_(printer)
QMessageBox.information(self, 'WiFi Pumpkin Report PDF', 'file PDF has been generated successfully.')

def getImagesCapturedSession(self,session):
''' find images by session for export '''
list_images = []
if session == '':
for image in listdir('logs/ImagesCap/'):
list_images.append('{}/logs/ImagesCap/{}'.format(getcwd(),image))
return list_images
for image in listdir('logs/ImagesCap'):
if session in image:
list_images.append('{}/logs/ImagesCap/{}'.format(getcwd(),image))
return list_images

def ExportImagesCaptured(self,filename):
''' get images captured on session and copy to folter images_captured '''
if len(filename[0]) != 0:
pathdir = path.dirname(str(filename[0]))+'/images_captured/'
if self.files_images != []:
if not path.exists(pathdir):
mkdir(pathdir)
for file in self.files_images:
copyfile(file,pathdir+path.basename(file))

def exportFilesSystem(self):
# export HTML or pdf file
all_unchecked = self.get_all_items_Unchecked()
if not self.checkHTML.isChecked() and not self.checkPDF.isChecked():
return QMessageBox.warning(self, 'WiFi Pumpkin Options',
'You have to select a <strong>option</strong> file type for export.')
if len(all_unchecked.keys()) == 9:
if len(all_unchecked.keys()) == Refactor.exportHtml(all_unchecked,'')['Count']:
return QMessageBox.warning(self, 'WiFi Pumpkin empty session',
'logger:ERROR Could not find log files.')

Expand All @@ -80,6 +105,7 @@ def exportFilesSystem(self):
[self.sessions[key]['started'],self.sessions[key]['stoped']],apname)
sessions_activated = key
break
self.files_images = self.getImagesCapturedSession(sessions_activated)
if sessions_activated == '':
contents = Refactor.exportHtml(all_unchecked,sessions_activated)

Expand All @@ -102,6 +128,8 @@ def exportFilesSystem(self):
printer.setOutputFileName(filename[0])
self.convertIt(printer)

self.ExportImagesCaptured(filename)

@pyqtSlot(QModelIndex)
def combo_clicked(self, session):
# get activated logger files
Expand Down
25 changes: 24 additions & 1 deletion core/helpers/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
This program is a module for wifi-pumpkin.py. GUI update from github
Copyright:
Copyright (C) 2015 Marcos Nesster P0cl4bs Team
Copyright (C) 2015-2017 Marcos Nesster P0cl4bs Team
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
Expand Down Expand Up @@ -174,10 +174,33 @@ def __init__(self, parent=None, total=0):
font=QFont('White Rabbit')
font.setPointSize(5)
self.setFont(font)
self.effect = QGraphicsOpacityEffect(self)
self.setGraphicsEffect(self.effect)
self.animationIn = QPropertyAnimation(self.effect, 'opacity')
self.animationIn.setDuration(300)
self.animationIn.setStartValue(0)
self.animationIn.setEndValue(1.0)
self.animationIn.start()
self._active = False
self.setAlignment(Qt.AlignCenter)
self._text = None

def hideProcessbar(self):
self.animationOut = QPropertyAnimation(self.effect, 'opacity')
self.animationOut.setDuration(300)
self.animationOut.setStartValue(1.0)
self.animationOut.setEndValue(0)
self.animationOut.start()
self.animationOut.finished.connect(self.hide)

def showProcessBar(self):
self.animationIn = QPropertyAnimation(self.effect, 'opacity')
self.animationIn.setDuration(300)
self.animationIn.setStartValue(0)
self.animationIn.setEndValue(1.0)
self.animationIn.start()
self.show()

def setText(self, text):
self._text = text

Expand Down
File renamed without changes.
Loading

0 comments on commit cc55b63

Please sign in to comment.