<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    CVE-2017-17215(華為HG532遠程命令執行漏洞)復現學習

    VSole2021-09-17 17:01:22

    固件和exp都已經放在這個地方了:https://gitee.com/p1piyang/backward-analysis/tree/master/

    建議先通一遍文章再動手復現,復現之前一定要保存虛擬機快照,防止出現各種問題。

    一、解壓固件

    直接使用binwalk -Me HG532eV100R001C02B015_upgrade_main.bin命令來直接解壓固件文件。

    解壓完成后,在固件同文件夾下可以看到解壓出來的文件夾。

    文件夾中的squashfs-root就是我們需要的文件系統了,如果squashfs-root中沒有下圖的各種文件系統,就是你的binwalk有不完整,去看iot固件分析環境搭建。

    二、配置網絡

    我們要讓qemu虛擬機和我們的ubuntu互通。

    安裝網絡配置工具:

    apt-get install bridge-utils uml-utilities
    
    修改ubuntu網絡配置文件 /etc/network/interfaces/

    sudo vim 你一定會把!

    內容改成如下,圖下提供了復制粘貼的代碼(貼心人):

    # interfaces(5) file used by ifup(8) and ifdown(8)auto loiface lo inet loopback auto ens33iface ens33 inet manualup ifconfig ens33 0.0.0.0 up auto br0iface br0 inet dhcp bridge_ports ens33bridge_maxwait 0
    
    創建或修改qemu的網絡接口啟動文件腳本/etc/qemu-ifup

    如果沒有這個文件直接創建就可以了,如果有的話將里邊內容清空,然后寫入下面腳本:

    #!/bin/sh# Script to bring a network (tap) device for qemu up.# The idea is to add the tap device to the same bridge# as we have default routing to. # in order to be able to find brctlecho "Executing /etc/qemu-ifup"echo "Bringing $1 for bridge mode..."sudo /sbin/ifconfig $1 0.0.0.0 promisc upecho "Adding $1 to br0..."sudo /sbin/brctl addif br0 $1sleep 3
    

    然后依次執行如下操作:

    #啟動橋接網絡賦予可執行權限sudo chmod a+x /etc/qemu-ifup#重啟網絡服務,使配置生效(注意這個地方配置正常之后,如果你是mac,可能會讓你輸入mac密碼,windows我不知道)sudo /etc/init.d/networking restart#關閉ens33,啟動橋接網絡br0(這里如果顯示eth0不存在沒關系,直接啟動br0)sudo ifdown eth0sudo ifup br0
    

    如圖所示,當前網卡為br0。

    配置完之后,如果下面qemu虛擬機配置之后,仍然無法獲取ip,重啟ubuntu。

    三、配置qemu虛擬機

    先去下載debian-mips-qemu鏡像文件,每次固件分析要注意對應大小端序的鏡像文件(還是有設備的好)。

    下載地址:https://people.debian.org/~aurel32/qemu/mips/

    我們需要紅框里的兩個文件,然后在文件所在地方啟動qemu。

    這里特別說明,最后一個參數-nographic帶上是在終端中直接運行,不會彈出窗口運行,建議一定不要開,我這里開了之后這個窗口的返回快捷鍵和vmware的一模一樣,就導致我只能在mac和qemu中間用,我回不去我的ubuntu了。
    sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic,macaddr=00:16:3e:00:00:01 -net tap -nographic
    

    如果你的多次運行qemu,可能會出現如下錯誤:

    這是服務沒有退出導致的。

    ps查出當前qemu進程號,kill掉就好了。

    ps -e | grep 'qemu'

    sudo kill 3307

    即可。

    啟動如上圖,賬號密碼都是root。

    啟動后嘗試,ping baidu.com 和 ubuntu。

    如果不通,

    ifconfig -a
    

    查看網卡第一個是什么,一般都會是eth1。

    然后修改/etc/network/interfaces,注意這里是在qemu虛擬機中修改。

    nano /etc/network/interfaces
    

    第一次配置紅框中一般是eth0,將紅框中的內容修改為你的網卡名字。

    保存后使用下面指令重啟eth1。

    ifup eth1
    

    再次嘗試,如果還不行或者ifconfig發現eth1沒有分配地址,重啟ubuntu或者找原因,不行就恢復快照。

    如果成了的話是可以用ssh遠程連接qemu虛擬機的。

    ssh root@虛擬機ip
    

    建議在ubuntu中使用ssh連接,比較方便。

    接下來將我們解壓出來的文件系統拷貝到qemu。

    scp -r ./squashfs-root  root@虛擬機ip:/root/
    

    四、復現

    通過checkpoint報告中能看到關鍵字為ctrl和Deviceupgrade,端口號為37215。

    使用grep來查找:

    兩個都指向upnp這個文件,端口號指向mic這個文件。

    直接運行會出問題,我們切換根目錄到拷貝進來的系統文件中。

    chroot /root/squashfs-root /bin/sh
    

    然后先后運行upnp和mic。

    到這個地方mic已經運行成功了,放著不用管他了。

    使用lsof -i:37215可以查看端口是否運行。

    用下面命令來查看是否啟動成功:

    nc -vv 192.168.150.9 37215
    

    成功了就可以跑exp了。

    與checkpoint不同的是,我把溢出的命令修改了(紅框處,這里就是靈活使用了),藍框處修改為qemu的ip。

    執行exp后 在mic界面可以看到:

    ls被成功執行了。

    五、原因分析

    Ida7.5可以反編譯qemu。

    通過exp能發現,命令行放在了NewStatusURL標簽下,在ida中通過字符串查找。

     

    49c的位置使用快捷間p可以創建函數,來反編譯。

    snprintf函數將可變個參數按照format格式化成字符串,然后將其復制到str中,即把v5與前面字符串拼接放到v6中,并且system執行了v6。

    根據exp的執行效果來推測,ATP_XML_GetChildNodeByName這個函數讀取NewStatusURL標簽的內容放到了v5。

    偽代碼不可信,盡量還是通過匯編代碼分析。

    倒推能發現,system的參數為0x42C+var_414($sp)。

    0x42C+var_414($sp)為snprintf 的第一個參數,0x42C+var_40C($sp)為snprintf的第四個參數。

    即 0x42C+var_40C($sp)的內容通過函數放到了0x42C+var_414($sp)。

    而0x42C+var_40C($sp)為ATP_XML_GetChildNodeByName的一個參數,這里應該是讀取后放到了0x42C+var_40C($sp)。

    沒有辦法ATP_XML_GetChildNodeByName做具體分析,但通過網上一些師傅的文章,應該大差不差了。

    然后了解原理我們就可以通過閉合來實現命令運行了。

    qemuroot權限
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    kernel-pwn之ret2dir利用技巧
    前段時間打了場PWN2WIN,期間遇到了這道BIOS題,正好來學習一下UEFI PWN。
    Kernel pwn CTF 入門 – 1
    2021-10-21 16:39:08
    01簡介內核 CTF 入門,主要參考 CTF-Wiki。02環境配置調試內核需要一個優秀的 gdb 插件,這里選用 gef。
    Kernel PWN從入門到提升
    2023-03-23 10:17:57
    所以我決定用此文章結合一道不錯的例題盡可能詳細的來講一下kernel pwn從入門過渡到較高難度的部分,供想要學習kernel pwn的小伙伴們參考。文件系統kernel題一般都會給出一個打包好的文件系統,因此需要掌握常用到的打包/解包命令。
    能運行的環境包括I/O,權限控制,系統調用,進程管理,內存管理等多項功能都可以歸結到上邊兩點中。需要注意的是,kernel 的crash 通常會引起重啟。注意大多數的現代操作系統只使用了 Ring 0 和 Ring 3。
    然而在內核態中,堆內存的分配策略發生了變化。并把這個slab劃分為一個個object,并將這些object組成一個單向鏈表進行管理,這里需要注意slub系統把內存塊當成object看待,而不是伙伴系統中的頁。本次選擇演示的例題是2019-SUCTF的sudrv例題,查看start.sh中的信息可以發現開啟了kaslr保護與smep保護。
    之前花過一段時間研究群暉的NAS設備,并發現了一些安全問題,同時該研究內容入選了安全會議POC2019和HITB2021AMS。
    可是當我們開啟了smap保護之后,內核態就沒有辦法訪問用戶態的數據,此時當我們再hijack tty_operation到我們的用戶態時,我們的kernel就會panic,更別說劫持執行流到用戶態上執行rop了。當我們調用msgsnd時,在linux內核中會調用do_msgsnd。
    安裝Linux系統最小化,即選包最小化,yum安裝軟件包也要最小化,無用的包不裝。開機自啟動服務最小化,即無用的服務不開啟。Linux系統文件及目錄的權限設置最小化,禁止隨意創建、更改、刪除文件。在生產環境中,刪除多余的賬戶信息。
    關于MIPS架構的寄存器及指令集請自行查閱資料,這里就不多作介紹了。,則也會在prologue處保存下來,并在epilogue處取出。流水線指令集相關特性MIPS架構存在“流水線效應”,簡單來說,就是本應該順序執行的幾條命令卻同時執行了,其還存在緩存不一致性(cache
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类