启动!
一键起飞套装
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y build-essential jq strace ltrace curl wget rubygems tmux gcc dnsutils netcat-traditional gcc-multilib net-tools vim gdb gdb-multiarch patchelf zip unzip python3-full ipython3 python-is-python3 python3-pip python3-dev lib32z1 libssl-dev libc6-dev-i386 libffi-dev wget git make procps libpcre3-dev libdb-dev libxt-dev libxaw7-dev libc6:i386 libstdc++6:i386
sudo gem install one_gadget seccomp-tools
pip3 install capstone requests pwntools r2pipe ropper -i https://pypi.tuna.tsinghua.edu.cn/simple
cd ~
wget timlzh.com/files/gdbInit.zip
unzip gdbInit.zip
然后就能直接开个tmux,然后直接gdb
即可,超级舒服的分屏,很黑客!
~/pwninit
用来初始化pwn题做题环境
#!/bin/bash
for file in $(ls); do
fileType=$(file $file)
if [[ $fileType == *"ELF"* ]]; then
chmod +x $file
echo ======$file======
echo $fileType
echo ""
checksec $file
echo =================
echo ""
fi
done
# Create exp.py
if [[ ! -f "exp.py" ]]; then
echo "Create exp.py"
cat > exp.py << EOF
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
from pwn import p64, u64, p32, u32
import os
context.log_level = 'debug'
context.arch = 'amd64'
host = '127.0.0.1'
port = 10001
fileName = './pwn'
# libcName = './libc.so.6'
r = process(fileName)
# r = remote('127.0.0.1', 10001)
# r = remote(host, port)
elf = ELF(fileName)
# libc = ELF(libcName)
def debug(p, cmd = ''):
if os.environ.get('VSCODE_INJECTION', None):
return
gdb.attach(p, cmd)
pause()
debug(r)
payload = cyclic(0x10 + 8) + p64(114514)
r.sendlineafter(b'\n', payload)
r.interactive()
EOF
fi
chmod +x exp.py
GDB,我直接手撕
命令 | 作用 |
---|---|
b *0x400000 |
在地址0x400000处设置断点 |
b *main |
在main函数处设置断点 |
r |
run,运行程序 |
c |
continue,继续执行 |
n |
next,执行下一条语句 |
s |
step into,进入函数 |
p [exp] |
print,打印变量 |
x
命令的格式为x/[n][f][size] [addr]
,其中n
为打印的单位个数,f
为打印的格式,size
为打印的单位大小,addr
为打印的地址。
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
用不来GDB,用更适合re宝宝体质的ida调试!
把这玩意写到~/.zshrc
里
RED='\033[0;31m'
NC='\033[0m'
function socatStart() {
local fileName=$1
local port=$2
if [ -z "$fileName" ]; then
echo "Usage: socatStart <file> [port]"
return
fi
if [ -z "$port" ]; then
port=10001
echo "Using default port: $port"
fi
if [ ! -f "$fileName" ]; then
echo "File not found: $fileName"
return
fi
file $fileName
echo ''
echo "socat tcp-listen:$RED$port$NC,reuseaddr,fork EXEC:$RED$fileName$NC,pty,raw,echo=0"
socat tcp-listen:$port,reuseaddr,fork EXEC:$fileName,pty,raw,echo=0
}
直接socatStart ./pwn
,然后pwntools里面直接r = remote('127.0.0.1', 10001)
,ida里面直接attach
,然后就可以愉快的调试了。