mirror of
https://github.com/pentoo/pentoo-overlay
synced 2025-12-06 00:16:22 +01:00
eselect-metasploit: ugh, I hate myself
This commit is contained in:
parent
d1a7a37b95
commit
6d758768cd
7 changed files with 322 additions and 0 deletions
|
|
@ -0,0 +1,41 @@
|
|||
# Copyright 1999-2020 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Id$
|
||||
|
||||
EAPI=7
|
||||
|
||||
inherit multilib
|
||||
|
||||
DESCRIPTION="eselect module for metasploit"
|
||||
HOMEPAGE="http://www.pentoo.ch/"
|
||||
SRC_URI=""
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~arm ~x86"
|
||||
IUSE=""
|
||||
|
||||
DEPEND="!<net-analyzer/metasploit-4.6"
|
||||
RDEPEND="${DEPEND}
|
||||
app-admin/eselect"
|
||||
|
||||
S=${WORKDIR}
|
||||
|
||||
src_install() {
|
||||
#force to use the outdated bundled version of metasm
|
||||
doenvd "${FILESDIR}"/91metasploit
|
||||
|
||||
newinitd "${FILESDIR}"/msfrpcd.initd msfrpcd
|
||||
newconfd "${FILESDIR}"/msfrpcd.confd msfrpcd
|
||||
|
||||
insinto /usr/share/eselect/modules
|
||||
newins "${FILESDIR}/metasploit.eselect-0.13" metasploit.eselect
|
||||
|
||||
newbin "${FILESDIR}"/msfloader-${PV} msfloader
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
"${EROOT}"/usr/bin/eselect metasploit set --use-old 1
|
||||
elog "To switch between installed slots, execute as root:"
|
||||
elog " # eselect metasploit set [slot number]"
|
||||
}
|
||||
8
app-eselect/eselect-metasploit/files/91metasploit
Normal file
8
app-eselect/eselect-metasploit/files/91metasploit
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
MSF_DATABASE_CONFIG=/usr/lib/metasploit/config/database.yml
|
||||
|
||||
# needed because MSF ships an old version of metasm
|
||||
# which isn't compatible with the new one
|
||||
MSF_LOCAL_LIB="/usr/lib/metasploit/lib/metasm"
|
||||
|
||||
# needed because MSF doesn't know where it is since the alzheimer's
|
||||
MSF_ROOT=/usr/lib/metasploit
|
||||
207
app-eselect/eselect-metasploit/files/metasploit.eselect-0.13
Normal file
207
app-eselect/eselect-metasploit/files/metasploit.eselect-0.13
Normal file
|
|
@ -0,0 +1,207 @@
|
|||
# -*-eselect-*- vim: ft=eselect
|
||||
# Copyright 2005-2020 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2 or later
|
||||
# $
|
||||
|
||||
DESCRIPTION="Control which metaploit version is active"
|
||||
MAINTAINER="zerochaos@pentoo.ch"
|
||||
|
||||
###WARNING: don't even think of using this insanity for a reference (but it works,mostly)
|
||||
#base idea from kernel.eselect, get_libdir from php.eselect with --use-old from opencl.eselect
|
||||
#all modified randomly until it worked, entropy is wonderful
|
||||
###/WARNING
|
||||
|
||||
inherit multilib
|
||||
|
||||
get_libdir() {
|
||||
local dir
|
||||
if has lib64 $(list_libdirs); then
|
||||
echo lib64
|
||||
return
|
||||
fi
|
||||
echo lib
|
||||
}
|
||||
|
||||
MSFPATH="/usr/$(get_libdir)/metasploit"
|
||||
|
||||
# find a list of metasploit symlink targets and sort them
|
||||
find_targets() {
|
||||
local f
|
||||
for f in "${EROOT}${MSFPATH}"[[:digit:]]*; do
|
||||
[[ -d ${f} ]] && basename "${f}"
|
||||
done | LC_ALL=C sort
|
||||
}
|
||||
|
||||
# remove the metasploit symlink
|
||||
remove_symlink() {
|
||||
for i in $(qlist metasploit | grep $(canonicalise "${EROOT}${MSFPATH}")/msf)
|
||||
do
|
||||
if [ -L /usr/bin/$(echo ${i} | awk -F'/' '{print $5}') ]; then
|
||||
unlink /usr/bin/$(echo ${i} | awk -F'/' '{print $5}') || die -q "failed to unlink ${i}"
|
||||
fi
|
||||
done
|
||||
if [ -L ${EROOT}${MSFPATH} ]; then
|
||||
unlink "${EROOT}${MSFPATH}" || die -q "failed to unlink ${EROOT}${MSFPATH}"
|
||||
elif [ -e ${EROOT}${MSFPATH} ]; then
|
||||
die -q "${EROOT}${MSFPATH} exists but is not a symlink"
|
||||
fi
|
||||
}
|
||||
|
||||
# set the metasploit symlink
|
||||
set_symlink() {
|
||||
local target=$1
|
||||
|
||||
if is_number "${target}"; then
|
||||
local targets=( $(find_targets) )
|
||||
target=${targets[target-1]}
|
||||
fi
|
||||
|
||||
if [[ -z ${target} ]]; then
|
||||
die -q "Target \"$1\" doesn't appear to be valid!"
|
||||
elif [[ -d ${EROOT}/usr/$(get_libdir)/${target} ]]; then
|
||||
ln -s "${target}" "${EROOT}${MSFPATH}"
|
||||
for i in $(qlist metasploit | grep /usr/$(get_libdir)/${target}/msf)
|
||||
do
|
||||
ln -s /usr/bin/msfloader /usr/bin/$(echo ${i} | awk -F'/' '{print $5}')
|
||||
done
|
||||
#this elif looks like it is trying to support setting by slot only,
|
||||
#but that isn't supported by the rest of the script... fix or remove?
|
||||
elif [[ -d ${EROOT}${MSFPATH}${target} ]]; then
|
||||
ln -s "metasploit${target}" "${EROOT}${MSFPATH}"
|
||||
for i in $(qlist metasploit | grep /usr/$(get_libdir)/${target}/msf)
|
||||
do
|
||||
ln -s /usr/bin/msfloader /usr/bin/$(echo ${i} | awk -F'/' '{print $5}')
|
||||
done
|
||||
else
|
||||
die -q "Target \"$1\" doesn't appear to be valid!"
|
||||
fi
|
||||
}
|
||||
|
||||
# wrapper to safely set the symlink
|
||||
set_symlink_safe() {
|
||||
if [[ -L ${EROOT}${MSFPATH} ]]; then
|
||||
# existing symlink
|
||||
remove_symlink || die -q "Couldn't remove existing symlink"
|
||||
set_symlink "$1" || die -q "Couldn't set a new symlink"
|
||||
#um, why is there an env-update here?
|
||||
env-update
|
||||
elif [[ -e ${EROOT}${MSFPATH} ]]; then
|
||||
# we have something strange
|
||||
die -q "${EROOT}${MSFPATH} exists but is not a symlink"
|
||||
else
|
||||
set_symlink "$1" || die -q "Couldn't set a new symlink"
|
||||
fi
|
||||
}
|
||||
|
||||
### show action ###
|
||||
|
||||
describe_show() {
|
||||
echo "Show the current metasploit symlink"
|
||||
}
|
||||
|
||||
do_show() {
|
||||
write_list_start "Current metasploit symlink:"
|
||||
if [[ -L ${EROOT}${MSFPATH} ]]; then
|
||||
local metasploit=$(canonicalise "${EROOT}${MSFPATH}")
|
||||
write_kv_list_entry "${metasploit%/}" ""
|
||||
else
|
||||
write_kv_list_entry "(unset)" ""
|
||||
fi
|
||||
}
|
||||
|
||||
### list action ###
|
||||
|
||||
describe_list() {
|
||||
echo "List available metasploit symlink targets"
|
||||
}
|
||||
|
||||
do_list() {
|
||||
local i targets=( $(find_targets) )
|
||||
|
||||
write_list_start "Available metasploit symlink targets:"
|
||||
for (( i = 0; i < ${#targets[@]}; i++ )); do
|
||||
[[ ${targets[i]} = \
|
||||
$(basename "$(canonicalise "${EROOT}${MSFPATH}")") ]] \
|
||||
&& targets[i]=$(highlight_marker "${targets[i]}")
|
||||
done
|
||||
write_numbered_list -m "(none found)" "${targets[@]}"
|
||||
}
|
||||
|
||||
### set action ###
|
||||
|
||||
describe_set() {
|
||||
echo "Set a new metasploit symlink target"
|
||||
}
|
||||
|
||||
describe_set_parameters() {
|
||||
echo "<target>"
|
||||
}
|
||||
|
||||
describe_set_options() {
|
||||
echo "<target> : Target name or number (from 'list' action)"
|
||||
echo "--use-old : If an implementation is already set, use that one instead"
|
||||
}
|
||||
|
||||
do_set() {
|
||||
local action="error"
|
||||
local current=$(basename "$(canonicalise "${EROOT}${MSFPATH}")")
|
||||
local available=( $(find_targets) )
|
||||
local new
|
||||
local opt
|
||||
|
||||
while [[ ${#@} -gt 0 ]] ; do
|
||||
opt=$1
|
||||
shift
|
||||
case ${opt} in
|
||||
--use-old)
|
||||
if [[ -n "${current}" ]] && has "${current}" "${available[@]}"; then
|
||||
action="old-implementation"
|
||||
fi
|
||||
;;
|
||||
metasploit*)
|
||||
if [[ "${action}" != "old-implementation" ]] ; then
|
||||
action="set-implementation"
|
||||
fi
|
||||
|
||||
if has ${opt} ${available[@]}; then
|
||||
new="${opt}"
|
||||
else
|
||||
echo "You need to emerge ${opt} before you try to eselect it"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if [[ "${action}" != "old-implementation" ]] ; then
|
||||
action="set-implementation"
|
||||
fi
|
||||
|
||||
if is_number ${opt} ; then
|
||||
#targets=( $(get_implementations) )
|
||||
new=${available[opt - 1]}
|
||||
if [[ -z ${new} ]] ; then
|
||||
die -q "Unrecognized option: ${opt}"
|
||||
fi
|
||||
else
|
||||
die -q "Unrecognized option: ${opt}"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
case ${action} in
|
||||
old-implementation)
|
||||
set_symlink_safe ${current}
|
||||
return $?
|
||||
;;
|
||||
set-implementation)
|
||||
if [[ -n ${new} ]] ; then
|
||||
set_symlink_safe ${new}
|
||||
return $?
|
||||
else
|
||||
die -q "Please specify an implementation to set"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
die -q "Invalid usage of set action."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
18
app-eselect/eselect-metasploit/files/msfloader-0.17
Normal file
18
app-eselect/eselect-metasploit/files/msfloader-0.17
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#!/bin/sh
|
||||
|
||||
#todo:
|
||||
#add in optional auto starting/stopping of postgres
|
||||
|
||||
#read the desired version of ruby from the eselected version of msf
|
||||
header="$(head -n1 /usr/lib/metasploit/msfconsole)"
|
||||
ruby="${header:2}"
|
||||
|
||||
#ensure Gemfile.lock is up to date
|
||||
if ! BUNDLE_GEMFILE=/usr/lib/metasploit/Gemfile ${ruby} -S bundle check > /dev/null 2>&1; then
|
||||
echo "Something went wrong, please open a bug for metasploit on https://github.com/pentoo/pentoo-overlay/issues"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#ready to go
|
||||
BUNDLE_GEMFILE=/usr/lib/metasploit/Gemfile ${ruby} -S bundle exec /usr/lib/metasploit/$(basename $0) "$@"
|
||||
#profit
|
||||
16
app-eselect/eselect-metasploit/files/msfrpcd.confd
Normal file
16
app-eselect/eselect-metasploit/files/msfrpcd.confd
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# Config file for /etc/init.d/metasploit
|
||||
|
||||
# Bind to the following IP instead of the loopback address
|
||||
IPADDR=127.0.0.1
|
||||
|
||||
# Bind to the following TCP port instead of default 55555
|
||||
PORT=55553
|
||||
|
||||
# Use the following username instead of msf
|
||||
USER="msf"
|
||||
|
||||
# Use the following password instead of msf
|
||||
PASS="secure"
|
||||
|
||||
# All options
|
||||
MSF_OPTS="-U $USER -P $PASS -S -a $IPADDR -p $PORT"
|
||||
22
app-eselect/eselect-metasploit/files/msfrpcd.initd
Normal file
22
app-eselect/eselect-metasploit/files/msfrpcd.initd
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#!/sbin/openrc-run
|
||||
# Copyright 1999-2020 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Id$
|
||||
|
||||
VERSION=
|
||||
PIDFILE=/var/run/msfrpcd${VERSION}.pid
|
||||
|
||||
start() {
|
||||
ebegin "Starting msfrpcd"
|
||||
start-stop-daemon --start --quiet --background \
|
||||
--exec /usr/bin/msfrpcd \
|
||||
--pidfile ${PIDFILE} \
|
||||
--make-pidfile -- -f ${MSF_OPTS}
|
||||
eend $?
|
||||
}
|
||||
|
||||
stop() {
|
||||
ebegin "Stopping msfrpcd"
|
||||
start-stop-daemon --stop --quiet -s 9 --pidfile ${PIDFILE}
|
||||
eend $?
|
||||
}
|
||||
10
app-eselect/eselect-metasploit/metadata.xml
Normal file
10
app-eselect/eselect-metasploit/metadata.xml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
|
||||
<pkgmetadata>
|
||||
<maintainer>
|
||||
<email>zerochaos@gentoo.org</email>
|
||||
<name>Rick Farina</name>
|
||||
</maintainer>
|
||||
<longdescription lang="en">
|
||||
</longdescription>
|
||||
</pkgmetadata>
|
||||
Loading…
Reference in a new issue