0x00.准备题目
例如:level.c
#include <stdio.h> #include <unistd.h> int main(){ char buffer[0x10] = {0}; setvbuf(stdout, NULL, _IOLBF, 0); printf("Do your kown what is it : [%p] ? ", buffer); printf("Now give me your answer : "); read(0, buffer, 0x40); return 0; }
0x01.GCC/G++编译
命令参数
1.关掉DEP/NX(堆栈不可执行)
gcc -z execstack -o level level.c
2.关掉Stack Protector/Canary(栈保护)
gcc -fno-stack-protector -o level level.c
3.关掉程序ASLR/PIE(程序随机化保护)
gcc -no-pie level level.c
4.关闭整个linux系统的ASLR保护
sudo -s echo 0 > /proc/sys/kernel/randomize_va_space exit
5.打开整个linux系统的ASLR保护
sudo -s
echo 2 > /proc/sys/kernel/randomize_va_space
6.64位linux下面的GCC编译出一个32位可执行程序
# 加参数- m32
gcc -m32 -z execstack -fno-stack-protector -o level level.c
0x02.挂载题目
1.使用socat挂载在服务器端口
sudo apt-get install socat socat tcp-l:端口号,fork exec:程序位置,reuseaddr
2.nohup命令(使得关闭终端也能运行题目程序)
First.编写脚本pwn.sh #!/bin/sh #name:pwn.sh socat tcp-l:端口号,fork exec:程序位置,reuseaddr Next.运行脚本 sudo chmod u+x ./pwn.sh nohup ./pwn.sh &
0x03 访问
nc IP地址 端口号
0x04 参考
CTF中pwn题的搭建 . .