服务器端题目搭建

其实最近做题有一些感触,觉得在自己服务器上搭建题目可能比较关键,常见的需要搭建的题目大概分为三大类:crypto、pwn、web。web搭建比较复杂,运维也很困难,有时候权限问题就会让运维着痛不欲生,而且一般来说做题的时候不太可能会拿到赛题;crypto有些赛题会给出一些代码,然后可以在内部运行,但也有可能不给代码,让你自己琢磨,这些都得靠你自己的思路;pwn题一般会给源码或者可执行文件,所以可以编译之后进行运行。所以本文只讲pwn题的搭建。大家可以触类旁通,搞清楚crypto题的搭建。

1. pwn题搭建

1.1 准备题目

1
2
3
4
5
6
7
8
9
10
11
#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] ?\n", buffer);
printf("Now give me your answer : \n");
read(0, buffer, 0x40);
return 0;
}

1.2 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

1.3 挂载题目

1.使用socat挂载在服务器端口

sudo apt-get install socat
socat tcp-l:端口号,fork exec:程序位置,reuseaddr

2.nohup命令(使得关闭终端也能运行题目程序)

1
2
3
4
5
6
7
8
9
10
First.编写脚本pwn.sh
#!/bin/sh
#name:pwn.sh
socat tcp-l:端口号,fork exec:程序位置,reuseaddr
Next.运行脚本
sudo chmod u+x ./pwn.sh
nohup ./pwn.sh &

1.4 访问

1
nc IP地址 端口号