色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何利用Boofuzz框架編寫腳本并進(jìn)行IoT設(shè)備服務(wù)

蛇矛實(shí)驗(yàn)室 ? 來源:蛇矛實(shí)驗(yàn)室 ? 作者:c4se ? 2022-10-10 17:00 ? 次閱讀

本環(huán)境是蛇矛實(shí)驗(yàn)室基于"火天網(wǎng)演攻防演訓(xùn)靶場"進(jìn)行搭建,通過火天網(wǎng)演中的環(huán)境構(gòu)建模塊,可以靈活的對(duì)目標(biāo)網(wǎng)絡(luò)進(jìn)行設(shè)計(jì)和配置,并且可以快速進(jìn)行場景搭建和復(fù)現(xiàn)驗(yàn)證工作。

自 2005年國際電信聯(lián)盟正式提出“物聯(lián)網(wǎng)IoT)”這一概念以來,物聯(lián)網(wǎng)在全球范圍內(nèi)迅速獲得認(rèn)可,并成為信息產(chǎn)業(yè)革命第三次浪潮和第四次工業(yè)革命的核心支撐。同時(shí),數(shù)以億計(jì)的設(shè)備接入物聯(lián)網(wǎng),這些設(shè)備如今已滲透到我們生活的方方面面,從家居到工廠無處不在。一方面物聯(lián)網(wǎng)設(shè)備使我們的生活更加便捷,而另一方面物聯(lián)網(wǎng)安全事件頻發(fā),全球物聯(lián)網(wǎng)安全支出不斷增加。

當(dāng)前,大量物聯(lián)網(wǎng)設(shè)備及云服務(wù)端直接暴露于互聯(lián)網(wǎng),這些設(shè)備和云服務(wù)端存在的漏洞一旦被利用,可導(dǎo)致設(shè)備被控制、用戶隱私泄露、云服務(wù)端數(shù)據(jù)被竊取等安全風(fēng)險(xiǎn),甚至?xí)?duì)基礎(chǔ)通信網(wǎng)絡(luò)造成嚴(yán)重影響。從2018年全球統(tǒng)計(jì)數(shù)據(jù)來看,路由器、視頻監(jiān)控設(shè)備暴漏數(shù)量占比較高。

路由器暴漏數(shù)量超過3000萬臺(tái),視頻監(jiān)控設(shè)備暴露數(shù)量超過1700萬臺(tái),并且這些設(shè)備往后幾年會(huì)一年比一年多,物聯(lián)網(wǎng)安全的事件也會(huì)越來越多。由此,物聯(lián)網(wǎng)安全行業(yè)需要大力發(fā)展,物聯(lián)網(wǎng)安全人才的培養(yǎng)也刻不容緩。

蛇矛實(shí)驗(yàn)室在后續(xù)將利用火天網(wǎng)境系列靶場中的相關(guān)目標(biāo)仿真和環(huán)境構(gòu)建的特性,將持續(xù)發(fā)布關(guān)于“物聯(lián)網(wǎng)安全-CVE實(shí)戰(zhàn)分析”系列的文章來幫助大家入門物聯(lián)網(wǎng)安全。

關(guān)于模糊測試

模糊測試(Fuzz Testing)是一種自動(dòng)化的軟件測試技術(shù),最初是由威斯康辛大學(xué)的Barton Miller于1989年開發(fā)的,通常用于識(shí)別程序中的潛在漏洞。其核心思想是自動(dòng)或半自動(dòng)的生成隨機(jī)數(shù)據(jù)輸入到一個(gè)程序中,并監(jiān)視程序異常,如***,斷言 (assertion)失敗,以發(fā)現(xiàn)可能的程序錯(cuò)誤,比如內(nèi)存泄漏。

模糊測試常常用于檢測軟件或計(jì)算機(jī)系統(tǒng)的安全漏洞。Boofuzz是一個(gè)基于python生成的協(xié)議Fuzz工具,它通過python語言來描述協(xié)議的格式。Boofuzz對(duì)協(xié)議的模糊測試有著良好的支持,且其代碼開源,目前被廣泛使用,但Boofuzz無法直接獲取協(xié)議相關(guān)知識(shí),需人工定義協(xié)議模型。這一小節(jié),我們將使用Boofuzz實(shí)戰(zhàn)測試vivotek攝像頭棧溢出漏洞。

漏洞分析

