GO語言實現的簡單“木馬”小程式

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

初學GO語言可能會感覺到很枯燥,而且GO和其他的程式設計語言的文法還有很大的差異,可能剛開始很難入門,為了提高對GO語言的學習興趣,快速地掌握GO的基本文法,我嘗試寫了個類似後門的小程式,主要的功能是可以在另一台裝置上查看和操作目標裝置,我是在我自己的電腦上運行這個小程式,然後用PAD來操作我的電腦,實現簡單的目錄訪問和檔案查看,還有重啟或關閉電腦的簡易功能,由於我也是才開始學習GO語言第二天,也就頭一天晚才看GO的文法,所以寫的過程中查閱了很多網上的資料,我的學習思路是先從網路上找關鍵詞,再去查對應的API文檔,然後參考文檔和自己的理解來完成這個小目標。

為了方便大家學習參考,我把最終的代碼貼出來,就兩個檔案,第一檔案如下,vince包裡有兩個方法,一個是讀路徑下的所有檔案,另一個方法是以文本方式輸出檔案

package vinceimport ("io/ioutil"//IO操作包"os"//系統工具包)func ListDir(dirPath string) (files []string, err error) {files = make([]string,0,10)//初始化數組,長度為0,初始容量為10,容量會隨實際增加dir,err := ioutil.ReadDir(dirPath)//讀指定路徑if err != nil {//如果有異常則返回異常return nil,err}PathSep := string(os.PathSeparator)//系統路徑分隔字元for _,file := range dir {//遍曆路徑列表(如果把i換成_則可以不用fmt包)files = append(files,dirPath + PathSep + file.Name() + "\n")//拼接路徑並加入數組中}return files,nil//返迴文件列表}func OpenFile(filePath string) (datas string) {data,err := ioutil.ReadFile(filePath)//開啟指定的檔案if err != nil {return ""}return string(data)//以文本方式返迴文件內容}


第二個是程式的入口程式了,同時也包括了一個提供WEB服務的功能,為了方便遠程操作

package mainimport ("fmt"//格式包"log""net/http"//"strings"//字串工具包"./vince""os/exec")type Hello struct{}func (h Hello) ServeHTTP(w http.ResponseWriter, r *http.Request) {r.ParseForm()var filePath string// = "/Users/vince"var fileName string// = "/Users/vince/test.xml"var cmds stringfor k, v := range r.Form {//遍曆請求表單的參數對if strings.ContainsAny(k,"ls") {//如果是查看路徑filePath = strings.Join(v, "")}if strings.ContainsAny(k,"pt") {//如果是查看檔案fileName = strings.Join(v, "")}if strings.ContainsAny(k,"cmd") {//如果是要執行命令cmds = strings.Join(v, "")if cmds == "reboot" {//是否是重啟命令fmt.Println("reboot")cmd := exec.Command("shutdown","-r","now")//產生重啟命令cmd.Start()//開始執行}}}if filePath != "" {//輸出檔案列表fmt.Fprint(w, "the path is :")fmt.Fprint(w, filePath)fmt.Fprint(w, "\n")files,err := vince.ListDir(filePath)if err != nil {fmt.Fprint(w, err)}fmt.Fprint(w, files)}if fileName != "" {//以文本方式輸出檔案內容fmt.Fprint(w, "\n")fmt.Fprint(w, "the file is :")fmt.Fprint(w, fileName)fmt.Fprint(w, "\n")datas := vince.OpenFile(fileName)fmt.Fprint(w, datas)}}//程式入口func main() {var hs Hello//監聽8080連接埠err := http.ListenAndServe("192.168.1.103:8080", hs)if err != nil {log.Fatal(err)}}


這裡的IP是我的電腦在區域網路的,為什麼不用127.0.0.1呢?如果用127.0.0.1的話我的PAD就訪問不了,原因是因為127.0.0.1是電腦對自己的一個虛擬IP,區域網路是訪問不了的,這裡的8080連接埠是可以指定的,也可以用其他的連接埠例如7070,運行時如果發現命令沒有執行,可以用  sudo go run web.go  方式運行,因為要執行命令是需要許可權。

另附上在PAD上的操作查看1.txt檔案內容的:


其實我寫這個小程式也是為了讓我老婆(測試新手)能夠更好地入門GO語言的,我是一個JAVA程式員,如果初學GO語言有疑問,可以到 https://golang.org/dl/    和  https://tour.go-zh.org/basics/6  尋找,裡面有安裝和文法的詳細說明

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.