既然是记录学习历程,我觉得还是从头开始吧
我刚开始学的时候就苦于找不到学习资源,找到了又看不懂的崩溃处境
好吧,是我不会科学上网 + 本人又菜又摆的缘故
一般是从比赛官方下载附件 | |
下载到虚拟机 打开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 <num> 删除某一个断点
- s 进入函数
- c (continue )让程序继续执行
- p &printf 查看 printf 函数的真实地址
- x/10wx 地址 查看该地址后 10 个内存单元的内容
- xinfo 地址 查看该地址信息,包括偏移等
# 保护机制
https://www.cnblogs.com/wintrysec/p/10616856.html