既然是记录学习历程,我觉得还是从头开始吧
我刚开始学的时候就苦于找不到学习资源,找到了又看不懂的崩溃处境
好吧,是我不会科学上网 + 本人又菜又摆的缘故

一般是从比赛官方下载附件
 下载到虚拟机 打开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 选择小端法或大端法对数字进行编码

# 汇编

1

# GDB 调试

  1. gdb 文件名 进入 pwndbg 动态调试
  2. break 函数名 或 break 地址值 或 break C 语言行号 设断点
  3. run/r—— 运行程序 next 步过 step 步进
  4. stack 整数 查看多少栈
  5. vmmap 显示虚拟内存空间的分布
  6. info b 查看当前的断点 d <num> 删除某一个断点
  7. s 进入函数
  8. c (continue )让程序继续执行
  9. p &printf 查看 printf 函数的真实地址
  10. x/10wx 地址 查看该地址后 10 个内存单元的内容
  11. xinfo 地址 查看该地址信息,包括偏移等

# 保护机制

1
https://www.cnblogs.com/wintrysec/p/10616856.html

更新于 阅读次数

请我吃[冰淇淋]~( ̄▽ ̄)~*

Jexy-Kynner 微信支付

微信支付