summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Lambiris2017-09-11 20:40:38 -0400
committerTony Lambiris2017-09-11 20:40:38 -0400
commit01f306302ed73f0b764c73989b0f806d78cfb46e (patch)
treefc8bf6c47b1173d0324f587580b1b2ea0af7d2e0
downloadaur-01f306302ed73f0b764c73989b0f806d78cfb46e.tar.gz
Initial commit
-rw-r--r--.SRCINFO37
-rw-r--r--PKGBUILD81
-rw-r--r--added-a-services-column-in-the-host-table-view-with-filter.patch200
-rw-r--r--armitage.desktop10
-rw-r--r--armitage.install26
-rw-r--r--database.yml10
-rw-r--r--metasploit.default15
-rw-r--r--metasploit.pngbin0 -> 6124 bytes
-rw-r--r--metasploit.service13
-rwxr-xr-xmetasploit.sh3
-rw-r--r--ui-change-menu-items-list-from-8-to-24.patch13
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
new file mode 100644
index 000000000000..0a5e3047b80a
--- /dev/null
+++ b/metasploit.png
Binary files differ
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;