下載好固件后,我們使用"binwalk 固件名"進(jìn)行分析,發(fā)現(xiàn)固件并沒有加密,并且文件系統(tǒng)是squashfs格式,固件中的數(shù)據(jù)都經(jīng)過了xz壓縮。

904b4f34-35a9-11ed-ba43-dac502259ad0.png

我們使用"binwalk -Me 固件名"遞歸提取里面的文件系統(tǒng)。

9087a394-35a9-11ed-ba43-dac502259ad0.png

里面的目錄比較多,我們可以使用”find . -name ’squashfs-root‘ “,也可以使用tree命令快速預(yù)覽文件目錄分布情況。這里我使用"tree -d -L 5"命令,遞歸查看5層以內(nèi)的目錄,然后就找到了"squashfs-root"文件目錄。

90c123da-35a9-11ed-ba43-dac502259ad0.png

還是和前面小節(jié)的步驟相同,我們進(jìn)入到文件系統(tǒng)的根目錄中,查看開機(jī)自啟"etc/init.d/rcS"文件。

90ee1070-35a9-11ed-ba43-dac502259ad0.png

開機(jī)自啟文件中,首先初始化系統(tǒng),然后使用run-parts命令遍歷執(zhí)行"/etc/rcS.d"目錄下的所有可執(zhí)行腳本。

91244226-35a9-11ed-ba43-dac502259ad0.png

進(jìn)入"etc/rcS.d/"目錄下后發(fā)現(xiàn)執(zhí)行腳本均為軟連接文件,連接至"etc/init.d/"下的對(duì)應(yīng)文件。我們?cè)谶@里看到了httpd腳本,一般情況下路由器系統(tǒng)中的httpd為web服務(wù)程序,所以這里可能是啟動(dòng)httpd服務(wù)的腳本。

914fc6f8-35a9-11ed-ba43-dac502259ad0.png

我們查看"/etc/init.d/httpd"文件,發(fā)現(xiàn)httpd程序?yàn)?"/usr/sbin/httpd"程序,并且執(zhí)行參數(shù)為"-c /etc/conf.d/boa -d"。確定了路由器的服務(wù)器程序,我們進(jìn)行漏洞分析。

91880608-35a9-11ed-ba43-dac502259ad0.png

這一小節(jié)的漏洞信息以及POC已經(jīng)在[exploit-db]中詳細(xì)的展示了出來。根據(jù)這里的漏洞詳情我們知道了vivotek攝像頭漏洞是棧溢出漏洞,觸發(fā)的具體位置為"Content-Length"頭。根據(jù)以上信息,我們將httpd程序放入IDA Pro進(jìn)行分析。

91b9e9de-35a9-11ed-ba43-dac502259ad0.png

IDA Pro分析完畢后,我們按"shift+F12"搜索Content-Length字符串,雙擊進(jìn)入其存儲(chǔ)變量地址。

91e2c30e-35a9-11ed-ba43-dac502259ad0.png

鼠標(biāo)點(diǎn)擊"Content-Length"存儲(chǔ)變量,按“x”可以找到該變量的交叉引用。發(fā)現(xiàn)sub_17F80函數(shù)引用了該變量。進(jìn)入函數(shù)進(jìn)行分析

920b1610-35a9-11ed-ba43-dac502259ad0.png

函數(shù)獲取由用戶"POST或PUT"方法請(qǐng)求包中的"Content-Length"頭位置并存入v33變量中。然后獲取" "的位置賦值給v34,獲取":"的位置賦值給v35變量。

隨后使用strncpy函數(shù)從":"后面+1位置的字節(jié)一直復(fù)制到“ "字符前面一字節(jié)的位置,將所有的字節(jié)復(fù)制到dest變量,dest變量為4字節(jié)的char型數(shù)組。

由于開發(fā)者沒有對(duì)“Content-Length”參數(shù)的值進(jìn)行限制,導(dǎo)致攻擊者可以偽造"Content-Length"頭,寫入大量不為"x00"的垃圾數(shù)據(jù)就可以導(dǎo)致棧溢出。

923d0abc-35a9-11ed-ba43-dac502259ad0.png

知道了漏洞成因以及觸發(fā)位置,下面我們使用boofuzz進(jìn)行fuzz測試,以下測試環(huán)境在ubuntu18.04中完成。

首先安裝boofuzz:

Boofuzz 官方要求 Python ≥ 3.5,并且推薦安裝方式為pip。那么我們先確保python和pip已經(jīng)安裝。

sudo apt-getinstall python3python3-pip python3-dev

