题目场景:
nc pwn2.jarvisoj.com 9881
level0.b9ded3801d6dd36a97468e128b81a65d
解题
在虚拟机里打开终端,输入命令“checksec"查看有没有什么保护机制
checksec之后发现有NX保护
将文件用IDA打开,F5键查看main函数,发现使用了vulnerable_function()函数,双击查看函数
read可以读入0x200,即512个字符,而从buf到vulnerable_function的返回地址只有0x80+0x8,即136个字节 < 512,是栈溢出
查看callsystem()函数
有"/bin/sh",调用了system()函数
可以覆盖vulnerable_function的返回地址为call_system函数地址,即可getshell
写脚本
打开vm终端,在python环境下跑脚本,ls,cat的flag
小结
pwntools的基本用法:
- from pwn import *
- context(arch = ‘i386’, os = ‘linux’) ;
设置目标机的信息 - r = remote(‘exploitme.example.com’, 31337) ;
用来建立一个远程连接,url或者ip作为 地址,然后指明端口,这里也可以仅仅使用 本地文件,调试时方便 - r.send(asm(shellcraft.sh())) ;
r.send()将shellcode发送到远程连接 - r.interactive() ;
将控制权交给用户,这样就可以使用打开的shell了
https://www.jianshu.com/p/d3187a63c582