pwn 0.4.774 → 0.4.775
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/README.md +2 -2
- data/bin/pwn_jenkins_create_job +4 -4
- data/bin/pwn_jenkins_create_view +4 -4
- data/bin/pwn_jenkins_install_plugin +4 -4
- data/bin/pwn_jenkins_update_plugins +4 -4
- data/bin/pwn_jenkins_useradd +4 -4
- data/lib/pwn/plugins/jenkins.rb +8 -8
- data/lib/pwn/version.rb +1 -1
- data/packer/provisioners/jenkins.sh +9 -4
- data/vagrant/provisioners/jenkins.sh +6 -6
- data/vagrant/provisioners/jenkins_ssh-keygen.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c10eec4ac3e1712691c0031a5883fc2a2e11398748f1823a8d49b6b210e50aff
|
4
|
+
data.tar.gz: 289ca6ece7d3ae829aba16e87e8515e89a1e21e1bbdd2e9eef1aa3b631200f63
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0ac4410338cc0601beca35c142484a4bfadd7ea197b23e24338bd68e8f989c1e233a03d80a26e6dd35ac8169e7053fa039d259a7416bb2037280bff200d6908
|
7
|
+
data.tar.gz: a6289daeb468bf6255fb3594bf43c7fe61e7cb3c009d6b68ef19105675ed6f3e90466a3360b6632ee7709100ef8bd1dbd0c65fe8389c8e84baaf05cbfffb3f63
|
data/Gemfile
CHANGED
@@ -11,14 +11,14 @@ gemspec
|
|
11
11
|
# In some circumstances custom flags are passed to gems in order
|
12
12
|
# to build appropriately. Defer to ./reinstall_pwn_gemset.sh
|
13
13
|
# to review these custom flags (e.g. pg, serialport, etc).
|
14
|
-
gem 'activesupport', '7.0.
|
14
|
+
gem 'activesupport', '7.0.6'
|
15
15
|
gem 'anemone', '0.7.2'
|
16
16
|
gem 'authy', '3.0.1'
|
17
17
|
gem 'aws-sdk', '3.1.0'
|
18
18
|
# gem 'bettercap', '1.6.2'
|
19
19
|
gem 'brakeman', '6.0.0'
|
20
20
|
gem 'bson', '4.15.0'
|
21
|
-
gem 'bundler', '>=2.4.
|
21
|
+
gem 'bundler', '>=2.4.15'
|
22
22
|
gem 'bundler-audit', '0.9.1'
|
23
23
|
gem 'bunny', '2.22.0'
|
24
24
|
gem 'colorize', '1.1.0'
|
data/README.md
CHANGED
@@ -37,7 +37,7 @@ $ rvm use ruby-3.2.2@pwn
|
|
37
37
|
$ rvm list gemsets
|
38
38
|
$ gem install --verbose pwn
|
39
39
|
$ pwn
|
40
|
-
pwn[v0.4.
|
40
|
+
pwn[v0.4.775]:001 >>> PWN.help
|
41
41
|
```
|
42
42
|
|
43
43
|
[![Installing the pwn Security Automation Framework](https://raw.githubusercontent.com/0dayInc/pwn/master/documentation/pwn_install.png)](https://youtu.be/G7iLUY4FzsI)
|
@@ -52,7 +52,7 @@ $ rvm use ruby-3.2.2@pwn
|
|
52
52
|
$ gem uninstall --all --executables pwn
|
53
53
|
$ gem install --verbose pwn
|
54
54
|
$ pwn
|
55
|
-
pwn[v0.4.
|
55
|
+
pwn[v0.4.775]:001 >>> PWN.help
|
56
56
|
```
|
57
57
|
|
58
58
|
|
data/bin/pwn_jenkins_create_job
CHANGED
@@ -10,7 +10,7 @@ OptionParser.new do |options|
|
|
10
10
|
#{$PROGRAM_NAME} [opts]
|
11
11
|
"
|
12
12
|
|
13
|
-
options.on('-sIP', '--
|
13
|
+
options.on('-sIP', '--ip=IP', '<Required - Jenkins Server IP>') { |s| opts[:ip] = s }
|
14
14
|
|
15
15
|
options.on('-dPORT', '--dest-port=PORT', '<Optional - Jenkins Server Port (Defaults to 8080)>') do |port|
|
16
16
|
opts[:port] = port
|
@@ -38,7 +38,7 @@ if opts.empty?
|
|
38
38
|
exit 1
|
39
39
|
end
|
40
40
|
|
41
|
-
|
41
|
+
ip = opts[:ip].to_s.scrub
|
42
42
|
port = opts[:port].to_i
|
43
43
|
username = opts[:username]
|
44
44
|
password = opts[:password]
|
@@ -47,14 +47,14 @@ config_xml = File.read(opts[:config_xml]) if File.exist?(opts[:config_xml])
|
|
47
47
|
|
48
48
|
if port.positive?
|
49
49
|
jenkins_obj = PWN::Plugins::Jenkins.connect(
|
50
|
-
|
50
|
+
ip: ip,
|
51
51
|
port: port,
|
52
52
|
username: username,
|
53
53
|
password: password
|
54
54
|
)
|
55
55
|
else
|
56
56
|
jenkins_obj = PWN::Plugins::Jenkins.connect(
|
57
|
-
|
57
|
+
ip: ip,
|
58
58
|
username: username,
|
59
59
|
password: password
|
60
60
|
)
|
data/bin/pwn_jenkins_create_view
CHANGED
@@ -10,7 +10,7 @@ OptionParser.new do |options|
|
|
10
10
|
#{$PROGRAM_NAME} [opts]
|
11
11
|
"
|
12
12
|
|
13
|
-
options.on('-sIP', '--
|
13
|
+
options.on('-sIP', '--ip=IP', '<Required - Jenkins Server IP>') { |s| opts[:ip] = s }
|
14
14
|
|
15
15
|
options.on('-dPORT', '--dest-port=PORT', '<Optional - Jenkins Server Port (Defaults to 8080)>') do |port|
|
16
16
|
opts[:port] = port
|
@@ -38,7 +38,7 @@ if opts.empty?
|
|
38
38
|
exit 1
|
39
39
|
end
|
40
40
|
|
41
|
-
|
41
|
+
ip = opts[:ip].to_s.scrub
|
42
42
|
port = opts[:port].to_i
|
43
43
|
username = opts[:username]
|
44
44
|
password = opts[:password]
|
@@ -47,14 +47,14 @@ regex_filter = opts[:regex_filter].to_s.chomp.strip.scrub
|
|
47
47
|
|
48
48
|
if port.positive?
|
49
49
|
jenkins_obj = PWN::Plugins::Jenkins.connect(
|
50
|
-
|
50
|
+
ip: ip,
|
51
51
|
port: port,
|
52
52
|
username: username,
|
53
53
|
password: password
|
54
54
|
)
|
55
55
|
else
|
56
56
|
jenkins_obj = PWN::Plugins::Jenkins.connect(
|
57
|
-
|
57
|
+
ip: ip,
|
58
58
|
username: username,
|
59
59
|
password: password
|
60
60
|
)
|
@@ -10,7 +10,7 @@ OptionParser.new do |options|
|
|
10
10
|
#{$PROGRAM_NAME} [opts]
|
11
11
|
"
|
12
12
|
|
13
|
-
options.on('-sIP', '--
|
13
|
+
options.on('-sIP', '--ip=IP', '<Required - Jenkins Server IP>') { |s| opts[:ip] = s }
|
14
14
|
|
15
15
|
options.on('-dPORT', '--dest-port=PORT', '<Optional - Jenkins Server Port (Defaults to 8080)>') do |port|
|
16
16
|
opts[:port] = port
|
@@ -42,7 +42,7 @@ if opts.empty?
|
|
42
42
|
exit 1
|
43
43
|
end
|
44
44
|
|
45
|
-
|
45
|
+
ip = opts[:ip].to_s.scrub
|
46
46
|
port = opts[:port].to_i
|
47
47
|
username = opts[:username]
|
48
48
|
password = opts[:password]
|
@@ -57,14 +57,14 @@ restart_jenkins = opts[:restart_jenkins].nil?
|
|
57
57
|
|
58
58
|
if port.positive?
|
59
59
|
jenkins_obj = PWN::Plugins::Jenkins.connect(
|
60
|
-
|
60
|
+
ip: ip,
|
61
61
|
port: port,
|
62
62
|
username: username,
|
63
63
|
password: password
|
64
64
|
)
|
65
65
|
else
|
66
66
|
jenkins_obj = PWN::Plugins::Jenkins.connect(
|
67
|
-
|
67
|
+
ip: ip,
|
68
68
|
username: username,
|
69
69
|
password: password
|
70
70
|
)
|
@@ -10,7 +10,7 @@ OptionParser.new do |options|
|
|
10
10
|
#{$PROGRAM_NAME} [opts]
|
11
11
|
"
|
12
12
|
|
13
|
-
options.on('-sIP', '--
|
13
|
+
options.on('-sIP', '--ip=IP', '<Required - Jenkins Server IP>') { |s| opts[:ip] = s }
|
14
14
|
|
15
15
|
options.on('-dPORT', '--dest-port=PORT', '<Optional - Jenkins Server Port (Defaults to 8080)>') do |port|
|
16
16
|
opts[:port] = port
|
@@ -42,7 +42,7 @@ if opts.empty?
|
|
42
42
|
exit 1
|
43
43
|
end
|
44
44
|
|
45
|
-
|
45
|
+
ip = opts[:ip].to_s.scrub
|
46
46
|
port = opts[:port].to_i
|
47
47
|
username = opts[:username]
|
48
48
|
password = opts[:password]
|
@@ -57,14 +57,14 @@ restart_jenkins = opts[:restart_jenkins].nil?
|
|
57
57
|
|
58
58
|
if port.positive?
|
59
59
|
jenkins_obj = PWN::Plugins::Jenkins.connect(
|
60
|
-
|
60
|
+
ip: ip,
|
61
61
|
port: port,
|
62
62
|
username: username,
|
63
63
|
password: password
|
64
64
|
)
|
65
65
|
else
|
66
66
|
jenkins_obj = PWN::Plugins::Jenkins.connect(
|
67
|
-
|
67
|
+
ip: ip,
|
68
68
|
username: username,
|
69
69
|
password: password
|
70
70
|
)
|
data/bin/pwn_jenkins_useradd
CHANGED
@@ -10,7 +10,7 @@ OptionParser.new do |options|
|
|
10
10
|
#{$PROGRAM_NAME} [opts]
|
11
11
|
"
|
12
12
|
|
13
|
-
options.on('-sIP', '--
|
13
|
+
options.on('-sIP', '--ip=IP', '<Required - Jenkins Server IP>') { |s| opts[:ip] = s }
|
14
14
|
|
15
15
|
options.on('-dPORT', '--dest-port=PORT', '<Optional - Jenkins Server Port (Defaults to 8080)>') do |port|
|
16
16
|
opts[:port] = port
|
@@ -46,7 +46,7 @@ if opts.empty?
|
|
46
46
|
exit 1
|
47
47
|
end
|
48
48
|
|
49
|
-
|
49
|
+
ip = opts[:ip].to_s.scrub
|
50
50
|
port = opts[:port].to_i
|
51
51
|
|
52
52
|
admin_username = opts[:admin_username]
|
@@ -59,14 +59,14 @@ new_email = opts[:new_email]
|
|
59
59
|
|
60
60
|
if port.positive?
|
61
61
|
jenkins_obj = PWN::Plugins::Jenkins.connect(
|
62
|
-
|
62
|
+
ip: ip,
|
63
63
|
port: port,
|
64
64
|
username: admin_username,
|
65
65
|
password: admin_password
|
66
66
|
)
|
67
67
|
else
|
68
68
|
jenkins_obj = PWN::Plugins::Jenkins.connect(
|
69
|
-
|
69
|
+
ip: ip,
|
70
70
|
username: admin_username,
|
71
71
|
password: admin_password
|
72
72
|
)
|
data/lib/pwn/plugins/jenkins.rb
CHANGED
@@ -12,7 +12,7 @@ module PWN
|
|
12
12
|
|
13
13
|
# Supported Method Parameters::
|
14
14
|
# PWN::Plugins::Jenkins.connect(
|
15
|
-
#
|
15
|
+
# ip: 'required host/ip of Jenkins Server',
|
16
16
|
# port: 'optional tcp port (defaults to 8080),
|
17
17
|
# username: 'optional username (functionality will be limited if ommitted)',
|
18
18
|
# password: 'optional password (functionality will be limited if ommitted)'
|
@@ -22,14 +22,14 @@ module PWN
|
|
22
22
|
# )
|
23
23
|
|
24
24
|
public_class_method def self.connect(opts = {})
|
25
|
-
|
25
|
+
ip = opts[:ip]
|
26
26
|
port = if opts[:port]
|
27
27
|
opts[:port].to_i
|
28
28
|
else
|
29
29
|
8080
|
30
30
|
end
|
31
31
|
username = opts[:username].to_s.scrub
|
32
|
-
base_jenkins_api_uri = "https://#{
|
32
|
+
base_jenkins_api_uri = "https://#{ip}/ase/services".to_s.scrub
|
33
33
|
password = opts[:password].to_s.scrub
|
34
34
|
identity_file = opts[:identity_file].to_s.scrub
|
35
35
|
ssl_bool = if opts[:ssl] == true
|
@@ -45,11 +45,11 @@ module PWN
|
|
45
45
|
proxy_port = proxy.port
|
46
46
|
end
|
47
47
|
|
48
|
-
@@logger.info("Logging into Jenkins Server: #{
|
48
|
+
@@logger.info("Logging into Jenkins Server: #{ip}")
|
49
49
|
if username == '' && password == ''
|
50
50
|
if identity_file == ''
|
51
51
|
jenkins_obj = JenkinsApi::Client.new(
|
52
|
-
server_ip:
|
52
|
+
server_ip: ip,
|
53
53
|
server_port: port,
|
54
54
|
follow_redirects: true,
|
55
55
|
ssl: ssl_bool,
|
@@ -59,7 +59,7 @@ module PWN
|
|
59
59
|
)
|
60
60
|
else
|
61
61
|
jenkins_obj = JenkinsApi::Client.new(
|
62
|
-
server_ip:
|
62
|
+
server_ip: ip,
|
63
63
|
server_port: port,
|
64
64
|
identity_file: identity_file,
|
65
65
|
follow_redirects: true,
|
@@ -72,7 +72,7 @@ module PWN
|
|
72
72
|
else
|
73
73
|
password = PWN::Plugins::AuthenticationHelper.mask_password if password == ''
|
74
74
|
jenkins_obj = JenkinsApi::Client.new(
|
75
|
-
server_ip:
|
75
|
+
server_ip: ip,
|
76
76
|
server_port: port,
|
77
77
|
username: username,
|
78
78
|
password: password,
|
@@ -452,7 +452,7 @@ module PWN
|
|
452
452
|
public_class_method def self.help
|
453
453
|
puts %{USAGE:
|
454
454
|
jenkins_obj = #{self}.connect(
|
455
|
-
|
455
|
+
ip: 'required host/ip of Jenkins Server',
|
456
456
|
port: 'optional tcp port (defaults to 8080),
|
457
457
|
username: 'optional username (functionality will be limited if ommitted)',
|
458
458
|
password: 'optional password (functionality will be limited if ommitted)',
|
data/lib/pwn/version.rb
CHANGED
@@ -20,7 +20,12 @@ rvm use ruby-$ruby_version@pwn
|
|
20
20
|
|
21
21
|
printf "Installing Jenkins ********************************************************************"
|
22
22
|
domain_name=`hostname -d`
|
23
|
-
|
23
|
+
curl -fsSL https://pkg.jenkins.io/debian/jenkins.io-2023.key | sudo tee \
|
24
|
+
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
|
25
|
+
|
26
|
+
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
|
27
|
+
https://pkg.jenkins.io/debian binary/ | sudo tee \
|
28
|
+
/etc/apt/sources.list.d/jenkins.list > /dev/null
|
24
29
|
|
25
30
|
# Get back to a Java version Jenkins supports
|
26
31
|
sudo ln -sf /usr/lib/jvm/java-11-openjdk-amd64/bin/java /etc/alternatives/java
|
@@ -51,12 +56,12 @@ echo "JENKINS Initial Admin: ${initial_admin_pwd}"
|
|
51
56
|
|
52
57
|
# TODO: Get this working
|
53
58
|
# printf "Updating Pre-Installed Jenkins Plugins ************************************************"
|
54
|
-
# pwn_jenkins_update_plugins --
|
59
|
+
# pwn_jenkins_update_plugins --ip 127.0.0.1 -U admin --api-key $initial_admin_pwd --no-restart-jenkins
|
55
60
|
|
56
61
|
printf "Installing Necessary Jenkins Plugins **************************************************"
|
57
|
-
pwn_jenkins_install_plugin --
|
62
|
+
pwn_jenkins_install_plugin --ip 127.0.0.1 \
|
58
63
|
-d 8888 \
|
59
64
|
-U admin \
|
60
|
-
-
|
65
|
+
--api-key $initial_admin_pwd \
|
61
66
|
--no-restart-jenkins \
|
62
67
|
-p "ace-editor, analysis-core, ansicolor, ant, antisamy-markup-formatter, apache-httpcomponents-client-4-api, bouncycastle-api, build-pipeline-plugin, bulk-builder, command-launcher, conditional-buildstep, credentials, dashboard-view, dependency-check-jenkins-plugin, dependency-track, display-url-api, external-monitor-job, git, git-client, handlebars, htmlpublisher, jackson2-api, javadoc, jdk-tool, jquery, jquery-detached, jquery-ui, jsch, junit, ldap, log-parser, mailer, matrix-auth, matrix-project, maven-plugin, momentjs, nested-view, pam-auth, parameterized-trigger, pipeline-build-step, pipeline-graph-analysis, pipeline-input-step, pipeline-rest-api, pipeline-stage-step, pipeline-stage-view, plain-credentials, purge-build-queue-plugin, role-strategy, run-condition, scm-api, script-security, slack, ssh-agent, ssh-credentials, ssh-slaves, structs, token-macro, windows-slaves, workflow-api, workflow-cps, workflow-job, workflow-scm-step, workflow-step-api, workflow-support"
|
@@ -33,7 +33,7 @@ printf "Creating Self-Update and PWN-Template Jobs *****************************
|
|
33
33
|
ls $jenkins_userland_root/jobs/*.xml | while read jenkins_xml_config; do
|
34
34
|
file_name=`basename $jenkins_xml_config`
|
35
35
|
job_name=${file_name%.*}
|
36
|
-
pwn_jenkins_create_job --
|
36
|
+
pwn_jenkins_create_job --ip 127.0.0.1 \
|
37
37
|
-d 8888 \
|
38
38
|
-U admin \
|
39
39
|
-P $initial_admin_pwd \
|
@@ -48,7 +48,7 @@ if [[ $? == 0 ]]; then
|
|
48
48
|
ls $jenkins_userland_root/jobs_userland/*.xml | while read jenkins_xml_config; do
|
49
49
|
file_name=`basename $jenkins_xml_config`
|
50
50
|
job_name=${file_name%.*}
|
51
|
-
pwn_jenkins_create_job --
|
51
|
+
pwn_jenkins_create_job --ip 127.0.0.1 \
|
52
52
|
-d 8888 \
|
53
53
|
-U admin \
|
54
54
|
-P $initial_admin_pwd \
|
@@ -58,28 +58,28 @@ if [[ $? == 0 ]]; then
|
|
58
58
|
fi
|
59
59
|
|
60
60
|
printf "Creating Jenkins Views ****************************************************************"
|
61
|
-
pwn_jenkins_create_view --
|
61
|
+
pwn_jenkins_create_view --ip 127.0.0.1 \
|
62
62
|
-d 8888 \
|
63
63
|
-U admin \
|
64
64
|
-P $initial_admin_pwd \
|
65
65
|
-v 'PWN-Templates' \
|
66
66
|
-r '^pwntemplate-.+$'
|
67
67
|
|
68
|
-
pwn_jenkins_create_view --
|
68
|
+
pwn_jenkins_create_view --ip 127.0.0.1 \
|
69
69
|
-d 8888 \
|
70
70
|
-U admin \
|
71
71
|
-P $initial_admin_pwd \
|
72
72
|
-v 'Self-Update' \
|
73
73
|
-r '^selfupdate-.+$'
|
74
74
|
|
75
|
-
pwn_jenkins_create_view --
|
75
|
+
pwn_jenkins_create_view --ip 127.0.0.1 \
|
76
76
|
-d 8888 \
|
77
77
|
-U admin \
|
78
78
|
-P $initial_admin_pwd \
|
79
79
|
-v 'Pipeline' \
|
80
80
|
-r '^pipeline-.+$'
|
81
81
|
|
82
|
-
pwn_jenkins_create_view --
|
82
|
+
pwn_jenkins_create_view --ip 127.0.0.1 \
|
83
83
|
-d 8888 \
|
84
84
|
-U admin \
|
85
85
|
-P $initial_admin_pwd \
|
@@ -43,7 +43,7 @@ puts `
|
|
43
43
|
|
44
44
|
# TODO: Create Jenkins SSH Credentials for all hosts referenced in vagrant.yaml (User-Land Config)
|
45
45
|
jenkins_obj = PWN::Plugins::Jenkins.connect(
|
46
|
-
|
46
|
+
ip: '127.0.0.1',
|
47
47
|
port: 8888,
|
48
48
|
username: userland_user,
|
49
49
|
password: userland_pass
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pwn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.775
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 0day Inc.
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 7.0.
|
19
|
+
version: 7.0.6
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 7.0.
|
26
|
+
version: 7.0.6
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: anemone
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,14 +100,14 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 2.4.
|
103
|
+
version: 2.4.15
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 2.4.
|
110
|
+
version: 2.4.15
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: bundler-audit
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -2155,7 +2155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
2155
2155
|
- !ruby/object:Gem::Version
|
2156
2156
|
version: '0'
|
2157
2157
|
requirements: []
|
2158
|
-
rubygems_version: 3.4.
|
2158
|
+
rubygems_version: 3.4.15
|
2159
2159
|
signing_key:
|
2160
2160
|
specification_version: 4
|
2161
2161
|
summary: Automated Security Testing for CI/CD Pipelines & Beyond
|