Boofuzz官方建議我們?cè)谔摂M環(huán)境 (venv)中設(shè)置 boofuzz 。那么我們需要安裝boofuzz的依賴

sudo apt-get installpython3-venv build-essential

創(chuàng)建boofuzz目錄,并在其目錄下啟動(dòng)虛擬環(huán)境env,使其與其他包隔離

mkdirboofuzz && cdboofuzz
python3-mvenv env

926a222c-35a9-11ed-ba43-dac502259ad0.png

這會(huì)在當(dāng)前文件夾中創(chuàng)建一個(gè)新的虛擬環(huán)境 env。這里的虛擬環(huán)境中的 Python 版本是固定的,并且可以在創(chuàng)建時(shí)選擇。與全局安裝不同,虛擬環(huán)境中的虛擬環(huán)境python別名為 Python 版本。然后我們使用下面的命令來激活虛擬環(huán)境:

sourceenv/bin/activate

激活環(huán)境后,我們終端前面的標(biāo)識(shí)多了一個(gè)"(env)",這代表我們?cè)谔摂M環(huán)境中操作。

然后安裝最新版的pip和setuptools:

pip install-U pip setuptools

最后,安裝 boofuzz:

pip installboofuzz

安裝好以后,進(jìn)入python3,測試導(dǎo)入boofuzz庫不報(bào)錯(cuò)即為安裝成功。

92a10d78-35a9-11ed-ba43-dac502259ad0.png

安裝好boofuzz以后,我們就可以使用boofuzz框架進(jìn)行fuzz測試了。我們需要編寫一個(gè)fuzz腳本,腳本如下:

fromboofuzz import*
IP = "127.0.0.1"
PORT = 80

