一、简单搭建环境
1.VMware
2.安装虚拟机
3.配置Linux环境
(1)pwntools
#安装
pip install pwntools
#验证是否安装完成
运行含from pwn import*的文件,没有报错证明安装成功
或者checksec 文件
(2)peda
git clone https://github.com/longld/peda.git
(3)pwndbg
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
pwndbg适合调试堆。peda适合查看字符串。
#peda和pwndbg切换
nano ~/.gdbinit
或者写个脚本
或者其他的...
(4)git
#先看看有没有安装git
git --version
#如果没有安装
sudo apt install git
不会安装软件怎么办?
通常都是
sudo apt install xxx
pip install xxx
…
4.必备工具
(1)IDA
安装包 提取码:cjkc
常用快捷键
Shift+F12:打开字符串窗口
F5:反汇编成伪代码
A:将数据转换成字符串
[空格]:切换流程图和文本视图
(2)gdb
不会用相关命令怎么办?
名字
help
看命令介绍
看不懂英文怎么办?
百度翻译
l #list
r #run
c #continue
s #step
n #next
b #break
...
二、做题流程
拿到一道题应该怎么做
通常我是这样走流程的
1.checksec(其实我不经常用emmm),通常都是直接拖进32位,打不开就换64位
2.在IDA中先看看字符串
有/bin/sh那么十有八九这道题比较简单,没有压力
没有的话可能就得…
3.看看main函数的伪代码
通常函数简单的话,题目也简单,看看相关函数有没有read、printf等等。
4.看system的地址(如果有的话),或者xxx
5.编写exp
nano xxx.py
vim xxx.py #vim是要安装的,使用起来不容易习惯
直接跟记事本的一样创建打开编写
touch xxx.py
点击打开…
python xxx.py
from pwn import *
context.log_level = 'debug'
#context(os='linux',arch='x86/amd64',log_level='debug')
p = remote("ip地址",端口)#连接远程端口
p = process("./文件名")#本地打开题目
payload =
p.sendlineafter('参数a',参数b)#参数a后面输入参数b,通常参数a是题目本身有的
p.revuntil('参数a')#接收参数a
p.recv(参数a)
p.sendline(参数a)
p.interactive()#代码执行后与端口进入交互模式
#这一部分不一定会用的上
#如果遇到题目中没有直接给出/bin/sh,
elf=ELF('./文件名')#载入elf文件
elf_glt_addr=elf.plt['函数名']
elf_got_addr=elf.got['函数名']
elf_system_addr=elf.symbols['函数名']
next(elf.search('/bin/sh'))#寻找/bin/sh的地址
#将16进制地址数转化为相应字节的字符串(64位-8字节,32位-4字节)
p64()
p32()
#与上相反
u64()
u32()
三、做题示范
四、需要知识总结
C/C++、汇编,python,数据结构,只需要知道基础的就行。
五、比赛经验
关于这次攻防大赛