不曾想过的的命令执行技巧

  • A+
所属分类:WooYun-Zone

http://0×90909090.blogspot.hk/2015/07/no-one-expect-command-execution.html

你可以在美丽的Unix世界中用shell执行你喜欢的任何命令,但是有时一个命令可以被用来执行另一个命令,这就是你不曾想过的命令执行技巧

举例来说,下面是用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 {system("./runme.sh")}'

The name's 0xMitsurugi!

Remember it!

$

(附译者测试截图:)

不曾想过的的命令执行技巧

除了这些我确信还会有许多……

就是这些了,我确信还会有许多这种命令执行,欢迎回复啊。

  1. 1#

    todaro (学习装逼) | 2015-07-06 14:10

    还有上次看的比较老的一个  将文件名命名为”–命令”  233333

  2. 2#
    感谢(1)

    梧桐雨 | 2015-07-06 14:41

    LZ文章可以转载吗?

  3. 3#

    xsser | 2015-07-06 14:44

    我擦啊 很多参数注射可以执行命令了

  4. 4#

    _Thorns (舍就是得。) | 2015-07-06 14:47

    好文!

  5. 5#

    lxj616 (简介) | 2015-07-06 15:11

    @梧桐雨 本文为译文,应该可以转载…………………..吧

  6. 6#

    lxj616 (简介) | 2015-07-06 15:13

    @xsser 从此命令执行不仅仅是过滤“|”和“&”的问题了 O(∩_∩)O~

  7. 7#
    感谢(1)

    secaryuan | 2015-07-06 15:18

    mark

  8. 8#

    肉肉 | 2015-07-06 15:26

    很有意思啊

  9. 9#

    梧桐雨 | 2015-07-06 15:30

    @lxj616 3Q,已转。

  10. 10#

    刘海哥 (‮moc.ghuil.www) | 2015-07-06 16:16

    mark。可惜没看明白

  11. 11#

    书生 (WooYun(白帽子技术社区)) | 2015-07-06 16:17

    mark

  12. 12#

    her0ma | 2015-07-06 16:41

    好文,收藏之,应该能绕过一般的堡垒机吧?

  13. 13#

    xsser | 2015-07-06 16:43

    @her0ma 应该很多

  14. 14#

    Comer | 2015-07-06 16:56

    要转要收藏啊

  15. 15#

    ChinaMars (.‮.) | 2015-07-06 17:44

    @xsser 很多不能直接执行命令,需要借助shell脚本。

  16. 16#

    Hxai11 (星辰将为你的眼,而风儿则为你的双手) | 2015-07-06 17:58

    6666淫荡的男人。。。

  17. 17#

    Hxai11 (星辰将为你的眼,而风儿则为你的双手) | 2015-07-06 18:00

    看到底就感觉是通过某些命令做跳板进行攻击

  18. 18#

    麻辣烫 | 2015-07-07 11:33

    mysql下提权早就有了呀。。。

  19. 19#

    廷廷 (想法最重要) | 2015-07-07 15:25

    mark 好东西啊

  20. 20#

    坏猫 | 2015-07-07 15:41

    已转 thX

  21. 21#

    springemp | 2015-07-07 17:15

    mark,牛XX

  22. 22#

    ttvip11 | 2015-07-07 18:06

    内容很不错,但是谷歌翻译的太蛋疼

  23. 23#

    _Evil (科普是一种公益行为) | 2015-07-08 11:05

    66666666666

  24. 24#
    感谢(1)

    greg.wu | 2015-07-08 13:54

    思路太淫荡了

  25. 25#

    erevus | 2015-07-08 18:14

    求fuzz一下ping的

  26. 26#

    redrain有节操 (快来和我滚床单) | 2015-07-08 18:28

    http://www.hackdog.me/wordpress/archives/454

  27. 27#

    Smilent | 2015-07-15 14:16

    root@sno-do:/tmp# tar c a.tar -I ./runme.sh 1.txt
    tar: a.tar: Cannot stat: No such file or directory
    tar (child): ./runme.sh: Cannot exec: Permission denied
    tar (child): Error is not recoverable: exiting now
    tar: Child returned status 2
    tar: Error is not recoverable: exiting now
    root@sno-do:/tmp# chmod u+x runme.sh
    root@sno-do:/tmp# tar c a.tar -I ./runme.sh 1.txt
    tar: a.tar: Cannot stat: No such file or directory
    Run me.......
    tar: Exiting with failure status due to previous errors
    root@sno-do:/tmp# ls
    1.txt  doc.tar.gz  runme.sh

    我看了一下。 貌似脚本没有可执行权限的话,还是Permission denied的

  28. 28#

    lxj616 (简介) | 2015-07-15 15:18

    @Smilent 是啊,本身只是达到其他命令执行,并不能越权执行