awd出题笔记

前言

第一次出线下的pwnAWD,记录一下,以后留给学弟什么的学习一下。

CTFpwn环境搭建

其实和出线上赛是一样的,注意加一下setvbuf设置一下缓冲流就行了。

搭建pwn题目环境的时候,可以先本地测试一下

1
socat tcp-l:888 , frok exec:./pwn

上面的命令可以用来实现本地的监听端口,这样在写check脚本的时候会比较方便

端口问题

在写docker脚本的时候,记得在dockerfile上加上EXPOSE port 用来开放端口,否则会出现无法nc的情况。当然,如果用的是服务器的话,记得服务器端也要开启对应防火墙设置。

build 镜像时 无法交互式设置时区

如果你搭建的环境是基于unbuntu18.04之后的镜像的话,需要手动设置时区,因为18.04后面就没有默认时区了,需要在Dockerfile 开头(FROM后面)加上

1
2
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai

pwn编译gcc开关保护

在编译pwn文件的时候,需要设置pwn的保护,于是总结了一下保护的相关参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# NX保护机制:
-z execstack / -z noexecstack # (关闭 / 开启) 堆栈不可执行

# Canary:(关闭 / 开启 / 全开启) 栈里插入cookie信息
# !开canary好像会造成栈中局部变量的顺序有所改变
-fno-stack-protector /-fstack-protector / -fstack-protector-all

# ASLR和PIE:
-no-pie / -pie # (关闭 / 开启) 地址随机化,另外打开后会有get_pc_thunk

# RELRO:
-z norelro / -z lazy / -z now # (关闭 / 部分开启 / 完全开启) 对GOT表具有写权限

-s -W # 去除符号表

环境记得设置root远程登录允许

这次awd就是没设置起容器的远程root登录,导致无法root账号登录,只能pwn账号登录然后切换,所以做一下笔记。