不曾想过的的命令执行技巧
来源:互联网 发布:人力资源公司网站源码 编辑:程序博客网 时间:2024/05/21 06:45
http://0x90909090.blogspot.hk/2015/07/no-one-expect-command-execution.html
你可以在美丽的Unix世界中用shell执行你喜欢的任何命令,但是有时一个命令可以被用来执行另一个命令,这就是你不曾想过的命令执行技巧
举例来说,下面是用tar命令简介执行任意命令的方式:
但是再稍微研究一下,看上去有一大堆方法能用流行的unix命令做到这一点,规则很简单:
我用了一个小脚本,叫做runme.sh:
如果脚本运行时显示这段话了,你就赢了,来继续测试吧:
1/ tcpdump
因为每一个数据包(-G),我们用指定的程序(-z)处理输出的文件(-w)
(附译者测试截图:)
2/ tar
因为你可以在命令行指定任意压缩程序给tar(-I)并且我们并不在乎它报错与否
(附译者测试截图:)
3/ zip
zip有自动测试zip文件的友好功能(-T),并且用另一个程序测试解压缩(-TT)
译者注:这里的a必须是存在的文件,否则报错会不运行
(附译者测试截图:)
4/ ftp (and many others...)
很多程序可以将你的命令返回给shell执行,这里我演示ftp是因为它在老版本Unix上很通用
还有vi、gdb之类等等,你甚至可以用~^Z来退出ssh的session
(附译者测试截图:)
5/ man
这个就是玩一玩而已,但是你必须给出程序的完整路径。用-P选项指定默认的分页程序。
(附译者测试截图:)
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 中文版上未测试成功,不明觉厉,不明源作者所用版本)
尽管我不知道这该怎么玩,但我确信别人会找到用途 :) 由于不明原因,要想运行必须要有--exec-path在$PATH中才行
7/ 最想不到的:bash $HOME 变量
恩,是的,有办法弄二级的shell:
(译者注:原文命令如下,但是原作者忘了一条: ln -sf /root/runme.sh /root/.bashrc)
(附译者测试截图:)
在我尝试之前我本以为这是100%会失败的事情。
8/ awk (and many others)
当你有一个“system”命令时,一切都变的太简单了:
(附译者测试截图:)
除了这些我确信还会有许多……
就是这些了,我确信还会有许多这种命令执行,欢迎回复啊。
你可以在美丽的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!
$
(附译者测试截图:)
除了这些我确信还会有许多……
就是这些了,我确信还会有许多这种命令执行,欢迎回复啊。
0 0
- 不曾想过的的命令执行技巧
- 十个你可能不曾用过的Linux命令
- [转]十个你可能不曾用过的Linux命令
- 不曾遇见的你Linux命令
- date用法 - 你可能不曾见过的用法
- 不曾见过的Python函数——zip()
- 不曾见过的Python函数——extend()
- 不曾见过的Python函数——map()
- 不曾见过的Python函数——startswith(),endswith()
- 不曾见过的Python函数——join()
- 不曾见过的Python函数——any(),all()
- linux反向搜索执行过的命令
- Shell脚本显示执行过的命令
- 查看执行过的RMAN命令
- 滴滴快的柳青:这个不曾失败过的女人,正与不曾打破的旧体制博弈
- 亲爱的,谁不曾想岁岁年年?
- 不曾破灭的神话
- 不曾相识的时候
- java中解析json格式数据
- Android四大组件之一:Activity详解
- maven3常用命令、java项目搭建、web项目搭建详细图解
- Elasticsearch 学习 初步总结
- Spring框架中获得DataSource对象的方法
- 不曾想过的的命令执行技巧
- c++ 字符串转数字 数字转字符串
- docker高级应用之动态扩展容器空间大小
- Python内建函数isinstance无法准确判断bool与int类型
- Linux——信号掩码(signal mask)
- Thinking in java 学习笔记 001
- Oracle Sql 中常用字符串处理函数
- Android studio 之 assets
- c 实验总结(2)