既然是记录学习历程,我觉得还是从头开始吧
我刚开始学的时候就苦于找不到学习资源,找到了又看不懂的崩溃处境
好吧,是我不会正确上网+本人又菜又摆的缘故
一般是从比赛官方下载附件
下载到虚拟机 打开terminal——checksec 查看保护机制
(拖进IDA/利用GDB,然后......此处省略脑子)
编写脚本(用python)
运行exp.py—>ls—>cat flag
Linux系统命令(在虚拟机中使用)
nc——远端
ls——查看目录下文件
cat flag——获得flag
cd——打开文件
touch 文件名——创建文件
vim——编辑
chmod +x ./文件名 ~或~chmod 777 ./文件名——给文件赋权限
python 脚本名.py——运行脚本
rm -rf 文件名——删除文件
IDA使用
- Tab键从C语言和汇编之间切换
- f5从汇编到C语言
- 单击函数+按n——重命名函数(或者右键rename)
- Options->General->Disassembly->Line Prefixes——看地址
- shift+f12——查看字符串,一般利用它看看有没有后门函数,\bin\sh之类的东西
pwntools
from pown import* //调用pwntools
p=p.process("文件名") //本地运行
p=remote("ip",port)//打远端
p.send()发送消息,消息不存在换行符
p.sendafter("")//在读到“”之后发送
p.sendline()——发送信息后换行
p.recvline()接收并等待提示消息
p.interactive:进入交互模式,最后写
p.recvuntil(字符串):接收并等待提示消息
gdb.attach(p, ’b * 0xfa’):启动gdb
p64、p32——根据设置的context选择小端法或大端法对数字进行编码
汇编
GDB调试
- gdb 文件名 进入 pwndbg 动态调试
- break 函数名 或 break 地址值 或 break C语言行号 设断点
- run/r——运行程序 next 步过 step 步进
- stack 整数 查看多少栈
- vmmap 显示虚拟内存空间的分布
- info b 查看当前的断点 d
删除某一个断点 - s 进入函数
- c (continue )让程序继续执行
- p &printf 查看 printf 函数的真实地址
- x/10wx 地址 查看该地址后 10 个内存单元的内容
- xinfo 地址 查看该地址信息,包括偏移等
保护机制
https://www.cnblogs.com/wintrysec/p/10616856.html