PWN题搭建

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题的搭建                                                                                                                                                                                                                                                                                                                     .                                                                                                                                                                                                   .