diff --git a/payloads/extensions/get2_dhclient.sh b/payloads/extensions/get2_dhclient.sh new file mode 100644 index 00000000..d846e484 --- /dev/null +++ b/payloads/extensions/get2_dhclient.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# get2_dhclient.sh - Bash Bunny extension to change from a DHCP server to a client. +# This is needed when connected to macOS/OSX with Internet Sharing because +# the host is the DHCP server and the Bash Bunny is the DHCP client. +# +# It also replaces the standard GET function so that TARGET_IP, TARGET_HOSTNAME +# and HOST_IP work properly without having to modify the standard version. It +# renames and uses the standard version for any other environment variables. +# +# Note that this must be sourced after get.sh so it is named "get2_dhclient.sh" +# on the assumption that they are sourced in order by filename. +# +# This is free software released under the terms of the GPLv2+ +# +# 20190321 raf + +function DHCLIENT() { + + # Do nothing if GET isn't defined (get.sh hasn't been sourced yet) + [ $(declare -f GET | /usr/bin/wc -l) = 0 ] && return + + # Do nothing if we've already done it + [ $(declare -f orig_GET | /usr/bin/wc -l) != 0 ] && return + + # Stop the DHCP server if it is running + /bin/systemctl status isc-dhcp-server && /bin/systemctl stop isc-dhcp-server + + # Bring down the usb0 network interface + /sbin/ifdown usb0 + + # Bring it up again as a DHCP client + /sbin/dhclient usb0 + + # Rename the standard GET function before we replace it + eval "$(echo "orig_GET()"; declare -f GET | tail -n +2)" + export -f orig_GET + + # Replace GET so that TARGET_IP, TARGET_HOSTNAME and HOST_IP work + function GET() { + case "$1" in + "TARGET_IP") + export TARGET_IP=$(awk '/option routers/ { tip = substr($3, 1, length($3)-1) } END { print tip }' /var/lib/dhcp/dhclient.leases) + ;; + "TARGET_HOSTNAME") + export TARGET_HOSTNAME=$(awk '/server-name/ { thn = substr($2, 2, length($2)-3) } END { print thn }' /var/lib/dhcp/dhclient.leases) + ;; + "HOST_IP") + export HOST_IP=$(awk '/fixed-address/ { hip = substr($2, 1, length($2)-1) } END { print hip }' /var/lib/dhcp/dhclient.leases) + ;; + *) + orig_GET "$1" + ;; + esac + } +} + +export -f DHCLIENT +