defcheck_response(target,fuzz_data_logger,session,*args,**kwargs):
fuzz_data_logger.log_info("Checking for response ...")
try:
response = target.recv(512)
except:
fuzz_data_logger.log_fail("Unable to connect ...")
return
ifnotresponse:
fuzz_data_logger.log_fail("Empty response ...")
target.close()
return
fuzz_data_logger.log_info("Start checking ...
"+response.decode())
target.close()
return

defmain():
session = Session(
target=Target(connection=SocketConnection(IP,PORT,proto="tcp"),
),
post_test_case_callbacks=[check_response],
)
s_initialize(name="FUZZ")
withs_block("Request-Line"):
# Method
s_group("Method",["POST"])
s_delim(" ",fuzzable=False)
s_string("/cgi-bin/admin/upgrade.cgi ",fuzzable=False,name="URI")
s_static("HTTP/1.1",name="Version")
s_static("
",name="CRLF")
# Host
s_static("Host")
s_delim(": ",fuzzable=False)
s_string("127.0.0.1",fuzzable=False,name="IP")
s_static("
")
# Connection
s_static("Connection")
s_delim(": ",fuzzable=False)
s_string("Close",fuzzable=False,name="Active")
s_static("
")
# Content-Length
s_static("Content-Length")
s_delim(": ", fuzzable=False)
s_string("65", fuzzable=True)
# End
s_static("
")
s_static("
")

session.connect(s_get("FUZZ"))
session.fuzz()

if__name__=="__main__":
main()

上面的腳本***有倆個(gè)函數(shù),一個(gè)main函數(shù)(腳本入口函數(shù)),一個(gè)check_response函數(shù)(回調(diào)函數(shù))。

main函數(shù)中,首先我們創(chuàng)建一個(gè)session,session可以設(shè)置一些基礎(chǔ)屬性,我們可以使用Target設(shè)置我們要fuzz的目標(biāo)的ip地址和端口號(hào)以及協(xié)議類型(這里我們要fuzz的目標(biāo)為httpd服務(wù)器,即tcp協(xié)議)。Target還可以使用post_test_case_callbacks指定回調(diào)函數(shù)。

當(dāng)我們發(fā)送fuzz的請(qǐng)求包后,boofuzz需要判斷返回包的內(nèi)容來確定是否具有漏洞特點(diǎn),這里就需要用到回調(diào)函數(shù)。我們可以自己編寫回調(diào)函數(shù),這里我們將回調(diào)函數(shù)指定為check_response函數(shù),回調(diào)函數(shù)的參數(shù)'fuzz_data_logger'記錄測試檢查和通過/失敗。

boofuzz數(shù)據(jù)生成的特點(diǎn)為一個(gè)數(shù)據(jù)報(bào)文由Primitives和Blocks組成,多個(gè)Primitives可以組成Block,Blocks之間可以相互嵌套。所以我們需要初始化一個(gè)消息請(qǐng)求塊,這里我設(shè)置請(qǐng)求塊的名稱為FUZZ,然后通過s_block設(shè)置對(duì)應(yīng)的http請(qǐng)求數(shù)據(jù)。然后我們可以指定對(duì)應(yīng)的字段選擇fuzz,設(shè)置Content-Length參數(shù)的值為”fuzzable=True“。使用session.connect(s_get("FUZZ"))發(fā)送請(qǐng)求包裹,session.fuzz()開始驅(qū)動(dòng)整個(gè)fuzz過程。

下面開始測試fuzz腳本,我們先模擬運(yùn)行vivotek的httpd服務(wù),訪問后發(fā)現(xiàn)服務(wù)正常。

92c39afa-35a9-11ed-ba43-dac502259ad0.png

運(yùn)行我們的fuzz腳本,藍(lán)色字體的部分為腳本發(fā)送的request包數(shù)據(jù),我們發(fā)現(xiàn)Content-Length參數(shù)后面的值確實(shí)是由boofuzz產(chǎn)生的fuzz數(shù)據(jù)。這里case 1中出現(xiàn)了紅色字體的報(bào)錯(cuò),為"Empty reponse ...",也就是說沒有返回包。猜測服務(wù)器可能已經(jīng)***,切換至模擬的路由器系統(tǒng)進(jìn)行查看

9303d2d2-35a9-11ed-ba43-dac502259ad0.png

果然,服務(wù)器已經(jīng)***,說明我們的fuzz腳本是正確的,服務(wù)器不能正確處理Content-Length的垃圾數(shù)據(jù),導(dǎo)致服務(wù)器***。

933f1afe-35a9-11ed-ba43-dac502259ad0.png

這時(shí),我們可以訪問localhost:26000可以觀察boofuzz web服務(wù)中這次fuzz的詳細(xì)信息。

9367f26c-35a9-11ed-ba43-dac502259ad0.png

確定了確實(shí)是有棧溢出漏洞后,我們寫一個(gè)poc測試一下棧溢出偏移

正式運(yùn)行路由器httpd服務(wù),使用gdbserver進(jìn)行attach,使用gdb-multiarch進(jìn)行遠(yuǎn)程調(diào)試。

93904fd2-35a9-11ed-ba43-dac502259ad0.png

我們?cè)?x18538(strncpy函數(shù))處下斷點(diǎn),然后c運(yùn)行,這時(shí)發(fā)送poc,程序斷在了strncpy處。pwndbg中顯示了strncpy函數(shù)執(zhí)行時(shí)src和dest的地址。

93c24a00-35a9-11ed-ba43-dac502259ad0.png

拷貝到棧上時(shí),0x7effeb4c處為返回地址,那么我們就算出了拷貝字符串到返回地址的偏移為0x34字節(jié)。下面我們開始寫exp

93f94258-35a9-11ed-ba43-dac502259ad0.png

編寫exp的過程中,需要注意的點(diǎn)為strncpy復(fù)制時(shí)遇到"x00"停止,所以我們需要繞過"x00"找到可以用的rop gadget,然后通過已知的libc基地址找到system函數(shù)的地址運(yùn)行命令。最終代碼如下

94270a9e-35a9-11ed-ba43-dac502259ad0.png

動(dòng)態(tài)調(diào)試整個(gè)過程,下斷strncpy,沒拷貝前棧空間正常

94533704-35a9-11ed-ba43-dac502259ad0.png

strncpy拷貝完成后,我們觀察一下棧的空間分布

94811e8a-35a9-11ed-ba43-dac502259ad0.png

返回地址確實(shí)被我們覆蓋成了gadget的地址,說明我們前面的分析正確。

94b40084-35a9-11ed-ba43-dac502259ad0.png

漏洞復(fù)現(xiàn)

啟動(dòng)路由器后,運(yùn)行我們的exp腳本

94fdfc3e-35a9-11ed-ba43-dac502259ad0.png

此時(shí)路由器系統(tǒng)中,已經(jīng)運(yùn)行了"nc -lp2222 -e /bin/sh",我們使用nc連接后就可以獲得shell

952a3d44-35a9-11ed-ba43-dac502259ad0.png

使用nc連接2222端口后,隨意運(yùn)行命令,命令成功執(zhí)行,本次攻擊成功。

956b360a-35a9-11ed-ba43-dac502259ad0.png

總結(jié)

這一小節(jié),我們以vivotek攝像頭為例,簡短介紹了模糊測試框架Boofuzz,以及學(xué)習(xí)了如何利用該框架編寫腳本進(jìn)行IoT設(shè)備服務(wù)進(jìn)行fuzz。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 路由器
    +關(guān)注

    關(guān)注

    22

    文章

    3737

    瀏覽量

    114044
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4800

    瀏覽量

    84834
  • IOT
    IOT
    +關(guān)注

    關(guān)注

    187

    文章

    4218

    瀏覽量

    197105

原文標(biāo)題:物聯(lián)網(wǎng)安全實(shí)戰(zhàn)從零開始-Vivotek的Fuzzing 棧溢出

文章出處:【微信號(hào):蛇矛實(shí)驗(yàn)室,微信公眾號(hào):蛇矛實(shí)驗(yàn)室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    shell腳本編寫之本地腳本編寫和執(zhí)行

    過,我們指定的shell應(yīng)用為/bin/bash,所以,我們使用bash程序直接執(zhí)行myshell.sh,或者/bin/bash myshell.sh:如果使用shell應(yīng)用進(jìn)行執(zhí)行,那么在腳本編寫
    發(fā)表于 08-28 09:36

    腳本引擎編寫

    tcl腳本小白,我現(xiàn)在需要編寫一個(gè)腳本引擎,目前已經(jīng)建立好了自己的一套指令系統(tǒng),需要能使用這個(gè)腳本引擎將我記事本編寫的程序翻譯成機(jī)器碼,換句
    發(fā)表于 03-19 16:16

    利用xposed框架模擬真實(shí)手機(jī)環(huán)境和建立引流腳本矩陣的方法

    如何利用xposed框架模擬真實(shí)手機(jī)環(huán)境,建立引流腳本矩陣
    發(fā)表于 05-31 11:46

    如何使用STM32串口中斷服務(wù)函數(shù)進(jìn)行接收并進(jìn)行轉(zhuǎn)化為int型?

    如何使用STM32串口中斷服務(wù)函數(shù)進(jìn)行接收并進(jìn)行轉(zhuǎn)化為int型?
    發(fā)表于 12-07 08:03

    如何利用STM32通過ESP8266接入阿里云IoT平臺(tái)并進(jìn)行相關(guān)溫濕度的應(yīng)用開發(fā)

    ??本文通過實(shí)例來詳細(xì)介紹如何利用STM32,通過ESP8266接入阿里云IoT平臺(tái)并進(jìn)行相關(guān)溫濕度的應(yīng)用開發(fā)。具體分3個(gè)部分來做說明,第一部分介紹硬件的準(zhǔn)備與連接;第二部分說明在阿里云IoT
    發(fā)表于 01-27 07:30

    HamronyOS自動(dòng)化測試框架使用指南

    腳本編寫主要基于 DevEco Studio,并建議使用 3.1.0.400 之后的版本進(jìn)行腳本編寫腳本執(zhí)行需要 PC 連接 Harm
    發(fā)表于 12-19 10:26

    python編寫腳本方法

    對(duì)于具有484個(gè)引腳的芯片,如果手動(dòng)一個(gè)一個(gè)設(shè)置引腳,必然是一場噩夢。網(wǎng)上有使用Capture進(jìn)行自動(dòng)導(dǎo)入的帖子,不過沒有找到AD方面的帖子。本文使用python,編寫腳本,自動(dòng)分配引腳。
    發(fā)表于 11-17 11:38 ?4955次閱讀

    如何在代碼編寫器StudioIDE開發(fā)環(huán)境中使用腳本實(shí)用程序的詳細(xì)描寫

    腳本是代碼編寫器Studio集成開發(fā)的一種新實(shí)用工具。環(huán)境(IDE)V2.10。它提供了一個(gè)集成到Perl或Visual中的命令庫。基本應(yīng)用程序(VBA),提供可利用的批處理模式腳本
    發(fā)表于 04-25 14:09 ?8次下載
    如何在代碼<b class='flag-5'>編寫</b>器StudioIDE開發(fā)環(huán)境中使用<b class='flag-5'>腳本</b>實(shí)用程序的詳細(xì)描寫

    使用傳統(tǒng)的IDE對(duì)51單片機(jī)進(jìn)行邏輯編寫的基本框架程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用傳統(tǒng)的IDE對(duì)51單片機(jī)進(jìn)行邏輯編寫的基本框架程序免費(fèi)下載。
    發(fā)表于 09-03 17:28 ?0次下載
    使用傳統(tǒng)的IDE對(duì)51單片機(jī)<b class='flag-5'>進(jìn)行</b>邏輯<b class='flag-5'>編寫</b>的基本<b class='flag-5'>框架</b>程序免費(fèi)下載

    淺談IoT Power的Lua腳本開發(fā)應(yīng)用

    Lua腳本開發(fā)簡單快速,在Cat.1和MCU開發(fā)應(yīng)用中已歷經(jīng)驗(yàn)證并廣受好評(píng)。所以LuatOS社群經(jīng)常有人問:合宙推出的口袋神器——IoT Power,可以腳本開發(fā)嗎?
    的頭像 發(fā)表于 09-05 14:43 ?1197次閱讀

    Linux命令行與shell腳本編寫

    Linux命令行與shell腳本編寫
    發(fā)表于 01-11 16:50 ?4次下載

    編寫一個(gè)點(diǎn)名器腳本

    目的:編寫一個(gè)腳本,可以將準(zhǔn)別好的名字合集的.txt傳入腳本,然后每次隨機(jī)顯示一個(gè)人的姓名
    的頭像 發(fā)表于 11-06 12:41 ?601次閱讀
    <b class='flag-5'>編寫</b>一個(gè)點(diǎn)名器<b class='flag-5'>腳本</b>

    shell腳本編寫程序

    當(dāng)編寫Shell腳本時(shí),你需要按照以下步驟進(jìn)行: 打開一個(gè)文本編輯器,例如vi、nano或gedit。 創(chuàng)建一個(gè)新文件,并將其保存為以.sh為擴(kuò)展名的文件, 例如script.sh 。 在文件的第一
    的頭像 發(fā)表于 11-08 10:12 ?902次閱讀

    如何利用shell進(jìn)行腳本程序的設(shè)計(jì)?

    利用Shell進(jìn)行腳本程序的設(shè)計(jì)可以按照以下步驟進(jìn)行: 選擇Shell解釋器:在Unix和Linux系統(tǒng)中,通常會(huì)默認(rèn)安裝一個(gè)或多個(gè)Shell解釋器,其中最常見且功能強(qiáng)大的是Bash(Bourne
    的頭像 發(fā)表于 11-08 10:17 ?649次閱讀

    shell實(shí)例三(編寫批量修改擴(kuò)展名腳本)

    實(shí)現(xiàn)功能: 編寫批量修改擴(kuò)展名腳本,如批量將 txt 文件修改為 doc 文件 執(zhí)行腳本時(shí),需要給腳本添加位置參數(shù)
    的頭像 發(fā)表于 11-09 09:35 ?711次閱讀
    shell實(shí)例三(<b class='flag-5'>編寫</b>批量修改擴(kuò)展名<b class='flag-5'>腳本</b>)
    主站蜘蛛池模板: 国产福利视频第一导航| 国产 亚洲 中文字幕 在线| 性直播免费| 日韩在线中文字幕无码| 男人脱女人衣服吃奶视频| 久久香蕉国产线看观看首页| 好男人在线观看视频观看高清视频免费 | 欧美性极品黑人hd| 欧美18精品久久久无码午夜福利 | 野花日本手机观看大全免费3| 亚洲国产成人在线| 亚洲精品久久无码AV片银杏| 亚洲高清无在码在线电影| 无限资源在线观看8| 午夜福到在线4国产| 乌克兰10一12x video| 偷偷鲁手机在线播放AV| 午夜十八岁禁| 亚洲欧美一区二区成人片| 一本到2019线观看| 孕交videosgratis乌克兰| 最近在线视频观看2018免费| 97色伦图片97色伦图影院久久| 99日精品欧美国产| 抽插内射高潮呻吟V杜V| 国产精品高清在线观看地址| 国产亚洲精品第一区香蕉| 国内精品乱码卡一卡2卡三卡| 好嗨哟在线看片免费| 九九热最新视频| 老太婆风流特黄一级| 欧美18在线| 日韩欧美一区二区中文字幕| 天天躁躁水汪汪人碰人| 亚洲麻豆精品成人A在线观看| 一本大道香蕉中文在线视频观看 | 精品少妇爆AV无码专区| 李亚男三级| 人与禽物videos另类| 性色AV一区二区三区咪爱四虎| 一个人的免费高清影院|