Skip to content

Commit 6b6fd1e

Browse files
author
GomoR
committed
- Version: 4.15
- New: Onyphe::Api: Ondemand Scope Port Single API - New: Onyphe::Api: ASD Tld API - New: Onyphe::Api: ASD Ns API - New: Onyphe::Api: ASD Task API - New: Onyphe::Api: added support for ASD Tld API - New: Onyphe::Api: support for displaying total number of results when using Search API - New: Onyphe::Api: support for POST Export API calls - New: onyphe: -trusted argument - Bugfix: OPP: catch errors on decoding or encoding JSON content
1 parent 138cf9d commit 6b6fd1e

File tree

8 files changed

+275
-22
lines changed

8 files changed

+275
-22
lines changed

Changes

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
Revision history for Perl extension Onyphe.
22

3+
4.15 Thu 15 Aug 13:22:56 CEST 2024
4+
- New: Onyphe::Api: Ondemand Scope Port Single API
5+
- New: Onyphe::Api: ASD Tld API
6+
- New: Onyphe::Api: ASD Ns API
7+
- New: Onyphe::Api: ASD Task API
8+
- New: Onyphe::Api: added support for ASD Tld API
9+
- New: Onyphe::Api: support for displaying total number of results when using Search API
10+
- New: Onyphe::Api: support for POST Export API calls
11+
- New: onyphe: -trusted argument
12+
- Bugfix: OPP: catch errors on decoding or encoding JSON content
13+
314
4.14 Thu 28 Mar 11:24:29 CET 2024
415
- New: Onyphe::Api: Ondemand Scope Hostname API
516
- New: Onyphe::Api: Ondemand Scope Hostname Bulk API

META.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,11 @@
174174
},
175175
"Onyphe" : {
176176
"file" : "lib/Onyphe.pm",
177-
"version" : "4.14"
177+
"version" : "4.15"
178178
},
179179
"Onyphe::Api" : {
180180
"file" : "lib/Onyphe/Api.pm",
181-
"version" : "4.14"
181+
"version" : "4.15"
182182
}
183183
},
184184
"release_status" : "stable",
@@ -187,6 +187,6 @@
187187
"http://opensource.org/licenses/BSD-3-Clause"
188188
]
189189
},
190-
"version" : "4.14",
190+
"version" : "4.15",
191191
"x_serialization_backend" : "JSON::PP version 4.06"
192192
}

META.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,10 @@ provides:
114114
version: '1.00'
115115
Onyphe:
116116
file: lib/Onyphe.pm
117-
version: '4.14'
117+
version: '4.15'
118118
Onyphe::Api:
119119
file: lib/Onyphe/Api.pm
120-
version: '4.14'
120+
version: '4.15'
121121
requires:
122122
Carp: '0'
123123
Config::INI::Tiny: '0'
@@ -136,5 +136,5 @@ requires:
136136
Tie::IxHash: '0'
137137
resources:
138138
license: http://opensource.org/licenses/BSD-3-Clause
139-
version: '4.14'
139+
version: '4.15'
140140
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'

bin/onyphe

Lines changed: 82 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
#!/usr/bin/env perl
22
#
3-
# $Id: onyphe,v 45178b147667 2024/03/27 14:29:16 gomor $
3+
# $Id: onyphe,v b6fb1a68219a 2024/08/15 11:22:51 gomor $
44
#
55
use strict;
66
use warnings;
77

8-
our $VERSION = '4.00';
9-
108
use Getopt::Long;
119
use Onyphe::Api;
1210
use OPP;
@@ -48,6 +46,8 @@ GetOptions(
4846
"riskscan=i" => \$lopts{'riskscan'}, # -riskscan 1
4947
"asm=i" => \$lopts{'asm'}, # -asm 1
5048
"import=i" => \$lopts{'import'}, # -import 1
49+
"count" => \$lopts{'count'}, # -count
50+
"trusted=i" => \$lopts{'trusted'}, # -trusted 0
5151
# APIs:
5252
"user" => \$lopts{user}, # -user
5353
"summary=s" => \$lopts{summary}, # -summary ip|domain|hostname
@@ -60,6 +60,7 @@ GetOptions(
6060
"search" => \$lopts{search}, # -search
6161
"postsearch" => \$lopts{postsearch}, # -postsearch
6262
"export" => \$lopts{export}, # -export
63+
"postexport" => \$lopts{postexport}, # -postexport
6364
"alert-list" => \$lopts{'alert-list'}, # -alert-list
6465
"alert-add" => \$lopts{'alert-add'}, # -alert-add
6566
"alert-del=s" => \$lopts{'alert-del'}, # -alert-del 0
@@ -72,9 +73,13 @@ GetOptions(
7273
"ondemand-scope-domain-bulk=s" => \$lopts{'ondemand-scope-domain-bulk'}, # -ondemand-scope-domain-bulk INPUT.txt
7374
"ondemand-scope-hostname=s" => \$lopts{'ondemand-scope-hostname'}, # -ondemand-scope-hostname HOSTNAME
7475
"ondemand-scope-hostname-bulk=s" => \$lopts{'ondemand-scope-hostname-bulk'}, # -ondemand-scope-hostname-bulk INPUT.txt
76+
"ondemand-scope-port=s" => \$lopts{'ondemand-scope-port'}, # -ondemand-scope-port PORT
7577
"ondemand-scope-result=s" => \$lopts{'ondemand-scope-result'}, # -ondemand-scope-result ID
7678
"ondemand-resolver-domain=s" => \$lopts{'ondemand-resolver-domain'}, # -ondemand-resolver-domain DOMAIN
7779
"ondemand-resolver-result=s" => \$lopts{'ondemand-resolver-result'}, # -ondemand-resolver-result ID
80+
"asd-tld=s" => \$lopts{'asd-tld'}, # -asd-tld DOMAIN1,DOMAIN2 | input.txt
81+
"asd-ns=s" => \$lopts{'asd-ns'}, # -asd-ns DOMAIN1,DOMAIN2 | input.txt
82+
"asd-task=s" => \$lopts{'asd-task'}, # -asd-task TASKID
7883
) or exit(0);
7984

8085
if ($lopts{help}) {
@@ -211,6 +216,11 @@ elsif ($lopts{discovery}) {
211216
elsif ($lopts{search}) {
212217
my $params;
213218
$params->{size} = $lopts{size} if defined($lopts{size});
219+
if ($lopts{count}) {
220+
$params->{size} = 1;
221+
$lopts{maxpage} = 1;
222+
$params->{count} = 1;
223+
}
214224
$oa->search($oql, 1, $lopts{maxpage}, $params, $opp_perl_cb, $opl); # But is also in config()
215225
}
216226
elsif ($lopts{postsearch}) {
@@ -222,6 +232,11 @@ elsif ($lopts{export}) {
222232
my $params;
223233
$oa->export($oql, $params, $opp_json_cb, $opl);
224234
}
235+
elsif ($lopts{postexport}) {
236+
my $params;
237+
$params->{size} = $lopts{size} if defined($lopts{size});
238+
$oa->post_export($oql, $params, $opp_json_cb, $opl); # But is also in config()
239+
}
225240
elsif ($lopts{'alert-list'}) {
226241
$oa->alert_list($opp_perl_cb, $opl);
227242
}
@@ -279,6 +294,13 @@ elsif (defined($lopts{'ondemand-scope-ip-bulk'})) {
279294
$param->{import} = $lopts{import} if defined $lopts{import};
280295
$oa->ondemand_scope_ip_bulk($v, $param, $opp_perl_cb, $opl);
281296
}
297+
elsif (defined($lopts{'ondemand-scope-port'})) {
298+
my $v = $lopts{'ondemand-scope-port'};
299+
my $param;
300+
$param->{maxscantime} = 24*60*60; # 24-hours forced
301+
$param->{import} = $lopts{import} if defined $lopts{import};
302+
$oa->ondemand_scope_port($v, $param, $opp_perl_cb, $opl);
303+
}
282304
elsif (defined($lopts{'ondemand-scope-domain'})) {
283305
my $v = $lopts{'ondemand-scope-domain'};
284306
my $param;
@@ -353,6 +375,56 @@ elsif (defined($lopts{'ondemand-resolver-result'})) {
353375
$oa->ondemand_resolver_result($v, $param, $opp_perl_cb, $opl);
354376
}
355377
}
378+
elsif (defined($lopts{'asd-tld'})) {
379+
my $v = $lopts{'asd-tld'};
380+
my $param;
381+
$param->{aslines} = $lopts{aslines} if defined $lopts{aslines};
382+
$param->{trusted} = $lopts{trusted} if defined $lopts{trusted};
383+
if (-f $v) { # If its a file, we create the list of values to push
384+
my $list = $oa->asd_load_input($v);
385+
unless (defined($list) && @$list) {
386+
print STDERR "VERBOSE: asd_load_input: failed from bad content or empty content\n";
387+
exit(1);
388+
}
389+
$v = $list;
390+
}
391+
if ($param->{aslines}) {
392+
$oa->asd_tld($v, $param, $opp_json_cb, $opl);
393+
}
394+
else {
395+
$oa->asd_tld($v, $param, $opp_perl_cb, $opl);
396+
}
397+
}
398+
elsif (defined($lopts{'asd-ns'})) {
399+
my $v = $lopts{'asd-ns'};
400+
my $param;
401+
$param->{aslines} = $lopts{aslines} if defined $lopts{aslines};
402+
if (-f $v) { # If its a file, we create the list of values to push
403+
my $list = $oa->asd_load_input($v);
404+
unless (defined($list) && @$list) {
405+
print STDERR "VERBOSE: asd_load_input: failed from bad content or empty content\n";
406+
exit(1);
407+
}
408+
$v = $list;
409+
}
410+
if ($param->{aslines}) {
411+
$oa->asd_ns($v, $param, $opp_json_cb, $opl);
412+
}
413+
else {
414+
$oa->asd_ns($v, $param, $opp_perl_cb, $opl);
415+
}
416+
}
417+
elsif (defined($lopts{'asd-task'})) {
418+
my $v = $lopts{'asd-task'};
419+
my $param;
420+
$param->{aslines} = $lopts{aslines} if defined $lopts{aslines};
421+
if ($param->{aslines}) {
422+
$oa->asd_task($v, $param, $opp_json_cb, $opl);
423+
}
424+
else {
425+
$oa->asd_task($v, $param, $opp_perl_cb, $opl);
426+
}
427+
}
356428
else {
357429
usage();
358430
}
@@ -370,6 +442,7 @@ Usage: onyphe [options] -user
370442
onyphe [options] -search 'OQL'
371443
onyphe [options] -postsearch 'OQL'
372444
onyphe [options] -export 'OQL'
445+
onyphe [options] -postexport 'OQL'
373446
onyphe [options] -discovery datascan 'input.txt'
374447
onyphe [options] -simple datascan 'IP'
375448
onyphe [options] -simple-best whois 'IP'
@@ -401,13 +474,15 @@ API options:
401474
-riskscan <0|1> turn off/on riskscan detection step in scan mode
402475
-asm <0|1> turn off/on ASM step in scan mode
403476
-import <0|1> turn off/on import of results into ONYPHE
477+
-trusted <0|1> turn off/on trusted results from ONYPHE ASD APIs
404478
405479
APIs:
406480
407481
-user '| OPP' get information on your license
408482
-search 'OQL | OPP' use Search API for query
409483
-postsearch 'OQL | OPP' use Search API for query, POST version
410484
-export 'OQL | OPP' use Export API for query
485+
-postexport 'OQL | OPP' use Export API for query, POST version
411486
-discovery CATEGORY 'input.txt | OPP' use Discovery API on CATEGORY for query
412487
-simple CATEGORY 'OQL | OPP' use Simple API on CATEGORY for query
413488
-simple-best CATEGORY 'OQL | OPP' use Simple Best API on CATEGORY for query
@@ -426,9 +501,13 @@ APIs:
426501
-ondemand-scope-domain-bulk 'input.txt' use Ondemand Scope Domain Bulk API to launch a scan against a given list of domain from an input file
427502
-ondemand-scope-hostname 'HOSTNAME' use Ondemand Scope Hostname API to launch a scan against given hostname
428503
-ondemand-scope-hostname-bulk 'input.txt' use Ondemand Scope Hostname Bulk API to launch a scan against a given list of hostname from an input file
504+
-ondemand-scope-port PORT use Ondemand Scope Port API to launch a scan against a given port on full IPv4 address space
429505
-ondemand-scope-result \$scan_id use Ondemand Scope Result API with Scan ID
430506
-ondemand-resolver-domain 'DOMAIN' use Ondemand Resolver Domain API to launch a DNS enumeration and resolution against given domain
431507
-ondemand-resolver-result \$scan_id use Ondemand Resolver Result API with Scan ID
508+
-asd-tld DOMAIN1,DOMAIN2,...|input.txt use ASD Tld API to find related domains by TLDs
509+
-asd-ns DOMAIN1,DOMAIN2,...|input.txt use ASD Ns API to find related domains by using nameservers
510+
-asd-task TASKID use ASD Task API to retrieve an ASD Task results
432511
433512
EOF
434513
;

lib/OPP.pm

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# $Id: OPP.pm,v dd33ef647b17 2024/03/14 13:56:07 gomor $
2+
# $Id: OPP.pm,v 3a89adb8d30e 2024/08/09 08:44:28 gomor $
33
#
44
package OPP;
55
use strict;
@@ -333,7 +333,15 @@ sub to_json {
333333
for (@$doc) {
334334
my $docs = $self->order($_) or next;
335335
for my $doc (@$docs) {
336-
push @json, encode_json($doc);
336+
my $json;
337+
eval {
338+
$json = encode_json($doc);
339+
};
340+
if ($@) { # Silently discard in case of error
341+
next;
342+
}
343+
next unless defined $json;
344+
push @json, $json;
337345
}
338346
}
339347

@@ -342,12 +350,22 @@ sub to_json {
342350

343351
sub from_json {
344352
my $self = shift;
345-
my ($doc) = @_;
353+
my ($docs) = @_;
346354

347-
$doc = ref($doc) eq 'ARRAY' ? $doc : [ $doc ];
355+
$docs = ref($docs) eq 'ARRAY' ? $docs : [ $docs ];
348356

349357
my @json = ();
350-
push @json, decode_json($_) for @$doc;
358+
for my $doc (@$docs) {
359+
my $json;
360+
eval {
361+
$json = decode_json($doc);
362+
};
363+
if ($@) { # Silently discard in case of error
364+
next;
365+
}
366+
next unless defined $json;
367+
push @json, $json;
368+
}
351369

352370
return $self->order(\@json);
353371
}

lib/OPP/Proc.pm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# $Id: Proc.pm,v 683f32a81df6 2024/03/07 08:31:39 gomor $
2+
# $Id: Proc.pm,v c0575c37c27d 2024/05/06 13:15:26 james $
33
#
44
package OPP::Proc;
55
use strict;
@@ -253,9 +253,9 @@ sub placeholder {
253253
my $values = $self->value($flat, $holder);
254254
for my $value (@$values) {
255255
while ($copy =~ s{(\S+)\s*:\s*\$$holder}{$1:$value}) { }
256-
$searches{$copy}++; # Make them unique
257256
}
258257
}
258+
$searches{$copy}++; # Make them unique
259259
260260
return [ keys %searches ];
261261
}

lib/Onyphe.pm

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
#
2-
# $Id: Onyphe.pm,v 1a6ad59d015b 2024/02/16 09:27:25 gomor $
2+
# $Id: Onyphe.pm,v 2a4e09d0b48b 2024/08/08 13:34:07 gomor $
33
#
44
package Onyphe;
55
use strict;
66
use warnings;
77

8-
our $VERSION = '4.14';
8+
our $VERSION = '4.15';
99

1010
use experimental qw(signatures);
1111

@@ -42,6 +42,7 @@ sub init ($self, $file = undef) {
4242
$config->{''}{api_keepalive} ||= 0;
4343
$config->{''}{api_endpoint} ||= 'https://www.onyphe.io/api/v2';
4444
$config->{''}{api_ondemand_endpoint} ||= $config->{''}{api_endpoint};
45+
$config->{''}{api_asd_endpoint} ||= $config->{''}{api_endpoint};
4546

4647
if ($self->verbose) {
4748
for my $k (keys %{$config->{''}}) {

0 commit comments

Comments
 (0)