程序执行中我们所忽略的事
1、程序执行时argv[0]一定会是程序名或者程序绝对路径吗?
这个问题可能让绝大多数人困惑,因为我们所看到的基本上都符合这个结论。那什么情况下不符合呢?
这就不得不提到我做过的pwnable.kr上的tiny_easy一题了
I made a pretty difficult pwn task.
However I also made a dumb rookie mistake and made it too easy :(
This is based on real event :) enjoy.ssh tiny_easy@pwnable.kr -p2222 (pw:guest)
程序主体就一下几行:
pop eax
pop edx
mov edx, [edx]
call edx
那么eax其实是参数个数,而edx则是argv[0]所在字符串的前4位组成的32位地址
exp.py
1 |
|
脚本很简单,利用的是类堆喷的方法。
这里subprocess.Popen(args, executable=None, env=None)
其实args这个list中的第一个参数是argv[0],而执行的程序则是executable对应的elf文件。可以发现用户可以控制程序执行时argv[0]
当然除了subprocess有这个功能,pwntools中pwnlib.tubes.process.process(args, shell = False, executable = None, env = None, timeout = ‘default’, log_level = INFO)也可以有类似的操作
注
程序执行中我们所忽略的事
https://ysc2.github.io/ysc2.github.io/2023/11/09/程序执行中我们所忽略的事/