提权缘由
当我们拿到设备的时候实际的上防火墙提供的shell是cli,权限过低,无法去做调试和测试,所以需要在实体设备上进行提权拿到sh。并且直接使用busybox官网提供的busybox会显示内核版本过低,所以需要手动编译。
思路
由于设备的内核版本是2.6.0版本过于老旧,目前成功的思路是通过docker拉起centos5编译busybox和shell文件达到注入
拉取docker
替换镜像(因为contos5官方源已经无了)
docker pull daocloud.io/centos:centos5
运行docker
docker run -it --name centos5 daocloud.io/centos:centos5 /bin/bash
docker换源因为官方源已经废(无)了(
# 删除现有的repo文件rm -f /etc/yum.repos.d/*.repo# 使用阿里云的CentOS 5.11存档仓库cat <<EOF > /etc/yum.repos.d/CentOS-Base.repo[base]name=CentOS-5.11 - Basebaseurl=http://mirrors.aliyun.com/centos-vault/5.11/os/x86_64/gpgcheck=1gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-5[updates]name=CentOS-5.11 - Updatesbaseurl=http://mirrors.aliyun.com/centos-vault/5.11/updates/x86_64/gpgcheck=1gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-5[extras]name=CentOS-5.11 - Extrasbaseurl=http://mirrors.aliyun.com/centos-vault/5.11/extras/x86_64/gpgcheck=1gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-5[centosplus]name=CentOS-5.11 - Plusbaseurl=http://mirrors.aliyun.com/centos-vault/5.11/centosplus/x86_64/gpgcheck=1enabled=0gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-5EOF# 导入GPG密钥rpm --import http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-5
安装开发工具和gcc和make
# 更新yum缓存yum clean all# 更新系统yum update -y# 安装开发工具组yum groupinstall "Development Tools" -y# 确保安装gccyum install -y gccyum install -y make
安装缺失的解压工具
yum install -y bzip2
制作busybox和shell
busybox实际是linux下的指令库,基本拥有linux常见的所有指令。
busybox制作
下载busybox源码
wget https://busybox.net/downloads/busybox-1.1.2.tar.bz2tar xjf busybox-1.1.2.tar.bz2
安装库
yum install -y ncurses ncurses-develyum install -y glibc-devel.i386 libgcc.i386
这里我们要把busybox编译成静态的,根据设备情况确定需要编译的架构。
设置为静态链接:
-
在菜单中选择 Busybox Settings
->Build Options
->Build BusyBox as a static binary (no shared libs)
. -
将其设置为 [*]
(选中状态)。
启用 32 位编译支持:
-
确保使用 -m32
编译选项来生成 32 位可执行文件。退出菜单配置后,请手动编辑生成的.config
文件,添加-m32
到EXTRA_CFLAGS
:
echo"EXTRA_CFLAGS=-m32" >> .config
make cleanmake ARCH=i386 CROSS_COMPILE="" -j4
shell制作
shell源码如下
#include<stdio.h>voidshell(){ system("/bin/busybox ls", 0, 0); system("/bin/busybox id", 0, 0); system("/bin/busybox telnetd -l /bin/sh -b 0.0.0.0 ""-p 9090",0, 0); system("/bin/busybox ash", 0, 0); system("/bin/busybox sh", 0, 0);return;}intmain(int argc, charconst *argv[]){ shell();return0;}
执行以下命令进行编译,shell也需要编译成静态的
gcc -m32 -static shell.c -o cli
执行以下命令copy到宿主机
docker cp centos5:/busybox-1.1.2/busybox ./busyboxdocker cp centos5:/cli ./cli
利用busybox和shell
1.准备gdbserver
gdbserver就自己编译一个或者网上去下载一个就行
https://github.com/hugsy/gdb-static
2.进行上传登陆
通过设备的cf卡上传shell,cli替换usr/bin/cli下的shell文件。
busybox上传到/bin。这里替换和上传一定要通过命令行传,并且修改权限。
3.链接
执行以下命令进行链接
ln -s busybox shln -s busybox ashln -s busybox bash
4.登陆
这样修改只能通过consle串口登录
波特率是115200
设备提权
目前是只拿到了设备的用户权限,还没有root。
其实到这一步了root很简单,通过修改busybox权限即可,命令如下
chmod 4755 busybox #这里修改busybox以root权限运行
busybox su #输入密码即可
文末:
欢迎师傅们加入我们:
星盟安全团队纳新群1:222328705
星盟安全团队纳新群2:346014666
有兴趣的师傅欢迎一起来讨论!
PS:团队纳新简历投递邮箱:
责任编辑:@Elite
原文始发于微信公众号(星盟安全):边界设备注入提权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论