diff options
author | Tony Lambiris | 2017-09-11 20:40:38 -0400 |
---|---|---|
committer | Tony Lambiris | 2017-09-11 20:40:38 -0400 |
commit | 01f306302ed73f0b764c73989b0f806d78cfb46e (patch) | |
tree | fc8bf6c47b1173d0324f587580b1b2ea0af7d2e0 | |
download | aur-01f306302ed73f0b764c73989b0f806d78cfb46e.tar.gz |
Initial commit
-rw-r--r-- | .SRCINFO | 37 | ||||
-rw-r--r-- | PKGBUILD | 81 | ||||
-rw-r--r-- | added-a-services-column-in-the-host-table-view-with-filter.patch | 200 | ||||
-rw-r--r-- | armitage.desktop | 10 | ||||
-rw-r--r-- | armitage.install | 26 | ||||
-rw-r--r-- | database.yml | 10 | ||||
-rw-r--r-- | metasploit.default | 15 | ||||
-rw-r--r-- | metasploit.png | bin | 0 -> 6124 bytes | |||
-rw-r--r-- | metasploit.service | 13 | ||||
-rwxr-xr-x | metasploit.sh | 3 | ||||
-rw-r--r-- | ui-change-menu-items-list-from-8-to-24.patch | 13 |
11 files changed, 408 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..12299a273347 --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,37 @@ +pkgbase = armitage-git + pkgdesc = Metasploit GUI Front ened written in java + pkgver = 1248.c8ca6c0 + pkgrel = 1 + url = http://www.fastandeasyhacking.com/ + install = armitage.install + arch = any + license = GPL + makedepends = apache-ant + depends = metasploit + depends = java-environment + depends = postgresql + provides = armitage + conflicts = armitage + source = armitage::git+https://github.com/rsmudge/armitage + source = armitage.install + source = armitage.desktop + source = metasploit.png + source = metasploit.sh + source = database.yml + source = metasploit.service + source = metasploit.default + source = added-a-services-column-in-the-host-table-view-with-filter.patch + source = ui-change-menu-items-list-from-8-to-24.patch + sha256sums = SKIP + sha256sums = d5a89e87e81e0169652147681a7c17657b8ced14f90e0e38fa15fac4b6ad5a8d + sha256sums = 02c829495ebfb171146e2b02f1c2470f814c41b6c80f0649f59ac62609d18689 + sha256sums = 7d25e47bbd5cd710020c30fb645229a774672c7bcb451a0cf2fd6ba327d8b141 + sha256sums = 7869413529c5529b9a0f2bcaaa2be1480382c2f91eb505e43a4f9e1c1eab2d71 + sha256sums = b4b4e77895712d16ab9d7402ee53fafcb34c667b7394ae7136d6686be8ee1a2f + sha256sums = ac521ad84eddf680c50c90bbeab3de5c3141da856702de8ac8c31e1ef66154e0 + sha256sums = df69997f77fb6460d5f7aba0ff5b592eef5890ce52d2f9e2614e8836fc56eade + sha256sums = 7d7565a6095de77def21960409a3c57a1583246042af7e21bf6367f0bf23380e + sha256sums = 0aa46b5583ba21126eaa60279617af3e8380e6d927b5a836ae7bada7de31a94d + +pkgname = armitage-git + diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..e9886f48cd64 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,81 @@ +# Maintainer: Tony Lambiris <tony@criticalstack.com> + +pkgname=armitage-git +gitname=armitage +pkgver=1248.c8ca6c0 +pkgrel=1 +pkgdesc="Metasploit GUI Front ened written in java" +url="http://www.fastandeasyhacking.com/" +arch=('any') +license=('GPL') +depends=('metasploit' 'java-environment' 'postgresql') +makedepends=('apache-ant') +conflicts=('armitage') +provides=('armitage') +install='armitage.install' + +source=( "${gitname}::git+https://github.com/rsmudge/armitage" + 'armitage.install' 'armitage.desktop' 'metasploit.png' 'metasploit.sh' + 'database.yml' 'metasploit.service' 'metasploit.default' + 'added-a-services-column-in-the-host-table-view-with-filter.patch' + 'ui-change-menu-items-list-from-8-to-24.patch') + +sha256sums=('SKIP' + 'd5a89e87e81e0169652147681a7c17657b8ced14f90e0e38fa15fac4b6ad5a8d' + '02c829495ebfb171146e2b02f1c2470f814c41b6c80f0649f59ac62609d18689' + '7d25e47bbd5cd710020c30fb645229a774672c7bcb451a0cf2fd6ba327d8b141' + '7869413529c5529b9a0f2bcaaa2be1480382c2f91eb505e43a4f9e1c1eab2d71' + 'b4b4e77895712d16ab9d7402ee53fafcb34c667b7394ae7136d6686be8ee1a2f' + 'ac521ad84eddf680c50c90bbeab3de5c3141da856702de8ac8c31e1ef66154e0' + 'df69997f77fb6460d5f7aba0ff5b592eef5890ce52d2f9e2614e8836fc56eade' + '7d7565a6095de77def21960409a3c57a1583246042af7e21bf6367f0bf23380e' + '0aa46b5583ba21126eaa60279617af3e8380e6d927b5a836ae7bada7de31a94d') + +pkgver() { + cd "${gitname}" + + echo $(git rev-list --count master).$(git rev-parse --short master) +} + +prepare() { + cd "${gitname}" + + patch -p1 -i "${srcdir}/added-a-services-column-in-the-host-table-view-with-filter.patch" + patch -p1 -i "${srcdir}/ui-change-menu-items-list-from-8-to-24.patch" +} + +build() { + cd "${gitname}" + + ant clean + ant compile + cp -r resources/ bin/ + cp -r scripts/ bin/ + ant jar +} + +package() { + cd "${gitname}" + + mkdir -p "${pkgdir}/opt/${gitname}" "${pkgdir}/usr/bin" + cp -rv armitage.jar cortana.jar readme.txt whatsnew.txt dist/unix/* \ + "${pkgdir}/opt/${gitname}" + + cat > "${pkgdir}/opt/${gitname}/armitage" <<-EOF +#!/bin/sh +cd /opt/armitage +java -XX:+UseParallelGC -jar armitage.jar $@ +EOF + + ln -s -t "${pkgdir}/usr/bin" "/opt/${gitname}/armitage" + + install -Dm755 "${srcdir}/metasploit.sh" "${pkgdir}/etc/profile.d/metasploit.sh" + install -Dm644 "${srcdir}/armitage.desktop" "${pkgdir}/usr/share/applications/armitage.desktop" + install -Dm644 "${srcdir}/metasploit.png" "${pkgdir}/usr/share/icons/metasploit.png" + install -Dm755 "${srcdir}/metasploit.sh" "${pkgdir}/etc/profile.d/metasploit.sh" + install -Dm644 "${srcdir}/database.yml" "${pkgdir}/usr/share/metasploit/database.yml.sample" + install -Dm644 "${srcdir}/metasploit.service" "${pkgdir}/usr/lib/systemd/system/metasploit.service" + install -Dm644 "${srcdir}/metasploit.default" "${pkgdir}/etc/default/metasploit" +} + +# vim:set ts=2 sw=2 et: diff --git a/added-a-services-column-in-the-host-table-view-with-filter.patch b/added-a-services-column-in-the-host-table-view-with-filter.patch new file mode 100644 index 000000000000..4d64cdf768c4 --- /dev/null +++ b/added-a-services-column-in-the-host-table-view-with-filter.patch @@ -0,0 +1,200 @@ +diff --git a/scripts/targets.sl b/scripts/targets.sl +index 864f7518..b1e431f1 100644 +--- a/scripts/targets.sl ++++ b/scripts/targets.sl +@@ -122,6 +122,12 @@ on sessions { + } + } + ++ # refresh our service port table ++ local('$services $service $svc_string $port_string $host2 $port $proto $name'); ++ call_async_callback($mclient, "db.services", $this); ++ yield; ++ $services = convertAll($1); ++ + # create a data structure with id, description, icon, and tooltip + foreach $id => $host (%hosts) { + local('$tooltip'); +@@ -132,8 +138,23 @@ on sessions { + $tooltip = "I know nothing about $id"; + } + ++ $svc_string = ""; ++ if ('services' in $services) { ++ foreach $service ($services['services']) { ++ ($host2, $port, $name) = values($service, @('host', 'port', 'name')); ++ if($host2 eq $id) { ++ $port_string = $name . "(" . $port . ")"; ++ if($svc_string eq "") { ++ $svc_string = $port_string; ++ } else { ++ $svc_string = $svc_string . "," . $port_string; ++ } ++ } ++ } ++ } ++ + if ($host['show'] eq "1") { +- [$refresh addNode: $id, $host['label'] . "", describeHost($host), showHost($host), $tooltip]; ++ [$refresh addNode: $id, $svc_string, $host['label'] . "", describeHost($host), showHost($host), $tooltip]; + } + } + +diff --git a/src/graph/NetworkGraph.java b/src/graph/NetworkGraph.java +index 859b0ffe..3f3d0784 100644 +--- a/src/graph/NetworkGraph.java ++++ b/src/graph/NetworkGraph.java +@@ -445,7 +445,7 @@ public void setRoutes(Route[] routes) { + + protected Map tooltips = new HashMap(); + +- public Object addNode(String id, String label, String description, Image image, String tooltip) { ++ public Object addNode(String id, String services, String label, String description, Image image, String tooltip) { + nodeImages.put(id, image); + + if (label.length() > 0) { +diff --git a/src/graph/RefreshGraph.java b/src/graph/RefreshGraph.java +index 803b26c9..76fdea98 100644 +--- a/src/graph/RefreshGraph.java ++++ b/src/graph/RefreshGraph.java +@@ -17,6 +17,7 @@ + + private static class Node { + public String id = ""; ++ public String services = ""; + public String label = ""; + public String description = ""; + public Image iconz = null; +@@ -36,9 +37,10 @@ public void addRoute(Route route) { + routes.add(route); + } + +- public void addNode(String id, String label, String description, Image iconz, String tooltip) { ++ public void addNode(String id, String services, String label, String description, Image iconz, String tooltip) { + Node n = new Node(); + n.id = id; ++ n.services = services; + n.label = label; + n.description = description; + n.iconz = iconz; +@@ -60,7 +62,7 @@ public void run() { + Iterator i = nodes.iterator(); + while (i.hasNext()) { + Node n = (Node)i.next(); +- graph.addNode(n.id, n.label, n.description, n.iconz, n.tooltip); ++ graph.addNode(n.id, n.services, n.label, n.description, n.iconz, n.tooltip); + } + + /* setup routes */ +diff --git a/src/graph/Refreshable.java b/src/graph/Refreshable.java +index 47d740fe..6d1739d8 100644 +--- a/src/graph/Refreshable.java ++++ b/src/graph/Refreshable.java +@@ -7,7 +7,7 @@ + public void start(); + + /* add a node */ +- public Object addNode(String id, String label, String description, Image image, String tooltip); ++ public Object addNode(String id, String services, String label, String description, Image image, String tooltip); + + /* setup all of our routes in one fell swoop */ + public void setRoutes(Route[] routes); +diff --git a/src/table/NetworkTable.java b/src/table/NetworkTable.java +index da265458..c29811a9 100644 +--- a/src/table/NetworkTable.java ++++ b/src/table/NetworkTable.java +@@ -15,6 +15,7 @@ + import graph.Route; + import graph.GraphPopup; + import graph.Refreshable; ++import java.util.regex.PatternSyntaxException; + + public class NetworkTable extends JComponent implements ActionListener, Refreshable { + protected JScrollPane scroller = null; +@@ -48,15 +49,17 @@ public NetworkTable() { + } + + protected GenericTableModel model; ++ protected TableRowSorter sorter; ++ protected JTextField searchField; + protected JTable table; + protected int height; + + public NetworkTable(Properties display) { + this.display = display; + +- model = new GenericTableModel(new String[] { " ", "Address", "Label", "Description", "Pivot" }, "Address", 256); ++ model = new GenericTableModel(new String[] { " ", "Address", "Services", "Label", "Description", "Pivot" }, "Address", 256); + table = new ATable(model); +- TableRowSorter sorter = new TableRowSorter(model); ++ sorter = new TableRowSorter(model); + sorter.toggleSortOrder(1); + + Comparator hostCompare = new Comparator() { +@@ -152,13 +155,47 @@ public void all(MouseEvent ev) { + public void mouseReleased(MouseEvent ev) { all(ev); } + }); + +- setLayout(new BorderLayout()); ++ searchField = new JTextField(""); ++ searchField.getDocument().addDocumentListener(new DocumentListener() { ++ @Override public void insertUpdate(DocumentEvent e) { ++ fireDocumentChangeEvent(); ++ } ++ @Override public void removeUpdate(DocumentEvent e) { ++ fireDocumentChangeEvent(); ++ } ++ @Override public void changedUpdate(DocumentEvent e) { /* not needed */ } ++ }); ++ fireDocumentChangeEvent(); ++ ++ JPanel searchPanel = new JPanel(new BorderLayout()); ++ searchPanel.add(new JLabel("Regex filter:"),BorderLayout.WEST); ++ searchPanel.add(searchField); ++ + scroller = new JScrollPane(table); +- add(scroller, BorderLayout.CENTER); ++ JPanel mainPanel = new JPanel(new BorderLayout()); ++ mainPanel.add(searchPanel,BorderLayout.NORTH); ++ mainPanel.add(scroller); ++ ++ setLayout(new BorderLayout()); ++ add(mainPanel, BorderLayout.CENTER); + + setupShortcuts(); + } + ++ private void fireDocumentChangeEvent() { ++ searchField.setBackground(Color.WHITE); ++ String pattern = searchField.getText().trim(); ++ if (pattern.isEmpty()) { ++ sorter.setRowFilter(null); ++ } else { ++ try { ++ sorter.setRowFilter(RowFilter.regexFilter(pattern)); ++ } catch (PatternSyntaxException ex) { ++ searchField.setBackground(Color.PINK); ++ } ++ } ++ } ++ + public void setupWidths() { + table.getColumn("Address").setPreferredWidth((int)(125 * zoom)); + table.getColumn("Label").setPreferredWidth((int)(125 * zoom)); +@@ -269,7 +306,7 @@ public String getCellAt(Point p) { + public void setAutoLayout(String layout) { + } + +- public Object addNode(String id, String label, String description, Image image, String tooltip) { ++ public Object addNode(String id, String services, String label, String description, Image image, String tooltip) { + if (id == null || label == null) + return null; + +@@ -278,6 +315,7 @@ public Object addNode(String id, String label, String description, Image image, + + if (description.indexOf(id) > -1) + description = description.substring(id.length()); ++ map.put("Services", services); + map.put("Label", label); + map.put("Description", description); + map.put("Tooltip", tooltip); diff --git a/armitage.desktop b/armitage.desktop new file mode 100644 index 000000000000..f33e679449cd --- /dev/null +++ b/armitage.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Armitage +GenericName=Vulernbility Exploitation Toolkit +Exec=armitage +Terminal=false +Icon=/usr/share/icons/metasploit.png +Type=Application +Categories=Application;Network;Security +Comment=A GUI front end for MetaSploit diff --git a/armitage.install b/armitage.install new file mode 100644 index 000000000000..d1b0a8ff887b --- /dev/null +++ b/armitage.install @@ -0,0 +1,26 @@ +#!/bin/sh + +post_install() { + ln -s /opt/armitage/armitage /usr/bin/armitage + echo " +==================================================================== + Please refer to armitage's documentation for usage informations: + http://www.fastandeasyhacking.com/manual +==================================================================== + +Postgresql databases in metasploit are mandatory for armitage usage: + +https://wiki.archlinux.org/index.php/Metasploit_Framework + +https://wiki.archlinux.org/index.php/Postgresql + +copy the sample metasploit database config from +/usr/share/metasploit/database.yml.sample to ~/.msf4/database.yml and added your +Postgresql username and password. + +" +} + +pre_remove() { + rm -f /usr/bin/armitage +} diff --git a/database.yml b/database.yml new file mode 100644 index 000000000000..18e72aa090b1 --- /dev/null +++ b/database.yml @@ -0,0 +1,10 @@ +production: + adapter: postgresql + database: msf + username: #username here + password: #password here + host: localhost + port: 5432 + pool: 5 + timeout: 5 + diff --git a/metasploit.default b/metasploit.default new file mode 100644 index 000000000000..b4712ff9f3f1 --- /dev/null +++ b/metasploit.default @@ -0,0 +1,15 @@ +#TODO: make this fucking work + +# metasploit RFC Daemon config file. Configuration for the RPC server. The RPC +# server allows for front ends to connect to metasploit. + +# IP address and port for RPC server +IP_ADDR=127.0.0.1 +PORT=55553 + +## User name and password are used in Armitage and any other front ends for +# metasploit + +# username and password to listen for +RPC_USER=msf +RPC_PASSWORD=test diff --git a/metasploit.png b/metasploit.png Binary files differnew file mode 100644 index 000000000000..0a5e3047b80a --- /dev/null +++ b/metasploit.png diff --git a/metasploit.service b/metasploit.service new file mode 100644 index 000000000000..b2e11cd199ca --- /dev/null +++ b/metasploit.service @@ -0,0 +1,13 @@ +[Unit] +Description=Metasploit Framework RPC Daemon +After=postgresql.service + +[Service] +Type=simple +EnvironmentFile=/etc/default/metasploit +ExecStart=/usr/bin/msfrpcd -f -a $IP_ADDR -U $RPC_USER -P $RPC_PASSWORD -S -p $PORT +PIDFile=/run/metasploit.pid + +[Install] +WantedBy=multi-user.target + diff --git a/metasploit.sh b/metasploit.sh new file mode 100755 index 000000000000..c1f4a91fa149 --- /dev/null +++ b/metasploit.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +export MSF_DATABASE_CONFIG=$HOME/.msf4/database.yml diff --git a/ui-change-menu-items-list-from-8-to-24.patch b/ui-change-menu-items-list-from-8-to-24.patch new file mode 100644 index 000000000000..8d36a50c6105 --- /dev/null +++ b/ui-change-menu-items-list-from-8-to-24.patch @@ -0,0 +1,13 @@ +diff --git a/scripts/attacks.sl b/scripts/attacks.sl +index 9771d0c..8a65057 100644 +--- a/scripts/attacks.sl ++++ b/scripts/attacks.sl +@@ -625,7 +625,7 @@ sub host_attack_items { + }, \$exploit, $hosts => $2)); + + # too many items? do something about it +- if ($c > 8) { ++ if ($c > 24) { + separator($e); + $e = menu($e, "More...", $null); + $c = 0; |