├── .dockerignore ├── Dockerfile ├── README.md └── pwn /.dockerignore: -------------------------------------------------------------------------------- 1 | .git/ 2 | README.md -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:22.04 2 | 3 | #ENV http_proxy $http_proxy 4 | #ENV https_proxy $http_proxy 5 | 6 | LABEL maintainer="encry1024@gmail.com" 7 | 8 | RUN dpkg --add-architecture i386 && \ 9 | apt update -y \ 10 | && apt upgrade -y \ 11 | && apt install -y socat gdb gdb-multiarch libc6-dbg libc6-dbg:i386 git binutils gcc-multilib g++-multilib curl wget make libssl-dev build-essential ruby ruby-dev netcat tmux nasm ltrace strace vim 12 | RUN wget -q https://raw.githubusercontent.com/bata24/gef/dev/install.sh -O- | sh 13 | RUN gem install one_gadget seccomp-tools pwntools 14 | RUN wget https://raw.githubusercontent.com/owlinux1000/pwncat/master/pwncat -O /usr/local/bin/pwncat && chmod +x /usr/local/bin/pwncat 15 | 16 | RUN mkdir ~/work 17 | WORKDIR /root/work 18 | 19 | EXPOSE 9999 20 | 21 | ENTRYPOINT ["/bin/bash"] 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Docker Image for my pwn stuff 2 | 3 | ## Installed Tools 4 | 5 | - Debugger 6 | - gdb(gdb-multiarch) 7 | - [gef](https://github.com/bata24/gef) forked by `bata24` 8 | - Analysis Tools 9 | - ltrace, strace 10 | - rp-lin (gcc) 11 | - one_gadget 12 | - seccomp-tools 13 | - General Tools 14 | - tmux 15 | - vim 16 | - wget 17 | - curl 18 | - gcc, g++ 19 | - socat, netcat, pwncat 20 | 21 | ## How to use 22 | 23 | 1. Build the container image 24 | ``` 25 | $ docker build -t pwn:22.04 . 26 | ``` 27 | 2. Start the container 28 | ``` 29 | $ ./pwn 22.04 30 | ``` 31 | -------------------------------------------------------------------------------- /pwn: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | def info(s) 4 | puts "[\e[32m+\e[m] #{s}" 5 | end 6 | 7 | def warn(s) 8 | puts "[\e[31m!\e[m] #{s}" 9 | end 10 | 11 | SUPPORTED_VERSIONS = ["16.04", "18.04", "19.04", "22.04"] 12 | if ARGV.length != 1 || !SUPPORTED_VERSIONS.include?(ARGV[0]) 13 | puts "Usage: pwn " 14 | puts " Supported versions are 16.04, 18.04, 19.04, 22.04" 15 | exit(1) 16 | end 17 | 18 | version = ARGV[0] 19 | dirname = File.basename(Dir.pwd) 20 | cwd = Dir.pwd 21 | port = { 22 | host: 9999, 23 | container: 8888 24 | } 25 | 26 | if `docker ps -a --format "{{.Names}}"`.split("\n").include?(dirname) 27 | warn "Already running same name container!" 28 | exit(1) 29 | end 30 | 31 | cmd = "docker run -it -v #{cwd}:/root/work --cap-add=SYS_PTRACE --security-opt=\"seccomp=unconfined\" --name #{dirname} -p #{port[:host]}:#{port[:container]} pwn:#{version}" 32 | info "Image: encry1024/pwn:#{version}" 33 | info "Container: #{dirname}" 34 | info "Synced #{cwd}:/root/work" 35 | info "Port: #{port[:host]} -> #{port[:container]}" 36 | info "Command: #{cmd}" 37 | exec(cmd) 38 | --------------------------------------------------------------------------------