Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
routersploit
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
czos-dpend
routersploit
Commits
dfae76c1
Unverified
Commit
dfae76c1
authored
6 years ago
by
Marcin Bury
Committed by
GitHub
6 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixing options, adding encoder option (#515)
parent
e6864eb0
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
287 additions
and
70 deletions
+287
-70
option.py
routersploit/core/exploit/option.py
+57
-47
interpreter.py
routersploit/interpreter.py
+0
-7
bind_tcp.py
routersploit/modules/payloads/perl/bind_tcp.py
+2
-2
reverse_tcp.py
routersploit/modules/payloads/perl/reverse_tcp.py
+2
-2
bind_tcp.py
routersploit/modules/payloads/php/bind_tcp.py
+2
-2
reverse_tcp.py
routersploit/modules/payloads/php/reverse_tcp.py
+2
-2
bind_tcp.py
routersploit/modules/payloads/python/bind_tcp.py
+2
-2
bind_udp.py
routersploit/modules/payloads/python/bind_udp.py
+2
-2
reverse_tcp.py
routersploit/modules/payloads/python/reverse_tcp.py
+2
-2
reverse_udp.py
routersploit/modules/payloads/python/reverse_udp.py
+2
-2
__init__.py
tests/core/__init__.py
+0
-0
test_option.py
tests/core/test_option.py
+214
-0
No files found.
routersploit/core/exploit/option.py
View file @
dfae76c1
...
...
@@ -15,28 +15,22 @@ class Option(object):
self
.
label
=
None
self
.
description
=
description
self
.
default
=
default
self
.
display_value
=
default
self
.
value
=
default
if
default
:
self
.
__set__
(
""
,
default
)
else
:
self
.
display_value
=
""
self
.
value
=
""
def
__get__
(
self
,
instance
,
owner
):
return
self
.
value
def
__set__
(
self
,
instance
,
value
):
if
self
.
_apply_widget
(
value
):
self
.
display_value
=
value
self
.
value
=
value
def
set_label
(
self
,
label
):
self
.
label
=
label
class
OptIP
(
Option
):
""" Option IP attribute """
def
_
apply_widget
(
self
,
value
):
if
is_ipv4
(
value
)
or
is_ipv6
(
value
):
return
value
def
_
_set__
(
self
,
instance
,
value
):
if
not
value
or
is_ipv4
(
value
)
or
is_ipv6
(
value
):
self
.
value
=
self
.
display_value
=
value
else
:
raise
OptionValidationError
(
"Invalid address. Provided address is not valid IPv4 or IPv6 address."
)
...
...
@@ -44,26 +38,23 @@ class OptIP(Option):
class
OptPort
(
Option
):
""" Option Port attribute """
def
_
apply_widget
(
self
,
value
):
def
_
_set__
(
self
,
instance
,
value
):
try
:
value
=
int
(
value
)
if
0
<
value
<=
65535
:
# max port number is 65535
return
value
self
.
display_value
=
str
(
value
)
self
.
value
=
value
else
:
raise
OptionValidationError
(
"Invalid option. Port value should be between 0 and 65536."
)
except
ValueError
:
raise
OptionValidationError
(
"Invalid option. Cannot cast '{}' to integer."
.
format
(
value
))
def
__get__
(
self
,
instance
,
owner
):
return
int
(
self
.
value
)
class
OptBool
(
Option
):
""" Option Bool attribute """
def
__init__
(
self
,
default
,
description
=
""
):
self
.
label
=
None
self
.
description
=
description
if
default
:
...
...
@@ -73,25 +64,24 @@ class OptBool(Option):
self
.
value
=
default
def
_apply_widget
(
self
,
value
):
if
value
in
[
"true"
,
"false"
]:
return
value
def
__set__
(
self
,
instance
,
value
):
if
value
==
"true"
:
self
.
value
=
True
self
.
display_value
=
value
elif
value
==
"false"
:
self
.
value
=
False
self
.
display_value
=
value
else
:
raise
OptionValidationError
(
"Invalid value. It should be true or false."
)
def
__get__
(
self
,
instance
,
owner
):
if
self
.
display_value
==
"true"
:
return
True
return
False
class
OptInteger
(
Option
):
""" Option Integer attribute """
def
_
apply_widget
(
self
,
value
):
def
_
_set__
(
self
,
instance
,
value
):
try
:
return
int
(
value
)
self
.
display_value
=
str
(
value
)
self
.
value
=
int
(
value
)
except
ValueError
:
raise
OptionValidationError
(
"Invalid option. Cannot cast '{}' to integer."
.
format
(
value
))
...
...
@@ -99,9 +89,10 @@ class OptInteger(Option):
class
OptFloat
(
Option
):
""" Option Float attribute """
def
_
apply_widget
(
self
,
value
):
def
_
_set__
(
self
,
instance
,
value
):
try
:
return
float
(
value
)
self
.
display_value
=
str
(
value
)
self
.
value
=
float
(
value
)
except
ValueError
:
raise
OptionValidationError
(
"Invalid option. Cannot cast '{}' to float."
.
format
(
value
))
...
...
@@ -109,9 +100,9 @@ class OptFloat(Option):
class
OptString
(
Option
):
""" Option String attribute """
def
_
apply_widget
(
self
,
value
):
def
_
_set__
(
self
,
instance
,
value
):
try
:
return
str
(
value
)
self
.
value
=
self
.
display_value
=
str
(
value
)
except
ValueError
:
raise
OptionValidationError
(
"Invalid option. Cannot cast '{}' to string."
.
format
(
value
))
...
...
@@ -119,25 +110,16 @@ class OptString(Option):
class
OptMAC
(
Option
):
""" Option MAC attribute """
def
_
apply_widget
(
self
,
value
):
def
_
_set__
(
self
,
instance
,
value
):
regexp
=
r"^[a-f\d]{1,2}:[a-f\d]{1,2}:[a-f\d]{1,2}:[a-f\d]{1,2}:[a-f\d]{1,2}:[a-f\d]{1,2}$"
if
re
.
match
(
regexp
,
value
.
lower
()):
return
value
self
.
value
=
self
.
display_value
=
value
else
:
raise
OptionValidationError
(
"Invalid option. '{}' is not a valid MAC address"
.
format
(
value
))
class
OptWordlist
(
Option
):
""" Option Wordlist attribtue """
def
_apply_widget
(
self
,
value
):
if
value
.
startswith
(
"file://"
):
path
=
value
.
replace
(
"file://"
,
""
)
if
not
os
.
path
.
exists
(
path
):
raise
OptionValidationError
(
"File '{}' does not exist."
.
format
(
path
))
return
value
return
value
""" Option Wordlist attribute """
def
__get__
(
self
,
instance
,
owner
):
if
self
.
display_value
.
startswith
(
"file://"
):
...
...
@@ -149,4 +131,32 @@ class OptWordlist(Option):
return
self
.
display_value
.
split
(
","
)
def
__set__
(
self
,
instance
,
value
):
if
value
.
startswith
(
"file://"
):
path
=
value
.
replace
(
"file://"
,
""
)
if
not
os
.
path
.
exists
(
path
):
raise
OptionValidationError
(
"File '{}' does not exist."
.
format
(
path
))
self
.
value
=
self
.
display_value
=
value
class
OptEncoder
(
Option
):
""" Option Encoder attribute """
def
__init__
(
self
,
default
,
description
=
""
):
self
.
description
=
description
if
default
:
self
.
display_value
=
default
self
.
value
=
default
else
:
self
.
display_value
=
""
self
.
value
=
None
def
__set__
(
self
,
instance
,
value
):
encoder
=
instance
.
get_encoder
(
value
)
if
encoder
:
self
.
value
=
encoder
self
.
display_value
=
value
else
:
raise
OptionValidationError
(
"Encoder not available. Check available encoders with `show encoders`."
)
This diff is collapsed.
Click to expand it.
routersploit/interpreter.py
View file @
dfae76c1
...
...
@@ -345,13 +345,6 @@ class RoutersploitInterpreter(BaseInterpreter):
def
command_set
(
self
,
*
args
,
**
kwargs
):
key
,
_
,
value
=
args
[
0
]
.
partition
(
" "
)
if
key
in
self
.
current_module
.
options
:
if
key
==
"encoder"
:
value
=
self
.
current_module
.
get_encoder
(
value
)
if
not
value
:
print_error
(
"Encoder not available. Check available encoders with `show encoders`."
)
return
setattr
(
self
.
current_module
,
key
,
value
)
self
.
current_module
.
exploit_attributes
[
key
][
0
]
=
value
...
...
This diff is collapsed.
Click to expand it.
routersploit/modules/payloads/perl/bind_tcp.py
View file @
dfae76c1
from
routersploit.core.exploit.option
import
Opt
String
from
routersploit.core.exploit.option
import
Opt
Encoder
from
routersploit.core.exploit.payloads
import
(
GenericPayload
,
Architectures
,
...
...
@@ -17,7 +17,7 @@ class Payload(BindTCPPayloadMixin, GenericPayload):
}
architecture
=
Architectures
.
PERL
encoder
=
Opt
String
(
Encoder
(),
"Encoder"
)
encoder
=
Opt
Encoder
(
Encoder
(),
"Encoder"
)
def
generate
(
self
):
return
(
...
...
This diff is collapsed.
Click to expand it.
routersploit/modules/payloads/perl/reverse_tcp.py
View file @
dfae76c1
from
routersploit.core.exploit.option
import
Opt
String
from
routersploit.core.exploit.option
import
Opt
Encoder
from
routersploit.core.exploit.payloads
import
(
GenericPayload
,
Architectures
,
...
...
@@ -17,7 +17,7 @@ class Payload(ReverseTCPPayloadMixin, GenericPayload):
}
architecture
=
Architectures
.
PERL
encoder
=
Opt
String
(
Encoder
(),
"Encoder"
)
encoder
=
Opt
Encoder
(
Encoder
(),
"Encoder"
)
def
generate
(
self
):
return
(
...
...
This diff is collapsed.
Click to expand it.
routersploit/modules/payloads/php/bind_tcp.py
View file @
dfae76c1
from
routersploit.core.exploit.option
import
Opt
String
from
routersploit.core.exploit.option
import
Opt
Encoder
from
routersploit.core.exploit.payloads
import
(
GenericPayload
,
Architectures
,
...
...
@@ -18,7 +18,7 @@ class Payload(BindTCPPayloadMixin, GenericPayload):
}
architecture
=
Architectures
.
PHP
encoder
=
Opt
String
(
Encoder
(),
"Encoder"
)
encoder
=
Opt
Encoder
(
Encoder
(),
"Encoder"
)
def
generate
(
self
):
return
(
...
...
This diff is collapsed.
Click to expand it.
routersploit/modules/payloads/php/reverse_tcp.py
View file @
dfae76c1
from
routersploit.core.exploit.option
import
Opt
String
from
routersploit.core.exploit.option
import
Opt
Encoder
from
routersploit.core.exploit.payloads
import
(
GenericPayload
,
Architectures
,
...
...
@@ -17,7 +17,7 @@ class Payload(ReverseTCPPayloadMixin, GenericPayload):
}
architecture
=
Architectures
.
PHP
encoder
=
Opt
String
(
Encoder
(),
"Encoder"
)
encoder
=
Opt
Encoder
(
Encoder
(),
"Encoder"
)
def
generate
(
self
):
return
(
...
...
This diff is collapsed.
Click to expand it.
routersploit/modules/payloads/python/bind_tcp.py
View file @
dfae76c1
from
routersploit.core.exploit.option
import
Opt
String
from
routersploit.core.exploit.option
import
Opt
Encoder
from
routersploit.core.exploit.payloads
import
(
GenericPayload
,
Architectures
,
...
...
@@ -17,7 +17,7 @@ class Payload(BindTCPPayloadMixin, GenericPayload):
}
architecture
=
Architectures
.
PYTHON
encoder
=
Opt
String
(
Encoder
(),
"Encoder"
)
encoder
=
Opt
Encoder
(
Encoder
(),
"Encoder"
)
def
generate
(
self
):
return
(
...
...
This diff is collapsed.
Click to expand it.
routersploit/modules/payloads/python/bind_udp.py
View file @
dfae76c1
from
routersploit.core.exploit.option
import
Opt
String
from
routersploit.core.exploit.option
import
Opt
Encoder
from
routersploit.core.exploit.payloads
import
(
GenericPayload
,
Architectures
,
...
...
@@ -18,7 +18,7 @@ class Payload(BindTCPPayloadMixin, GenericPayload):
}
architecture
=
Architectures
.
PYTHON
encoder
=
Opt
String
(
Encoder
(),
"Encoder"
)
encoder
=
Opt
Encoder
(
Encoder
(),
"Encoder"
)
def
generate
(
self
):
return
(
...
...
This diff is collapsed.
Click to expand it.
routersploit/modules/payloads/python/reverse_tcp.py
View file @
dfae76c1
from
routersploit.core.exploit.option
import
Opt
String
from
routersploit.core.exploit.option
import
Opt
Encoder
from
routersploit.core.exploit.payloads
import
(
GenericPayload
,
Architectures
,
...
...
@@ -17,7 +17,7 @@ class Payload(ReverseTCPPayloadMixin, GenericPayload):
}
architecture
=
Architectures
.
PYTHON
encoder
=
Opt
String
(
Encoder
(),
"Encoder"
)
encoder
=
Opt
Encoder
(
Encoder
(),
"Encoder"
)
def
generate
(
self
):
return
(
...
...
This diff is collapsed.
Click to expand it.
routersploit/modules/payloads/python/reverse_udp.py
View file @
dfae76c1
from
routersploit.core.exploit.option
import
Opt
String
from
routersploit.core.exploit.option
import
Opt
Encoder
from
routersploit.core.exploit.payloads
import
(
GenericPayload
,
Architectures
,
...
...
@@ -18,7 +18,7 @@ class Payload(ReverseTCPPayloadMixin, GenericPayload):
}
architecture
=
Architectures
.
PYTHON
encoder
=
Opt
String
(
Encoder
(),
"Encoder"
)
encoder
=
Opt
Encoder
(
Encoder
(),
"Encoder"
)
def
generate
(
self
):
return
(
...
...
This diff is collapsed.
Click to expand it.
tests/core/__init__.py
0 → 100644
View file @
dfae76c1
This diff is collapsed.
Click to expand it.
tests/core/test_option.py
0 → 100644
View file @
dfae76c1
from
routersploit.modules.encoders.php.hex
import
Encoder
as
PHPHexEncoder
from
routersploit.core.exploit.exceptions
import
OptionValidationError
from
routersploit.core.exploit.option
import
(
OptIP
,
OptPort
,
OptInteger
,
OptFloat
,
OptBool
,
OptString
,
OptMAC
,
OptWordlist
,
OptEncoder
,
)
def
test_opt_ip
():
# Test OptIP creation
opt_ip
=
OptIP
(
""
,
"Test IP Description"
)
assert
opt_ip
.
description
==
"Test IP Description"
assert
opt_ip
.
display_value
==
""
assert
opt_ip
.
value
==
""
assert
opt_ip
.
__get__
(
None
,
None
)
==
""
# Test OptIP setting to empty value
opt_ip
.
__set__
(
None
,
""
)
assert
opt_ip
.
value
==
""
assert
opt_ip
.
display_value
==
""
assert
opt_ip
.
__get__
(
None
,
None
)
==
""
# Test OptIP setting to 192.168.1.1
opt_ip
.
__set__
(
None
,
"192.168.1.1"
)
assert
opt_ip
.
value
==
"192.168.1.1"
assert
opt_ip
.
display_value
==
"192.168.1.1"
assert
opt_ip
.
__get__
(
None
,
None
)
==
"192.168.1.1"
# Test OptIP setting to InvalidIP value
try
:
opt_ip
.
__set__
(
None
,
"InvalidIP"
)
assert
False
except
OptionValidationError
:
assert
True
def
test_opt_port
():
# Test OptPort creation
opt_port
=
OptPort
(
80
,
"Test Port Description"
)
assert
opt_port
.
description
==
"Test Port Description"
assert
opt_port
.
display_value
==
"80"
assert
opt_port
.
value
==
80
assert
opt_port
.
__get__
(
None
,
None
)
==
80
# Test OptPort setting to 4444
opt_port
.
__set__
(
None
,
4444
)
assert
opt_port
.
display_value
==
"4444"
assert
opt_port
.
value
==
4444
assert
opt_port
.
__get__
(
None
,
None
)
==
4444
# Test OptPort setting to 0
try
:
opt_port
.
__set__
(
None
,
0
)
assert
False
except
OptionValidationError
:
assert
True
# Test OptPort setting to 65536
try
:
opt_port
.
__set__
(
None
,
65536
)
assert
False
except
OptionValidationError
:
assert
True
def
test_opt_bool
():
# Test OptBool creation
opt_bool
=
OptBool
(
True
,
"Test Bool Description"
)
assert
opt_bool
.
description
==
"Test Bool Description"
assert
opt_bool
.
display_value
==
"true"
assert
opt_bool
.
value
assert
opt_bool
.
__get__
(
None
,
None
)
# Test OptBool setting to false
opt_bool
.
__set__
(
None
,
"false"
)
assert
opt_bool
.
display_value
==
"false"
assert
not
opt_bool
.
value
assert
not
opt_bool
.
__get__
(
None
,
None
)
# Test OptBool setting to true
opt_bool
.
__set__
(
None
,
"true"
)
assert
opt_bool
.
display_value
==
"true"
assert
opt_bool
.
value
assert
opt_bool
.
__get__
(
None
,
None
)
# Test OptBool setting to invalid value
try
:
opt_bool
.
__set__
(
None
,
"Invalid Value"
)
assert
False
except
OptionValidationError
:
assert
True
def
test_opt_integer
():
# Test OptInteger creation
opt_integer
=
OptInteger
(
4444
,
"Test Integer Description"
)
assert
opt_integer
.
description
==
"Test Integer Description"
assert
opt_integer
.
display_value
==
"4444"
assert
opt_integer
.
value
==
4444
assert
opt_integer
.
__get__
(
None
,
None
)
==
4444
# Test OptInteger setting to -1
opt_integer
.
__set__
(
None
,
-
1
)
assert
opt_integer
.
display_value
==
"-1"
assert
opt_integer
.
value
==
-
1
assert
opt_integer
.
__get__
(
None
,
None
)
==
-
1
# Test OptInteger setting to 9999999
opt_integer
.
__set__
(
None
,
9999999
)
assert
opt_integer
.
display_value
==
"9999999"
assert
opt_integer
.
value
==
9999999
assert
opt_integer
.
__get__
(
None
,
None
)
==
9999999
# Test OptInteget setting to invalid value
try
:
opt_integer
.
__set__
(
None
,
"Invalid Value"
)
assert
False
except
OptionValidationError
:
assert
True
def
test_opt_float
():
# Test OptFloat creation
opt_float
=
OptFloat
(
3.14
,
"Test Float Description"
)
assert
opt_float
.
description
==
"Test Float Description"
assert
opt_float
.
display_value
==
"3.14"
assert
opt_float
.
value
==
3.14
assert
opt_float
.
__get__
(
None
,
None
)
==
3.14
# Test OptFloat setting to -1
opt_float
.
__set__
(
None
,
-
1
)
assert
opt_float
.
display_value
==
"-1"
assert
opt_float
.
value
==
-
1
assert
opt_float
.
__get__
(
None
,
None
)
==
-
1
# Test OptFloat setting to 999.9999
opt_float
.
__set__
(
None
,
999.9999
)
assert
opt_float
.
display_value
==
"999.9999"
assert
opt_float
.
value
==
999.9999
assert
opt_float
.
__get__
(
None
,
None
)
==
999.9999
# Test OptFloat setting to invalid value
try
:
opt_float
.
__set__
(
None
,
"Invalid Value"
)
assert
False
except
OptionValidationError
:
assert
True
def
test_opt_string
():
# Test OptString creation
opt_string
=
OptString
(
"Test"
,
"Test String Description"
)
assert
opt_string
.
description
==
"Test String Description"
assert
opt_string
.
display_value
==
"Test"
assert
opt_string
.
value
==
"Test"
assert
opt_string
.
__get__
(
None
,
None
)
==
"Test"
# Test OptString setting to "AAAABBBBCCCCDDDD"
opt_string
.
__set__
(
None
,
"AAAABBBBCCCCDDDD"
)
assert
opt_string
.
display_value
==
"AAAABBBBCCCCDDDD"
assert
opt_string
.
value
==
"AAAABBBBCCCCDDDD"
assert
opt_string
.
__get__
(
None
,
None
)
==
"AAAABBBBCCCCDDDD"
def
test_opt_mac
():
# Test OptMAC creation
opt_mac
=
OptMAC
(
"AA:BB:CC:DD:EE:FF"
,
"Test MAC Description"
)
assert
opt_mac
.
description
==
"Test MAC Description"
assert
opt_mac
.
display_value
==
"AA:BB:CC:DD:EE:FF"
assert
opt_mac
.
value
==
"AA:BB:CC:DD:EE:FF"
assert
opt_mac
.
__get__
(
None
,
None
)
==
"AA:BB:CC:DD:EE:FF"
# Test OptMAC setting to dd:ee:ff:dd:ee:ff
opt_mac
.
__set__
(
None
,
"dd:ee:ff:dd:ee:ff"
)
assert
opt_mac
.
display_value
==
"dd:ee:ff:dd:ee:ff"
assert
opt_mac
.
value
==
"dd:ee:ff:dd:ee:ff"
assert
opt_mac
.
__get__
(
None
,
None
)
==
"dd:ee:ff:dd:ee:ff"
# Test OptMAC setting to invalid value
try
:
opt_mac
.
__set__
(
None
,
"Invalid Value"
)
assert
False
except
OptionValidationError
:
assert
True
def
test_opt_wordlist
():
# Test OptWordlist creation
opt_wordlist
=
OptWordlist
(
""
,
"Test Wordlist Description"
)
assert
opt_wordlist
.
description
==
"Test Wordlist Description"
assert
opt_wordlist
.
display_value
==
""
assert
opt_wordlist
.
value
==
""
assert
opt_wordlist
.
__get__
(
None
,
None
)
==
[
""
]
# Test OptWordlist setting to admin,test
opt_wordlist
.
__set__
(
None
,
"admin,test"
)
assert
opt_wordlist
.
display_value
==
"admin,test"
assert
opt_wordlist
.
value
==
"admin,test"
assert
opt_wordlist
.
__get__
(
None
,
None
)
==
[
"admin"
,
"test"
]
def
test_opt_encoder
():
# Test OptEncoder creation
opt_encoder
=
OptEncoder
(
PHPHexEncoder
(),
"Test Encoder Description"
)
assert
opt_encoder
.
description
==
"Test Encoder Description"
assert
str
(
opt_encoder
.
display_value
)
==
"php/hex"
assert
type
(
opt_encoder
.
display_value
)
==
PHPHexEncoder
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment