lol
1{ lib
2, stdenv
3, fetchFromGitHub
4, makeWrapper
5, ruby
6, bundlerEnv
7, python3
8}:
9
10let
11 env = bundlerEnv {
12 inherit ruby;
13 name = "metasploit-bundler-env";
14 gemdir = ./.;
15 };
16in stdenv.mkDerivation rec {
17 pname = "metasploit-framework";
18 version = "6.4.9";
19
20 src = fetchFromGitHub {
21 owner = "rapid7";
22 repo = "metasploit-framework";
23 rev = "refs/tags/${version}";
24 hash = "sha256-0f7kpzeOY6EbFb7LRZc/J5lFYcf21HC6H6q0+qtTcao=";
25 };
26
27 nativeBuildInputs = [
28 makeWrapper
29 ];
30
31 buildInputs = [
32 (python3.withPackages (ps: [ ps.requests ]))
33 ];
34
35 dontPatchELF = true; # stay away from exploit executables
36
37 installPhase = ''
38 mkdir -p $out/{bin,share/msf}
39
40 cp -r * $out/share/msf
41
42 grep -rl "^#\!.*python2$" $out/share/msf | xargs -d '\n' rm
43
44 (
45 cd $out/share/msf/
46 for i in msf*; do
47 makeWrapper ${env}/bin/bundle $out/bin/$i \
48 --add-flags "exec ${ruby}/bin/ruby $out/share/msf/$i"
49 done
50 )
51
52 makeWrapper ${env}/bin/bundle $out/bin/msf-pattern_create \
53 --add-flags "exec ${ruby}/bin/ruby $out/share/msf/tools/exploit/pattern_create.rb"
54
55 makeWrapper ${env}/bin/bundle $out/bin/msf-pattern_offset \
56 --add-flags "exec ${ruby}/bin/ruby $out/share/msf/tools/exploit/pattern_offset.rb"
57 '';
58
59 # run with: nix-shell maintainers/scripts/update.nix --argstr path metasploit
60 passthru.updateScript = ./update.sh;
61
62 meta = with lib; {
63 description = "Metasploit Framework - a collection of exploits";
64 homepage = "https://docs.metasploit.com/";
65 platforms = platforms.unix;
66 license = licenses.bsd3;
67 maintainers = with maintainers; [ fab makefu ];
68 mainProgram = "msfconsole";
69 };
70}