不曾想過的的命令執行技巧

2021-09-24 11:56:53 字數 3128 閱讀 6592

舉例來說,下面是用tar命令簡介執行任意命令的方式:

但是再稍微研究一下,看上去有一大堆方法能用流行的unix命令做到這一點,規則很簡單:

不可以從shell中執行命令

利用另乙個命令的「***」

最終達到命令被執行

我用了乙個小指令碼,叫做runme.sh:

mitsurugi@mitsu:~/tmp$ cat runme.sh 

#! /bin/bash

echo "the name's 0xmitsurugi!"

echo "remember it!"

mitsurugi@mitsu:~/tmp$

如果指令碼執行時顯示這段話了,你就贏了,來繼續測試吧:

1/ tcpdump

$ tcpdump -n -i lo -g1 -w /dev/null -z ./runme.sh 

tcpdump: listening on lo, link-type en10mb (ethernet), capture size 65535 bytes

the name's 0xmitsurugi!

remember it!

the name's 0xmitsurugi!

remember it!

^c6 packets captured

12 packets received by filter

0 packets dropped by kernel$

因為每乙個資料報(-g),我們用指定的程式(-z)處理輸出的檔案(-w)

(附譯者測試截圖:)

2/ tar

$ tar c a.tar -i ./runme.sh a 

tar: a.tar: cannot stat: no such file or directory

the name's 0xmitsurugi!

remember it!

tar: exiting with failure status due to previous errors$

因為你可以在命令列指定任意壓縮程式給tar(-i)並且我們並不在乎它報錯與否

(附譯者測試截圖:)

3/ zip

$ zip z.zip a -t -tt ./runme.sh 

the name's 0xmitsurugi!

remember it!

test of z.zip ok

$

zip有自動測試zip檔案的友好功能(-t),並且用另乙個程式測試解壓縮(-tt)

譯者注:這裡的a必須是存在的檔案,否則報錯會不執行

(附譯者測試截圖:)

4/ ftp (and many others…)

很多程式可以將你的命令返回給shell執行,這裡我演示ftp是因為它在老版本unix上很通用

$ ftp 

ftp> ! ./runme.sh

the name's 0xmitsurugi!

remember it!

ftp>

還有vi、gdb之類等等,你甚至可以用~^z來退出ssh的session

(附譯者測試截圖:)

5/ man

這個就是玩一玩而已,但是你必須給出程式的完整路徑。用-p選項指定預設的分頁程式。

$ man -p /tmp/runme.sh man 

the name's 0xmitsurugi!

remember it!

$

附譯者測試截圖:)

6/ git (and man, and…)

如果你可以操縱環境變數,那麼就有很多好玩的事情了:

$ export pager=./runme.sh

$ git -p help

the name's 0xmitsurugi!

remember it!

$

(附譯者測試截圖:)

沒錯,「man」命令也可以這樣利用,並且肯定許多其他的程式只要定義了pager環境變數也一定可以。

但是別急,git能做的還有好多,如果你可以寫入任何$path中的目錄中,你可以做到:

(譯者注:在git 1.9.1 中文版上未測試成功,不明覺厲,不明源作者所用版本)

$ export path=/tmp:$path 

$ ln -sf /tmp/runme.sh /tmp/git-help

$ git --exec-path=/tmp help

the name's 0xmitsurugi

remember it!

$

儘管我不知道這該怎麼玩,但我確信別人會找到用途 :) 由於不明原因,要想執行必須要有–exec-path在$path中才行

7/ 最想不到的:bash $home 變數

恩,是的,有辦法弄二級的shell:

(譯者注:原文命令如下,但是原作者忘了一條: ln -sf /root/runme.sh /root/.bashrc)

$ pwd 

/tmp

$ ls -la .bashrc

lrwxrwxrwx 1 mitsurugi mitsurugi 8 juin 19 14:03 .bashrc -> runme.sh

$ export home=.

$ bash

the name's 0xmitsurugi!

remember it!

$

(附譯者測試截圖:)

在我嘗試之前我本以為這是100%會失敗的事情。

8/ awk (and many others)

當你有乙個「system」命令時,一切都變的太簡單了:

$ awk 'begin ' 

the name's 0xmitsurugi!

remember it!

$

(附譯者測試截圖:)

未曾想過的改變

曾經總是在幻想,如果遇到像 夏洛特煩惱 中的夏洛一樣的境遇,並且這種境遇可以讓我主動選擇回到過去的哪個時間節點,我會選擇什麼時期?人,是一直都在成長中變化的,大學時的我幻想著帶著記憶和知識回到盡可能小的時候。到那時,我會成為孩子王,我會去認識現在大家爭相追逐的女神,先下手為強,對了,最重要的是帶上乙...

不曾想過愛上你 一場命中註定的愛情

每每總是在夜深人靜的時候看電影,因為覺得世界安靜了,才有味道。昨晚剛看過的電影 不曾想過愛上你,剛開始看,覺得這部電影人物就幾個,而且還覺得有幾處挺尬演的,但是沒想到,看著看著,就哭的停不下來,電影男主郝英俊,在最後彩蛋的時候,才發現,原來早就遇見了女主楊菲雪,如果在不看這個彩蛋的話,其實挺理解剛開...

python中執行shell命令的小技巧

今天在寫乙個python檔案,其中想要去執行系統shell命令,在這條命令中,會用到pyhton變數,但是當我使用subprocess.popen 這個函式去執行的時候,會預設將變數當成乙個字串來使用,這就很尷尬了。下面 為我的處理辦法 lines ff.readlines for line cod...