#!/bin/bash
##
## MADE CHANGES BELOW !!
## Author: brtw2003/bl0wf1sh '10
## Complete documentation: http://dradisframework.org
##
DRADIS_PORT="3004"
DRADIS_IP="localhost"
BASE_DIR="CHANGE_ME"
#where your dradis 2.5.0 should be installed
BANNER="banner.png"
#add your own custom logo to the front login page - must be a png and not too large!
DRADIS_ENV="mycompany"
#this will be used for your default dradis environment, including database instance
SVN_USE="no"
#if you say yes, dradis svn release will be downloaded and used
#use it only if you are quite familar with dradis!
TEMPLATE="generic"
# import a default templates - based on the dradis export package feature
# -templates must be placed into directory: _TEMPLATES
# -use the export package feature within dradis to create the dradis-export.zip file
# -file name must be like: {template}_xxxxxxx.tmpl.zip
# -example: pentest_template_V1.1.tmpl.zip
# Currently 3 templates can be specified
# mobile (default for MC assessment)
# wlan (default for WLAN pentest)
# generic (default for the usual pentest)
#
TMPL_GENERIC="generic_pentest_1.0.tmpl"
TMPL_MCD="mobile_computing_1.0.tmpl"
TMPL_WLAN="wlan_1.0.tmpl"
#templates must be placed in the BASE_DIR/_TEMPLATES folder
############ END OF MANUAL CHANGES ########
######################################
RELEASE="1.1"
UPDATE="10/02/2010 (brtw2003)"
DRADIS_DB="${DRADIS_ENV}.sqlite3"
DRADIS_RELEASE="2.5.0"
TERMINAL="/usr/bin/xterm -bg white -fg black"
####
### functions
####
#setup new dradis (installation + initialization)
dradis_new () {
if [ ${BASE_DIR} == "CHANGE_ME" ]; then
printf "\n\n###ERROR### SORRY, you didn't change the BASE_DIR paramater !\n"
printf "###ERROR## Okay, fix it - edit BASE_DIR paramater in this script!\n\n"
printf "###INFO## will start nano for you to edit file!\n\n"
sleep 5
nano startDradis
printf "\n###INFO## CHANGE directory NOW TO: $BASE_DIR & run startDradis again !!\n\n"
exit 0
fi
if [ ${SVN_USE} == "yes" ]; then
printf "\n###INFO## You choose the svn release, will prepare ...inlcuding svn download of latest version\n"
printf "###INFO## base dir we will use: ${BASE_DIR}\n\n"
printf "\n...okay, let's go...\n"
if [ ! -d ${BASE_DIR} ]; then
mkdir -p ${BASE_DIR}
fi
if [ ! -d ${BASE_DIR}/server ]; then
cd ${BASE_DIR} && `which svn` co https://dradis.svn.sourceforge.net/svnroot/dradis/server/trunk server && \
`which svn` co https://dradis.svn.sourceforge.net/svnroot/dradis/server/trunk client
else
cd ${BASE_DIR}/server && printf "\nDradis Server Release (svn update, just a second..): \t" && `which svn` update
cd ${BASE_DIR}/client && printf "\nDradis Client Release (svn update, just a second..): \t" && `which svn` update
fi
if [ ! -d ${BASE_DIR}/_TEMPLATES ]; then
mkdir ${BASE_DIR}/_DB-BACKUP ${BASE_DIR}/_LOGS ${BASE_DIR}/_TEMPLATES
cp -p `pwd`/_TEMPLATES/* ${BASE_DIR}/_TEMPLATES/
fi
fi
if [[ $EUID -ne 0 ]]; then
printf "\n###ERROR## SORRY, script needs to be run as root!\n"
exit 0
fi
if [ ! -f "${BASE_DIR}/.installed" ]; then
read -p "Installation folder: $BASE_DIR - is this correct? (y/n) : " -e optFolder
if [ $optFolder == "n" ]; then
printf "\n\n###ERROR## Okay, fix it - edit BASE_DIR paramater in this script!\n\n\n"
printf "###INFO## will start nano for your to edit file!\n\n"
sleep 5
nano startDradis
printf "\n###INFO## CHANGE directory NOW TO: $BASE_DIR & run startDradis again !!\n\n"
exit 0
fi
printf "\n###INFO## Using latest dradis release (2.5.0)\n"
printf "###INFO## Will unpack original dradis source 2.5.0..\n"
printf "###INFO## Dradis will be installed to: ${BASE_DIR}\n"
printf "###INFO## Custom stuff can be found in: ${BASE_DIR}/_TEMPLATES\n"
if [ ! -f ./_TEMPLATES/dradis-v2.5.0.tar.gz ]; then
printf "\n###ERROR## Sorry, installer source not found!\n\n"
exit 0
else
mkdir -p ${BASE_DIR}
cp `pwd`/startDradis ${BASE_DIR}/
cp `pwd`/_TEMPLATES/dradis-v2.5.0.tar.gz ${BASE_DIR}/ && \
mkdir -p ${BASE_DIR}/_TEMPLATES ${BASE_DIR}/_LOGS ${BASE_DIR}/_DB-BACKUP && \
cp `pwd`/_TEMPLATES/* ${BASE_DIR}/_TEMPLATES/ && \
cd ${BASE_DIR} && tar xf dradis-v2.5.0.tar.gz && rm dradis-v2.5.0.tar.gz && \
mv dradis-2.5/* . && rm -rf dradis-2.5
fi
if [ -f "$BASE_DIR/_TEMPLATES/${BANNER}" ]; then
printf "\n###INFO## Found custom banner, will copy it to the right folder...\n"
cp $BASE_DIR/_TEMPLATES/${BANNER} $BASE_DIR/server/public/images/banner.png
fi
# remove production env variable in environment.rb
sed -i "s/^ENV/#ENV/g" ${BASE_DIR}/server/config/environment.rb && \
sed -i "s/^RAILS_ENV/#RAILS_ENV/g" ${BASE_DIR}/server/config/environment.rb
touch ${BASE_DIR}/.installed
read -p "Initial dradis shared login password? : " -e optPWD
if [ -n "$optPWD" ]; then
DRADIS_PWD="${optPWD}"
else
DRADIS_PWD="topSecure"
fi
#create now custom ssl certificate
dradis_ssl
if [ -n "${DRADIS_ENV}" ]; then
cd ${BASE_DIR}/server/config
if [ ! -f environments/${DRADIS_ENV}.rb ]; then
DRADIS_DB="${DRADIS_ENV}.sqlite3"
cp environments/production.rb environments/${DRADIS_ENV}.rb
if [ -z "$(cat database.yml |grep '${DRADIS_ENV}:')" ]; then
printf "\n\n${DRADIS_ENV}:\n adapter: sqlite3\n database: db/${DRADIS_DB}\n timeout: 5000\n\n" >>database.yml
fi
fi
else
DRADIS_DB=production.sqlite3
fi
if [ ! -f "$BASE_DIR/server/db/migrate/007_create_custom_environment.rb" ]; then
cp $BASE_DIR/_TEMPLATES/007_create_custom_environment.rb $BASE_DIR/server/db/migrate/
fi
#initialize dradis environment
cd ${BASE_DIR}/server
export RAILS_ENV=$DRADIS_ENV; rake dradis:reset >/dev/null
sleep 3
db_date=$(date '+%F %H:%M:%S')
sqlite3 -line ${BASE_DIR}/server/db/${DRADIS_DB} "update configurations set value='${DRADIS_PWD}' where name='password'"
#let's call the import template function
dradis_import
printf "\n\n###INFO## Okay, done..\n"
printf "###INFO## We have do run verify.sh - to check prerequisites!\n"
printf "###INFO## Dradis 2.5 needs some new gem packages, which are not installed in BT4 finale!\n\n"
cd ${BASE_DIR}
sh verify.sh
printf "\n###INFO## CHANGE directory NOW TO: $BASE_DIR & run startDradis again !!\n\n"
exit 0
else
printf "\n###INFO## ..dradis release 2.5.0 is already installed!!\n"
if [ ! -f "$BASE_DIR/.verifycalled" ]; then
printf "###WARNING## You still have not executed verify.sh !!\n\n"
read -p "Should we really proceed? (y/n)" -e optVerify
fi
if [ $optVerify == "n" ]; then
printf "\n###INFO## GOOD CHOICE, will run now verify.sh !!\n\n"
cd ${BASE_DIR}
sh verify.sh
printf "\n###INFO## CHANGE directory NOW TO: $BASE_DIR & run startDradis again !!\n\n"
exit 0
fi
clear
printf "\n\n###INFO## ..use a different menu option! Dradis $DRADIS_RELEASE installation looks good!\n\n"
cd ${BASE_DIR}
exit 0
fi
}
#general import functions for our custom templates
dradis_import () {
###import project templates
if [ ${TEMPLATE} == "generic" ]; then
printf "\n###INFO## You choose to import the 'Generic Pentest Template Package'...give me a second\n\n"
if [ -f "${BASE_DIR}/_TEMPLATES/${TMPL_GENERIC}" ]; then
cd ${BASE_DIR}/server
FILE="[$BASE_DIR/_TEMPLATES/$TMPL_GENERIC]"
rake 'upload:project:template'$FILE'' >/dev/null
else
printf "\n###ERROR## Sorry, template file doesn't exist: $TMPL_GENERIC \n"
fi
fi
if [ ${TEMPLATE} == "mobile" ]; then
printf "\n###INFO## You choose to import the 'Generic Mobile Template Package'...give me a second\n\n"
if [ -f "${BASE_DIR}/_TEMPLATES/${TMPL_MCD}" ]; then
cd ${BASE_DIR}/server
FILE="[$BASE_DIR/_TEMPLATES/$TMPL_MCD]"
rake 'upload:project:template'$FILE'' >/dev/null
else
printf "\n###ERROR## Sorry, template file doesn't exist: $TMPL_MCD \n"
fi
fi
if [ ${TEMPLATE} == "wlan" ]; then
printf "\n###INFO## You choose to import the 'Generic Wireless LAN Template Package'...give me a second\n\n"
if [ -f "${BASE_DIR}/_TEMPLATES/${TMPL_WLAN}" ]; then
cd ${BASE_DIR}/server
FILE="[$BASE_DIR/_TEMPLATES/$TMPL_WLAN]"
rake 'upload:project:template'$FILE'' >/dev/null
else
printf "\n###ERROR## Sorry, template file doesn't exist: $TMPL_WLAN \n"
fi
fi
}
#call firefox
dradis_browser () {
if [ -f "$(which firefox)" ]; then
$(which firefox) -no-remote https://${DRADIS_IP}:${DRADIS_PORT}/login&
printf "\n\n\n*****************************************************************************\n"
printf "\nPlease, use default Dradis shared PWD:\t\t$DRADIS_PWD"
printf "\nDradis server Log File can be found here: $BASE_DIR/_LOGS/$DRADIS_ENV.log\n"
if [ "$ENCRYPT" == "YES" ]; then
printf "\nDon't forget your encrypted GPG password for your backup: $GPG_PWD\n"
fi
printf "*****************************************************************************\n\n"
else
printf "\n\n\n*****************************************************************************\n"
printf "\nPlease, use default Dradis shared PWD:\t\t$DRADIS_PWD"
printf "\n\n..Didn't find Firefox...\n"
printf "\nSTART NOW YOUR WEB BROWSER and login to: https://$DRADIS_IP:$DRADIS_PORT/login"
printf "\nDradis server Log File can be found here: ${BASE_DIR}/_LOGS/$DRADIS_ENV.log\n"
if [ "$ENCRYPT" == "YES" ]; then
printf "\nDon't forget your encrypted GPG password for your backup: $GPG_PWD\n"
fi
printf "*****************************************************************************\n\n"
fi
}
#use dradis with backup feature
dradis_backup () {
if [ ${BASE_DIR} == "CHANGE_ME" ]; then
printf "\n\n###ERROR### SORRY, you didn't change the BASE_DIR paramater !\n"
printf "###ERROR## Okay, fix it - edit BASE_DIR paramater in this script!\n\n"
printf "###INFO## will start nano for your to edit file!\n\n"
sleep 5
nano startDradis
printf "\n###INFO## CHANGE directory NOW TO: $BASE_DIR & run startDradis again !!\n\n"
exit 0
fi
if [ ! -f "$BASE_DIR/.verifycalled" ]; then
printf "###WARNING## You still have not executed verify.sh !!\n\n"
read -p "Should we really proceed? (y/n)" -e optVerify
fi
if [ "$optVerify" == "n" ]; then
printf "\n###INFO## GOOD CHOICE, run now verify.sh !!\n\n"
cd ${BASE_DIR}
sh verify.sh
printf "\n###INFO## CHANGE directory NOW TO: $BASE_DIR & run startDradis again !!\n\n"
exit 0
fi
##look for required env settings...
if [ ! "$(pidof -s xinit)" ]; then
printf "\n###ERROR## SORRY, X11 is not running and we do use xterm to start dradis!\n"
printf "###ERROR## also to start firefox for you..\n"
exit 0
elif [ "${DRADIS_IP}" == "localhost" ]; then
if [ ! $(ifconfig -a | awk '/^[lL][a-zA-Z0-9,_:.]/{n=$1}($1=="UP"){u[n]=n}END{for(n in u){print u[n]}}') ]; then
printf "\n\t###ERROR## SORRY, seems your dont have a loopback device?\n"
printf "we do need it, because dradis server is usually running on localhost!\n"
printf "Fix your networking first!\n"
exit 0
fi
fi
if [ ! -n "$(env |grep "^DISPLAY" |cut -d"=" -f2)" ]; then
printf "\n###ERROR## SORRY, can't find a proper DISPLAY variable!Are you running X??\n"
printf "\n###ERROR### ..let's see if we can fix it...\n"
#look if we can setup display var ....for the real lazy onces :-)
user_id=$(ps -ef |grep xinit |grep -v grep |cut -d" " -f1)
if [ -d "/home/${user_id}" ]; then
if [ -f "/home/${user_id}/.Xauthority" ]; then
export XAUTHORITY=/home/${user_id}/.Xauthority
export DISPLAY=:0.0
fi
fi
if [ ! -n "$(env |grep "^DISPLAY" |cut -d"=" -f2)" ]; then
printf "\n###INFO### PROBLEM fixed :-)\n"
else
printf "\n###ERROR### Can't do magic, please fix DISPLAY and xauthority issue!\n"
exit 0
fi
fi
# remove production env variable in environment.rb - done during install, but safer to do it again !
sed -i "s/^ENV/#ENV/g" ${BASE_DIR}/server/config/environment.rb && \
sed -i "s/^RAILS_ENV/#RAILS_ENV/g" ${BASE_DIR}/server/config/environment.rb
printf "\n\n###INFO## Okay, let's do the backup...\n"
BACKUP="YES"
read -p "Should we encrypt the backup data? (y/n): " -e optEncrypt
if [ $optEncrypt == "y" ]; then
read -p "GPG password to encrypt file (REMEMBER IT!!!): " -e optGPG
ENCRYPT="YES"
if [ -n "$optGPG" ]; then
GPG_PWD="$optGPG"
else
printf "\n\n###ERROR### SORRY, string can not be empty!! Try it again\n"
read -p "GPG password to encrypt file (REMEMBER IT!!!): " -e optGPG
GPG_PWD="$optGPG"
fi
fi
read -p "Initial dradis shared login password? : " -e optPWD
if [ -n "$optPWD" ]; then
DRADIS_PWD="${optPWD}"
else
DRADIS_PWD="topSecure"
fi
printf "\n\n###INFO## looking for running dradis instance..\n"
pgrep -f 'ruby ./script/server' >/dev/null
if [[ $? -eq 0 ]]; then
printf "\n\n###WARNING## dradis server active..I KILL IT NOW!\n\n"
kill -9 `pgrep -f 'ruby ./script/server'` >/dev/null
fi
if [ -n "${DRADIS_ENV}" ]; then
cd ${BASE_DIR}/server/config
if [ ! -f environments/${DRADIS_ENV}.rb ]; then
DRADIS_DB="${DRADIS_ENV}.sqlite3"
cp environments/production.rb environments/${DRADIS_ENV}.rb
if [ -z "$(cat database.yml |grep '${DRADIS_ENV}:')" ]; then
printf "\n\n${DRADIS_ENV}:\n adapter: sqlite3\n database: db/${DRADIS_DB}\n timeout: 5000\n\n" >>database.yml
fi
fi
else
DRADIS_DB=production.sqlite3
fi
if [ ! -f "$BASE_DIR/server/db/$DRADIS_DB" ]; then
printf "\n###INFO### your production database doesn't exist, therefore nothing to backup!\n"
printf "###INFO### will initalize now your new environment...\n"
if [ ! -f "$BASE_DIR/server/db/migrate/007_create_custom_environment.rb" ]; then
cp $BASE_DIR/_TEMPLATES/007_create_custom_environment.rb $BASE_DIR/server/db/migrate/
fi
cd ${BASE_DIR}/server
export RAILS_ENV=${DRADIS_ENV};rake db:migrate >/dev/null
else
# do a backup of old dradis sqlite database
printf "\n###INFO## backup previous Dradis Framework database & settings....\n"
cd ${BASE_DIR}/server/db
cp ${DRADIS_DB} ${BASE_DIR}/_DB-BACKUP/${DRADIS_DB}.`date +%F` && \
gzip ${BASE_DIR}/_DB-BACKUP/${DRADIS_DB}.`date +%F`
printf "###INFO## Backup is located in: \t${BASE_DIR}/_DB-BACKUP\n"
printf "###INFO## backup previous project....\n"
cd ${BASE_DIR}/server
export RAILS_ENV=${DRADIS_ENV};rake dradis:backup >/dev/null
sleep 4
printf "###INFO## clear old environment..\n"
cd ${BASE_DIR}/server
export RAILS_ENV=${DRADIS_ENV};rake dradis:reset >/dev/null
mv ${BASE_DIR}/server/backups/dradis_*.zip ${BASE_DIR}/_DB-BACKUP/
fi
if [ "${ENCRYPT}" == "YES" ]; then
if [ -f "$(which gpg)" ]; then
if [ -f "${BASE_DIR}/_DB-BACKUP/${DRADIS_DB}.`date +%F`.gz" ]; then
printf "\n\n###INFO## encrypting db backup file...\n"
$(which gpg) -q --passphrase "$GPG_PWD" --yes --batch --no-tty -c ${BASE_DIR}/_DB-BACKUP/${DRADIS_DB}.`date +%F`.gz >/dev/null
sleep 3
rm -f ${BASE_DIR}/_DB-BACKUP/${DRADIS_DB}.`date +%F`.gz
else
printf "\n\n###ERROR## sorry, there is no backup file to encrypt!\n"
fi
else
printf "\n\n###ERROR## sorry, gpg not found, will not encrypt your database backup file!\n"
printf "###INFO## install it, under debian run: apt-get install gpg\n"
fi
fi
db_date=$(date '+%F %H:%M:%S')
sqlite3 -line ${BASE_DIR}/server/db/${DRADIS_DB} "update configurations set value='${DRADIS_PWD}' where name='password'"
#let's call the import template function
dradis_import
##finally we start the server and client if needed
cd ${BASE_DIR}/server
${TERMINAL} -T "DRADIS SERVER" -geometry 70x25+0+0 -e ruby ./script/server -e ${DRADIS_ENV} -p ${DRADIS_PORT} -b ${DRADIS_IP}&
if [ "${CLIENT}" == "YES" ]; then
sleep 3
cd ${BASE_DIR}/client
${TERMINAL} -T "DRADIS CLIENT" -geometry 70x25+0+350 -e ruby dradis.rb -g&
fi
#create a sym link in our log dir to the server log...
if [ ! -f "$BASE_DIR/_LOGS/$DRADIS_ENV.log" ]; then
cd $BASE_DIR/_LOGS/
ln -s $BASE_DIR/server/log/${DRADIS_ENV}.log
fi
sleep 4
#finally start firefox
dradis_browser
exit 0
}
#quick dradis initialization without backup
dradis_quick () {
if [ ${BASE_DIR} == "CHANGE_ME" ]; then
printf "\n\n###ERROR### SORRY, you didn't change the BASE_DIR paramater !\n"
printf "###ERROR## Okay, fix it - edit BASE_DIR paramater in this script!\n\n"
printf "###INFO## will start nano for your to edit file!\n\n"
sleep 5
nano startDradis
printf "\n###INFO## CHANGE directory NOW TO: $BASE_DIR & run startDradis again !!\n\n"
exit 0
fi
if [ ! -f "$BASE_DIR/.verifycalled" ]; then
printf "###WARNING## You still have not executed verify.sh !!\n\n"
read -p "Should we really proceed? (y/n)" -e optVerify
fi
if [ "$optVerify" == "n" ]; then
printf "\n###INFO## GOOD CHOICE, run now verify.sh !!\n\n"
cd ${BASE_DIR}
sh verify.sh
printf "\n###INFO## CHANGE directory NOW TO: $BASE_DIR & run startDradis again !!\n\n"
exit 0
fi
##look for required env settings...
if [ ! "$(pidof -s xinit)" ]; then
printf "\n###ERROR## SORRY, X11 is not running and we do use xterm to start dradis!\n"
printf "###ERROR## also to start firefox for you..\n"
exit 0
elif [ "${DRADIS_IP}" == "localhost" ]; then
if [ ! $(ifconfig -a | awk '/^[lL][a-zA-Z0-9,_:.]/{n=$1}($1=="UP"){u[n]=n}END{for(n in u){print u[n]}}') ]; then
printf "\n\t###ERROR## SORRY, seems your dont have a loopback device?\n"
printf "we do need it, because dradis server is usually running on localhost!\n"
printf "Fix your networking first!\n"
exit 0
fi
fi
if [ ! -n "$(env |grep "^DISPLAY" |cut -d"=" -f2)" ]; then
printf "\n###ERROR## SORRY, can't find a proper DISPLAY variable!Are you running X??\n"
printf "\n###ERROR### ..let's see if we can fix it...\n"
#look if we can setup display var ....for the real lazy onces :-)
user_id=$(ps -ef |grep xinit |grep -v grep |cut -d" " -f1)
if [ -d "/home/${user_id}" ]; then
if [ -f "/home/${user_id}/.Xauthority" ]; then
export XAUTHORITY=/home/${user_id}/.Xauthority
export DISPLAY=:0.0
fi
fi
if [ ! -n "$(env |grep "^DISPLAY" |cut -d"=" -f2)" ]; then
printf "\n###INFO### PROBLEM fixed :-)\n"
else
printf "\n###ERROR### Can't do magic, please fix DISPLAY and xauthority issue!\n"
exit 0
fi
fi
if [ -f "$BASE_DIR/_TEMPLATES/${BANNER}" ]; then
printf "\n###INFO## Found custom banner, will copy it to the right folder...\n"
cp $BASE_DIR/_TEMPLATES/${BANNER} $BASE_DIR/server/public/images/banner.png
fi
# remove production env variable in environment.rb - done during install, but safer to do it again !
sed -i "s/^ENV/#ENV/g" ${BASE_DIR}/server/config/environment.rb && \
sed -i "s/^RAILS_ENV/#RAILS_ENV/g" ${BASE_DIR}/server/config/environment.rb
read -p "Initial dradis shared login password? : " -e optPWD
if [ -n "$optPWD" ]; then
DRADIS_PWD="${optPWD}"
else
DRADIS_PWD="topSecure"
fi
pgrep -f 'ruby ./script/server' >/dev/null
if [[ $? -eq 0 ]]; then
printf "\n\n###WARNING## dradis server active..I KILL IT NOW!\n\n"
kill -9 `pgrep -f 'ruby ./script/server'` >/dev/null
fi
if [ -n "${DRADIS_ENV}" ]; then
cd ${BASE_DIR}/server/config
if [ ! -f environments/${DRADIS_ENV}.rb ]; then
DRADIS_DB="${DRADIS_ENV}.sqlite3"
cp environments/production.rb environments/${DRADIS_ENV}.rb
if [ -z "$(cat database.yml |grep '${DRADIS_ENV}:')" ]; then
printf "\n\n${DRADIS_ENV}:\n adapter: sqlite3\n database: db/${DRADIS_DB}\n timeout: 5000\n\n" >>database.yml
fi
fi
else
DRADIS_DB=production.sqlite3
fi
if [ ! -f "$BASE_DIR/server/db/migrate/007_create_custom_environment.rb" ]; then
cp $BASE_DIR/_TEMPLATES/007_create_custom_environment.rb $BASE_DIR/server/db/migrate/
fi
printf "###INFO## clear previous environment..\n"
cd ${BASE_DIR}/server
export RAILS_ENV=${DRADIS_ENV};rake dradis:reset >/dev/null
db_date=$(date '+%F %H:%M:%S')
sqlite3 -line ${BASE_DIR}/server/db/${DRADIS_DB} "update configurations set value='${DRADIS_PWD}' where name='password'"
read -p "Would you like to import a predefined template? (y/n)" -e askTMPL
if [ $askTMPL == "y" ]; then
read -p "Choose template (generic, mobile or wlan): " -e askTYPE
if [ $askTYPE == "generic" ]; then
TEMPLATE="generic"
elif [ $askTYPE == "mobile" ]; then
TEMPLATE="mobile"
elif [ $askTYPE == "wlan" ]; then
TEMPLATE="wlan"
fi
#let's call the import template function
printf "\n###INFO## ...will import your requested template...\n"
dradis_import
fi
##finally we start the server and client if needed
cd ${BASE_DIR}/server
${TERMINAL} -T "DRADIS SERVER" -geometry 70x25+0+0 -e ruby ./script/server -e ${DRADIS_ENV} -p ${DRADIS_PORT} -b ${DRADIS_IP}&
#create a sym link in our log dir to the server log...
if [ ! -f "$BASE_DIR/_LOGS/$DRADIS_ENV.log" ]; then
cd $BASE_DIR/_LOGS/
ln -s $BASE_DIR/server/log/${DRADIS_ENV}.log
fi
sleep 4
#finally start firefox
dradis_browser
exit 0
}
dradis_ssl () {
read -p "Create a new SSL Certificate (y/n)? : " -e optSSL
if [ $optSSL == "y" ]; then
## 1.step creating proper self-signed certs
if [ -f "${BASE_DIR}/server/config/ssl/server.crt" ]; then
cd ${BASE_DIR}/server/config/ssl
printf "\n###INFO### creating new ssl key...\n"
$(openssl genrsa -des3 -out server.key 1024)
printf "\n###INFO### create now server request, based on our new key...\n"
printf "\n###INFO### add all your custom infos...\n"
$(openssl req -new -key server.key.insecure -out server.csr)
printf "\n###INFO### create a self-signed certificate..don't wanna sponsor verisign & co..\n"
$(openssl x509 -req -days 365 -in server.csr -signkey server.key.insecure -out server.crt >/dev/null)
printf "\n\n###INFO### ..seems we are done :-)\n"
else
printf "\n\n###ERROR## SORRY, don't see any existing ssl certificate in ${BASE_DIR}/server/config/ssl/\n\n"
fi
fi
clear
}
dradis_word () {
clear
XML_PARSER="$BASE_DIR/_TEMPLATES/dradis_xml_parser.pl"
XML_FILE="$BASE_DIR/_TEMPLATES/word_custom_template.xml"
if [ ! -f "$XML_FILE" ]; then
printf "\n\n###ERROR## Sorry, there is no default template: $XML_FILE!\n"
printf "###ERROR## We need an initial dradis XML template - so I will stop now!\n\n\n"
exit 0
fi
#we do need some specific perl modules..
perl -e 'use XML::Simple;' 2>/dev/null
if [ `echo $?` != "0" ]; then
printf "\n###ERROR## Please, install missing Perl module:\n\n"
read -p "Install XML::Simple Perl module? (y/n)" -e optPerl
if [ $optPerl == "y" ]; then
perl -MCPAN -e 'install XML::Simple'
fi
sleep 2
clear
fi
#dump current dradis XML meta tags
$XML_PARSER -f $XML_FILE
read -p "Should we place your 'word_custom_template.xml' to the right dradis location? (y/n)" -e optXML
if [ $optXML == "y" ]; then
#finally copy template to the right place
cd $BASE_DIR/_TEMPLATES
if [ -f "$XML_FILE" ]; then
if [ -d $BASE_DIR/server/vendor/plugins/word_export ]; then
printf "\n\n###INFO## Copy your template to: $BASE_DIR/server/vendor/plugins/word_export/template.xml\n\n"
cp $XML_FILE $BASE_DIR/server/vendor/plugins/word_export/template.xml
sleep 2
else
printf "\n\n###ERROR## Sorry, missing word_export plugin - will not copy it!\n";
sleep 4
fi
fi
fi
clear
}
dradis_start () {
printf "\n###INFO## Starting dradis $DRADIS_RELEASE....\n"
cd $BASE_DIR/server
if [ ! "$(pidof -s xinit)" ]; then
printf "\n###ERROR## SORRY, X11 is not running and we do use xterm to start dradis!\n"
printf "###ERROR## also to start firefox for you..\n"
exit 0
elif [ "${DRADIS_IP}" == "localhost" ]; then
if [ ! $(ifconfig -a | awk '/^[lL][a-zA-Z0-9,_:.]/{n=$1}($1=="UP"){u[n]=n}END{for(n in u){print u[n]}}') ]; then
printf "\n\t###ERROR## SORRY, seems your dont have a loopback device?\n"
printf "we do need it, because dradis server is usually running on localhost!\n"
printf "Fix your networking first!\n"
exit 0
fi
fi
if [ ! -n "$(env |grep "^DISPLAY" |cut -d"=" -f2)" ]; then
printf "\n###ERROR## SORRY, can't find a proper DISPLAY variable!Are you running X??\n"
printf "\n###ERROR### ..let's see if we can fix it...\n"
#look if we can setup display var ....for the real lazy onces :-)
user_id=$(ps -ef |grep xinit |grep -v grep |cut -d" " -f1)
if [ -d "/home/${user_id}" ]; then
if [ -f "/home/${user_id}/.Xauthority" ]; then
export XAUTHORITY=/home/${user_id}/.Xauthority
export DISPLAY=:0.0
fi
fi
if [ ! -n "$(env |grep "^DISPLAY" |cut -d"=" -f2)" ]; then
printf "\n###INFO### PROBLEM fixed :-)\n"
else
printf "\n###ERROR### Can't do magic, please fix DISPLAY and xauthority issue!\n"
exit 0
fi
fi
##finally we start the server and client if needed
cd ${BASE_DIR}/server
${TERMINAL} -T "DRADIS SERVER" -geometry 70x25+0+0 -e ruby ./script/server -e ${DRADIS_ENV} -p ${DRADIS_PORT} -b ${DRADIS_IP}&
#create a sym link in our log dir to the server log...
if [ ! -f "$BASE_DIR/_LOGS/$DRADIS_ENV.log" ]; then
cd $BASE_DIR/_LOGS/
ln -s $BASE_DIR/server/log/${DRADIS_ENV}.log
fi
sleep 4
#call firefox
dradis_browser
exit 0
}
dradis_pwd () {
clear
GETIT=`sqlite3 -line -noheader $BASE_DIR/server/db/$DRADIS_DB "select * from configurations where name='password'" |grep value |cut -d"=" -f2`
printf "\n\nYour current shared Password:\t$GETIT\n\n"
sleep 3
clear
}
####
## begin menu & loop forever...
####
clear
echo
echo -e '\E[37;44m'"\t\033[1mProfessional Pentest documentation matters!\033[0m"
echo -e '\E[37;44m'"\t\t\033[1mVersion: $RELEASE, Last update: $UPDATE\033[0m"
if [ $BASE_DIR != "CHANGE_ME" ]; then
if ([ ! -f $BASE_DIR/.installed ] || [ ! -d $BASE_DIR/server ]); then
printf "\n\n!!! Seems you didn't install properly dradis 2.5, please start with option 1 !!!\n"
printf " Install it now and than you'll see all other options you can choose ;-)\n\n"
while :
do
cat << !
---------------------- DRADIS FRAMEWORK MENU --------------------------
| powered by Advanced Services |
| |
| 1. Start new dradis $DRADIS_RELEASE custom installation |
| 2. Quit |
| |
-------------------------------------------------------------------------
!
echo
echo
echo -n " Select an option from the menu: "
read choice
case $choice in
1) dradis_new ;;
2) exit ;;
*) echo ""$choice" is not valid! "; sleep 2 ;;
esac
done
else
while :
do
cat << !
----------------- MOTOROLA - DRADIS FRAMEWORK MENU --------------------
| powered by Advanced Services |
| |
| |
| 1. Only start Dradis $DRADIS_RELEASE server |
| |
| 2. Quick dradis $DRADIS_RELEASE initalization (no Backup) |
| (wipe exisiting data - quick usage for engagements) |
| |
| 3. Use existing dradis environment (with Backup) |
| |
| 4. Create a custom dradis SSL certificate |
| |
| 5. Dump custom Word template (properties & usage) |
| |
| 6. New dradis $DRADIS_RELEASE custom installation |
| (overwrites existing installation - change BASE_DIR variable!) |
| |
| 7. Show me the current shared password |
| |
| 8. Quit |
| |
-------------------------------------------------------------------------
!
echo
echo
echo -n " Select an option from the menu: "
read choice
case $choice in
1) dradis_start ;;
2) dradis_quick ;;
3) dradis_backup ;;
4) dradis_ssl ;;
5) dradis_word ;;
6) dradis_new ;;
7) dradis_pwd ;;
8) exit ;;
*) echo ""$choice" is not valid! "; sleep 2 ;;
esac
done
fi
else
printf "\n\n###ERROR## Sorry, you have to adjust BASE_DIR variable! Will call nano for you\n"
sleep 4
nano startDradis
printf "\n\n###INFO## Restart 'startDradis' script again!\n"
exit 0
fi
#EOF