From 3d00274a88a76a13a14122199ccb93cb73369c36 Mon Sep 17 00:00:00 2001 From: Joshua Becigneul Date: Fri, 16 May 2014 11:31:11 -0400 Subject: [PATCH 1/5] Added support for Secure-24 VPN requiring password, pin+tokencode on the main page. Created Secure-24 specific config file. --- jvpn.ini | 6 ++++++ jvpn.pl | 35 +++++++++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/jvpn.ini b/jvpn.ini index 7b06995..0102265 100644 --- a/jvpn.ini +++ b/jvpn.ini @@ -46,6 +46,12 @@ mode=ncsvc # format password=interactive +# Two-Factor support: +# To use a VPN that requires username and password and some sort of pin, set: +# token=interactive +# To disable, set it to 0. +token=0 + # enable host checker support. This will require JRE to run tncc.jar process. # It is recommended to enable only if your VPN server require this hostchecker=0 diff --git a/jvpn.pl b/jvpn.pl index 947ebc4..55268cc 100755 --- a/jvpn.pl +++ b/jvpn.pl @@ -54,8 +54,10 @@ my $mode=$Config{"mode"}; my $script=$Config{"script"}; my $cfgpass=$Config{"password"}; +my $cfgtoken=$Config{"token"}; my $workdir=$Config{"workdir"}; my $password=""; +my $password2=""; my $hostchecker=$Config{"hostchecker"}; my $tncc_pid = 0; @@ -139,7 +141,7 @@ } if ($cfgpass eq "interactive") { - print "Enter PIN+password: "; + print "Enter Password: "; $password=read_input("password"); print "\n"; } @@ -153,15 +155,32 @@ $password=run_pw_helper($1); } +if ($cfgtoken eq "interactive") { + print "Enter PIN+Tokencode: "; + $password2=read_input("password"); + print "\n"; +} + my $response_body = ''; -my $res = $ua->post("https://$dhost:$dport/dana-na/auth/$durl/login.cgi", - [ btnSubmit => 'Sign In', - password => $password, - realm => $realm, - tz => '60', - username => $username, - ]); +if ($cfgtoken eq "interactive") { + my $res = $ua->post("https://$dhost:$dport/dana-na/auth/$durl/login.cgi", + [ btnSubmit => 'Sign In', + password => $password, + "password#2" => $password2, + realm => $realm, + tz => '60', + username => $username, + ]); +} else { + my $res = $ua->post("https://$dhost:$dport/dana-na/auth/$durl/login.cgi", + [ btnSubmit => 'Sign In', + password => $password, + realm => $realm, + tz => '60', + username => $username, + ]); +} $response_body=$res->decoded_content; my $dsid=""; From bb304882e70e3c07b26f00f7b9caa1e03b90e687 Mon Sep 17 00:00:00 2001 From: Joshua Becigneul Date: Fri, 16 May 2014 11:40:12 -0400 Subject: [PATCH 2/5] Squash bugs --- jvpn.pl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jvpn.pl b/jvpn.pl index 55268cc..05687db 100755 --- a/jvpn.pl +++ b/jvpn.pl @@ -162,9 +162,9 @@ } my $response_body = ''; - +my $res; if ($cfgtoken eq "interactive") { - my $res = $ua->post("https://$dhost:$dport/dana-na/auth/$durl/login.cgi", + $res = $ua->post("https://$dhost:$dport/dana-na/auth/$durl/login.cgi", [ btnSubmit => 'Sign In', password => $password, "password#2" => $password2, @@ -173,7 +173,7 @@ username => $username, ]); } else { - my $res = $ua->post("https://$dhost:$dport/dana-na/auth/$durl/login.cgi", + $res = $ua->post("https://$dhost:$dport/dana-na/auth/$durl/login.cgi", [ btnSubmit => 'Sign In', password => $password, realm => $realm, From dd90747cb5ec0db35eee032077628bf0b9c6813d Mon Sep 17 00:00:00 2001 From: Joshua Becigneul Date: Wed, 28 May 2014 20:54:15 -0400 Subject: [PATCH 3/5] *Fixed support for deleting active sessions --- jvpn.pl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/jvpn.pl b/jvpn.pl index 05687db..1036d90 100755 --- a/jvpn.pl +++ b/jvpn.pl @@ -302,11 +302,13 @@ } # active sessions found if ($response_body =~ /id="DSIDConfirmForm"/) { - $response_body =~ m/name="FormDataStr" value="([^"]+)"/; + my $formDataStr = $1 if ($response_body =~ m/FormDataStr" value="([^"]+)/); + my $postfixSid = $1 if ($response_body =~ m/postfixSID" value="([^"]+)"/); print "Active sessions found, reconnecting...\n"; $res = $ua->post("https://$dhost:$dport/dana-na/auth/$durl/login.cgi", - [ btnContinue => 'Continue the session', - FormDataStr => $1, + [ btnContinue => 'Close Selected Sessions and Log in', + FormDataStr => $formDataStr, + PostfixSID => $postfixSid, ]); $response_body=$res->decoded_content; } From 9d36eb8c1953c57887a2a4ea303c3ed740385753 Mon Sep 17 00:00:00 2001 From: Joshua Becigneul Date: Thu, 5 Jun 2014 12:23:45 -0400 Subject: [PATCH 4/5] Added support for new changes in perl-LWP-Protocol-https. --- jvpn.pl | 1 + 1 file changed, 1 insertion(+) diff --git a/jvpn.pl b/jvpn.pl index 1036d90..f76d298 100755 --- a/jvpn.pl +++ b/jvpn.pl @@ -114,6 +114,7 @@ # on RHEL6 ssl_opts is not exists if(defined &LWP::UserAgent::ssl_opts) { $ua->ssl_opts('verify_hostname' => $verifycert); + $ua->ssl_opts('SSL_verify_mode' => $verifycert); } $ua->cookie_jar({}); push @{ $ua->requests_redirectable }, 'POST'; From f198908fb42d5f491d051c05339141f7d96f9acd Mon Sep 17 00:00:00 2001 From: Joshua Becigneul Date: Thu, 2 Oct 2014 21:40:19 -0400 Subject: [PATCH 5/5] Reorder user data input so that LWP initialization comes later. This fixes an issue where login fails after the script has been waiting for user input. --- jvpn.pl | 56 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/jvpn.pl b/jvpn.pl index f76d298..0f9b2f3 100755 --- a/jvpn.pl +++ b/jvpn.pl @@ -110,6 +110,35 @@ exit 1; } + +if (!defined($username) || $username eq "" || $username eq "interactive") { + print "Enter username: "; + $username=read_input(); + print "\n"; +} + +if ($cfgpass eq "interactive") { + print "Enter Password: "; + $password=read_input("password"); + print "\n"; +} +elsif ($cfgpass =~ /^plaintext:(.+)/) { + print "Using user-defined password\n"; + $password=$1; + chomp($password); +} +elsif ($cfgpass =~ /^helper:(.+)/) { + print "Using user-defined script to get the password\n"; + $password=run_pw_helper($1); +} + +if ($cfgtoken eq "interactive") { + print "Enter PIN+Tokencode: "; + $password2=read_input("password"); + print "\n"; +} + + my $ua = LWP::UserAgent->new; # on RHEL6 ssl_opts is not exists if(defined &LWP::UserAgent::ssl_opts) { @@ -135,33 +164,6 @@ $ua->add_handler("response_done", sub { shift->dump; return }); } -if (!defined($username) || $username eq "" || $username eq "interactive") { - print "Enter username: "; - $username=read_input(); - print "\n"; -} - -if ($cfgpass eq "interactive") { - print "Enter Password: "; - $password=read_input("password"); - print "\n"; -} -elsif ($cfgpass =~ /^plaintext:(.+)/) { - print "Using user-defined password\n"; - $password=$1; - chomp($password); -} -elsif ($cfgpass =~ /^helper:(.+)/) { - print "Using user-defined script to get the password\n"; - $password=run_pw_helper($1); -} - -if ($cfgtoken eq "interactive") { - print "Enter PIN+Tokencode: "; - $password2=read_input("password"); - print "\n"; -} - my $response_body = ''; my $res; if ($cfgtoken eq "interactive") {