shell命令“cat - ”的效果

时间:2015-10-25 05:47:53

标签: linux shell

我正在玩pwnable.kr

命令是: (ruby -e 'print PAYLOAD'; cat -) | nc SERVER PORT

PAYLOAD,SERVER和PORT只是占位符,因为我不想成为剧透。此命令应使服务器端的堆栈溢出,并让它执行system("/bin/sh")

我知道这些命令的含义,但我不知道为什么我不能这样做:我首先使用nc SERVER PORT,然后输入有效载荷,按回车并输入我希望的命令在服务器端执行。

如果我使用shell字符串,一切正常,但如果我手动执行,我会从服务器端获得“**** stack smashing detected ****”错误。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

cat -只是意味着将cat的标准输入重定向到其标准输出。这似乎毫无意义,但它会强制该行继续读取用户输入,而不是在发送有效负载后立即终止nc

此外,ruby -e 'print PLAYLOAD'效率极低。 Ruby永远不需要被调用(它将导致行的执行速度变慢),并且命令也假定安装了ruby。将其替换为printf %s 'PAYLOAD',这将适用于大多数(如果不是全部)shell。