如何使用&lt;&lt; <printf

时间:2017-02-05 22:41:15

标签: bash stdin code-injection penetration-testing

=“”

向linux shell中的stdin发出多个命令。我正在使用DVWA高级命令注入进行练习。我知道|有一个漏洞,但我正在寻找一种获得如下输出的方法:

root@vwksOffensive:~# ping -c 4 10.0.0.1 ; ls
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.

--- 10.0.0.1 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3066ms

a    a_post  Documenti  Immagini              Modelli  Musica  pocl         rockyou.txt  Scrivania  WebScarab.properties
Add  b       hash       JavaSnoop.properties  mtu      plain   Pubblici    Scaricati    Video
root@vwksOffensive:~# 

开始
<<<printf "[ping ip argument] \u003B the_command_I_choose"

我的问题是可以做到这一点:

root@vwksOffensive:~# ping -c 4 &lt;&lt;&lt;printf "10.0.0.1"
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.

--- 10.0.0.1 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3055ms

root@vwksOffensive:~# 

但我无法做到这一点:

root@vwksOffensive:~# ping -c 4 &lt;&lt;&lt;printf "10.0.0.1 \u003b ls"
PING 10.0.0.1 \u003b ls (10.0.0.1) 56(84) bytes of data.

--- 10.0.0.1 \u003b ls ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3075ms

root@vwksOffensive:~# 

,甚至没有:

root@vwksOffensive:~# ping -c 4 &lt;&lt;&lt;printf "10.0.0.1 ; ls"
PING 10.0.0.1 ; ls (10.0.0.1) 56(84) bytes of data.

--- 10.0.0.1 ; ls ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3075ms

root@vwksOffensive:~# 

我深入搜索,最相似的,如果可以这么说,是这个问题的第一个答案: How to make a bash function which can read from standard input?

不幸的是,这并没有完全帮助我,所以我决定在这里发布我的问题,因为我确信,在我的无知中,我错过了一些东西。

解决方案必须包含char ;或以unicode编码的任何其他所需的特殊字符。禁止,用空格,char替换如下:

$substitutions = array(
        '&'  => '',
        ';'  => '',
        '| ' => '',
        '-'  => '',
        '$'  => '',
        '('  => '',
        ')'  => '',
        '`'  => '',
        '||' => '',
    ); 

1 个答案:

答案 0 :(得分:0)

如果您选择的“命令”在这样的变量中:

mycmd="ls -l"

然后你可以将你的命令和其他命令包装在这个包围的子shell中:()

子shell的输出可以重定向到您想要的任何其他命令。例如tail,grep,&gt; $ log等。

您要发送ping的IP地址也可以是变量名:

myip=10.0.0.1

(ping $myip  ; $mycmd ) > logfile.txt

目前尚不清楚为什么要将其发送给&lt;&lt;&lt;而不是直接在命令行上。如果必须使用&lt;&lt;&lt;,那么仍然尝试在()括号中包装命令,并在&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; 10.0.0 .. 和“ls -l”。括号将告诉bash,在看到右括号之前,命令不会完成。回车将停止&lt;&lt;&lt;&lt;从消耗下一个命令。