HERE Document

HERE?Document是bash里面定義塊變量的途徑之一

定義的形式為:

命令<

...

...

...

HERE

它的作用即可以用來定義一段變量,會把命令和HERE之間的內容利用轉向輸入的方式交給該命令去處理。其中HERE相當于標記,可以是任何的字符串

使用HERE Document用在變量設定:

[root@localhost ~]# WOW='Wow,great!'

[root@localhost ~]# m1=$(cat <

> Line 1 is good.

> They are jack,marry and john.

> $WOW

> HERE)

echo $m1

Line 1 is good. They are jack,marry and john. Wow,great!

如上例寫成

$(cat <<"HERE",表示這個Here Document擁有和雙引號一樣的特性,即支持變量替換的功能

也可以用來定義一段注釋 ,利用HERE Document做多行批注,方法是:

:<

這是第一行批注

這是第二行批注

這是第三行批注

其它行,類推

HERE

:代表什么都不做

原本bash只支持單行批注(用#表示),現就可用于多行注釋了。

注意這里HERE還有一個特殊的用法 :

就是在HERE前面加上 - 或者給HERE加上' '加上- 表明下述文字段所有TAB鍵將全部忽略加上' '表明以下凡是變量定義用到了' ',將會使變量呈現所見即所得的形式,也即關閉變量替換;如果加上的是" "雙引號,則會進行變量替換

[root@localhost ~]# cat<<-'HERE'

>? ? Line 1 is good.

>? ? They are jack,marry and john.

>? ? $WOW

> HERE

Line 1 is good.

They are jack,marry and john.

$WOW

利用HERE Document,打包C(或其它程序語言)的原始碼。這是Cracker散布安全漏洞程序,最喜歡的方法

1 #!/bin/bash

2 # Filename:create_prg.sh

3 echo "creating hello.c..."

4 echo

5 cat <<'EOF' > hello.c

6 #include

7

8 int main()

9 {

10? ? printf("Hello world!\n");

11? ? return 0;

12 }

13 EOF

14

15 echo "compiling hello.c..."

16 echo

17 #compile hello.c,create the excutable file

18 gcc -o hello hello.c

19

20 #if compile successfully,then excute it

21 if [ $? -eq 0 ];then

22? ? echo "excute hello..."

23? ? echo

24? ? chmod u+x hello

25? ? ./hello

26 else

27? ? echo 'Compile Error:hello.c'

28 fi

5到13行利用HERE Document夾帶了一個hello.c程序的原始碼,執行腳本時會產生hello.c,接著調用gcc 編譯hello.c,若編譯無誤,就“執行”(開始攻擊)程序文件hello.

這是shell script攜帶攻擊程序的原型

執行結果:

[root@localhost sh]# ./create_prg.sh

creating hello.c...

compiling hello.c...

excute hello...

Hello world!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容