我正在玩pwnable.kr。
命令是:
(ruby -e 'print PAYLOAD'; cat -) | nc SERVER PORT
PAYLOAD,SERVER和PORT只是占位符,因为我不想成为剧透。此命令应使服务器端的堆栈溢出,并让它执行system("/bin/sh")
。
我知道这些命令的含义,但我不知道为什么我不能这样做:我首先使用nc SERVER PORT
,然后输入有效载荷,按回车并输入我希望的命令在服务器端执行。
如果我使用shell字符串,一切正常,但如果我手动执行,我会从服务器端获得“**** stack smashing detected ****”错误。
感谢任何帮助,谢谢。
答案 0 :(得分:1)
cat -
只是意味着将cat
的标准输入重定向到其标准输出。这似乎毫无意义,但它会强制该行继续读取用户输入,而不是在发送有效负载后立即终止nc
。
此外,ruby -e 'print PLAYLOAD'
效率极低。 Ruby永远不需要被调用(它将导致行的执行速度变慢),并且命令也假定安装了ruby。将其替换为printf %s 'PAYLOAD'
,这将适用于大多数(如果不是全部)shell。