中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Firmware Slap有什么用

發布時間:2021-12-27 17:19:18 來源:億速云 閱讀:197 作者:小新 欄目:數據安全

小編給大家分享一下Firmware Slap有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

   

Firmware Slap

Firmware Slap這款工具可以通過混合分析和功能類聚相結合來發現目標固件中的安全漏洞以及相似的功能。Firmware Slap是一系列功能庫的合集,而且可以直接將安全掃描信息導出為pickle或JSON格式數據,以便與其他工具進行整合。

工具安裝

Firmware Slap可以在虛擬環境中直接運行,并且已在Python 3.6環境中進行了完整測試,廣大用戶可以直接使用下列命令完成工具的安裝:

sudo apt install python3-virtualenvvirtualenv -p python3 fwslapsource fwslap/bin/activate

或者說,大家也可以使用下列命令完成Firmware Slap的下載、安裝以及項目構建(配置):

cd ~mkdir .virtualenvspip install virtualenvwhich virtualenv #note path warningspip install virtualenvwrapperecho "export PATH=$PATH:~/.local/bin" >> ~/.bashrcecho "export WORKON_HOME=~/.virtualenvs" >> ~/.bashrcecho "source ~/.local/bin/virtualenvwrapper.sh" >> ~/.bashrc#usually best here to open new terminalmkvirtualenv fwslap -p /usr/bin/python3workon fwslap

最后,運行下列命令使用setup.py完成安裝:

python setup.py install

此時,我們還需要安裝rabbitmq、Docker以及Radare2或Ghidra:

# Ubuntusudo apt install rabbitmq-server docker.io# OSXbrew install rabbitmq# Radare2git clone https://github.com/radare/radare2.gitsudo ./radare2/sys/install.sh# Ghidrawget https://ghidra-sre.org/ghidra_9.0.4_PUBLIC_20190516.zipunzip ghidra_9.0.4_PUBLIC_20190516.zip -d ghidraecho "export PATH=\$PATH:$PWD/ghidra/ghidra_9.0.4/support" >> ~/.bashrc

如果你選擇的是Ghidra,你還需要安裝JDK 11:

sudo apt install default-jdkjava --version

如果你想使用Elastic搜索功能,你還需要運行Elasticsearch_and_kibana.sh腳本。

工具使用

首先,我們需要確保rabbitmq-server已運行:

# In a Separate terminal, run this in the top level "Firmware_Slap" directorycelery -A firmware_slap.celery_tasks worker --loglevel=info# Basic buffer overflowDiscover_And_Dump.py examples/iwconfig -D iwconfig_resultsLoad_And_View_Results.py iwconfig_results.all.pickle# Click management on the left pane# Click Saved Objects# Click Import# Select 'elastic_export.json' under the elastic directory in firmware slap# Navigate to dashboards on left pane and select 'Overview Dashboard'Load_And_View_Results.py iwconfig_results.all.pickle -s# Command injectiontar -xvf examples/Almond_libs.tar.gzVuln_Discover_Celery.py examples/upload.cgi -L Almond_Root/lib/

接下來,使用下列命令獲取用于分析的固件樣本:

# Get the firmware used for exampleswget https://firmware.securifi.com/AL3_64MB/AL3-R024-64MBbinwalk -Mre AL3-R024-64MB

選擇項目的根目錄,然后開啟Celery任務:

# In a separate terminalcelery -A firmware_slap.celery_tasks worker --loglevel=info

打開另一個新的終端窗口,然后運行一個漏洞掃描任務:

