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] ?\n", buffer); printf("Now give me your answer : \n"); 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題的搭建 . .