$ Vuln_Discover_Celery.py Almond_Root/etc_ro/lighttpd/www/cgi-bin/upload_bootloader.cgi -L Almond_Root/lib/[+] Getting argument functions[+] Analyzing 1 functions  0%|                                                                                                                                                                                                                                   | 0/1 [00:01<?, ?it/s]{   'Injected_Location': {   'base': '0x7ffefde8',........................ SNIP ......................    'type': 'Command Injection'}Python 3.5.2 (default, Nov 12 2018, 13:43:14) Type 'copyright', 'credits' or 'license' for more informationIPython 7.3.0 -- An enhanced Interactive Python. Type '?' for help.In [1]:

返回的漏洞對象

上述命令將會在result變量中返回一個對象,這是一個字典對象,其中包含了大量關于固件漏洞的信息,其中有三個主要的關鍵數據:函數參數、內存信息和注入位置。

In [3]: result.keys()                                                                                 Out[3]: dict_keys(['args', 'file_name', 'type', 'mem', 'Injected_Location'])

函數參數

Args參數中包含了恢復參數和參數值的詳細信息,可以用來復現漏洞。在上述例子中,工具發現了一個參數,我們可以用它來觸發命令執行:

In [1]: result['args']                                                           Out[1]: [{'base': 'a1',  'type': 'int',  'value': "0x0 -> b'`reboot`\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x00'"}]

內存信息

返回對象中的內存組件可以幫助研究人員跟蹤目標內存值,可以用于觸發漏洞,其中還包含棧地址的偏移量以及.text地址:

In [2]: result['mem']                                                                   Out[2]: [{'BBL_ADDR': '0x401138',  'BBL_DESC': {'DESCRIPTION': 'mtd_write_firmware+0x0 in upload_bootloader.cgi (0x401138)',   'DISASSEMBLY': ['0x401138:\tlui\t$gp, 0x42',    '0x40113c:\taddiu\t$sp, $sp, -0x228',    '0x401140:\taddiu\t$gp, $gp, -0x5e90',    '0x401144:\tlw\t$t9, -0x7f84($gp)',    '0x401148:\tsw\t$a2, 0x10($sp)',    '0x40114c:\tlui\t$a2, 0x40',    '0x401150:\tmove\t$a3, $a1',    '0x401154:\tsw\t$ra, 0x224($sp)',    '0x401158:\tsw\t$gp, 0x18($sp)',    '0x40115c:\tsw\t$a0, 0x14($sp)',    '0x401160:\taddiu\t$a1, $zero, 0x200',    '0x401164:\taddiu\t$a0, $sp, 0x20',    '0x401168:\tjalr\t$t9',    '0x40116c:\taddiu\t$a2, $a2, 0x196c']},  'DATA': "b'`reboot`\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'",  'DATA_ADDRS': ['0x0']}, {'BBL_ADDR': '0x401170',  'BBL_DESC': {'DESCRIPTION': 'mtd_write_firmware+0x38 in upload_bootloader.cgi (0x401170)',   'DISASSEMBLY': ['0x401170:\tlw\t$gp, 0x18($sp)',    '0x401174:\tnop\t',    '0x401178:\tlw\t$t9, -0x7f68($gp)',    '0x40117c:\tnop\t',    '0x401180:\tjalr\t$t9',    '0x401184:\taddiu\t$a0, $sp, 0x20']},  'DATA': "b'/bin/mtd_write -o 0 -l 0 write `reboot`'",  'DATA_ADDRS': ['0x7ffefe07']}]

命令注入

在我們的演示樣例中實現命令注入是非常容易的,只是為了方便演示注入位置:

In [4]: result['Injected_Location']                                                                      Out[4]: {'base': '0x7ffefde8', 'type': 'char *', 'value': '/bin/mtd_write -o 0 -l 0 write `reboot`'}

漏洞集群腳本示例

這個腳本集群腳本可以嘗試使用腳本中的功能模塊來掃描漏洞,然后構建k-means集群來提取固件中的漏洞,并進行相似功能的分類。

$ Vuln_Cluster_Celery.py -husage: Vuln_Cluster_Celery.py [-h] [-L LD_PATH] [-F FUNCTION] [-V VULN_PICKLE]                              Directory positional arguments:  Directory optional arguments:  -h, --help            show this help message and exit  -L LD_PATH, --LD_PATH LD_PATH                        Path to libraries to load  -F FUNCTION, --Function FUNCTION  -V VULN_PICKLE, --Vuln_Pickle VULN_PICKLE

下面的命令中,-F為已知的漏洞函數,-V為到處的Pickle,-L為代碼庫路徑,使用樣例如下:

$ python Vuln_Cluster_Celery.py -F mtd_write_firmware -L Almond_Root/lib/ Almond_Root/etc_ro/lighttpd/www/cgi-bin/[+] Reading Files100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00,  2.80it/s]Getting functions from executablesStarting main... Snip ...

以上是“Firmware Slap有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长兴县| 怀来县| 大余县| 库车县| 湘潭县| 凭祥市| 西林县| 金阳县| 彭山县| 齐河县| 巴彦县| 宁夏| 新闻| 那曲县| 惠来县| 神农架林区| 绥中县| 兰考县| 朝阳市| 阳东县| 漾濞| 苍南县| 新蔡县| 道真| 磐石市| 秭归县| 沂南县| 武威市| 佛坪县| 拉孜县| 铜川市| 雷山县| 宜黄县| 徐汇区| 介休市| 江西省| 英超| 岳池县| 临沧市| 淅川县| 涞水县|