挂载CTF题目
1. 安装container
2. 挂载本地题目所在的目录
3. 用socat命令挂载到container端口(退出后中断)
4. 用nohup永久挂载题目退出容器不会中断
5. 用nc命令连接题目
此方法只能在一个局域网内可以访问。
docker pull
docker run -it -v 本地目录:容器目录 --name /bin/bash
eg:
docker run -it -v /home/yrl/Desktop/pwn/static-x86:/home/yrl --name CTF ubuntu:16.04 /bin/bash
你直接用“./”运行你在本地编译好的程序是运行不了的,会提示没有此文件,但是源文件可以打开:
可以重新编译.c文件:
gcc -fno-stack-protector -z execstack -mpreferred-stack-boundary=4 -o static2 static.c
加上这些参数的作用:
#Ubuntu下面的GCC默认开启了Stack Smashing Protector,
#如果想在这个系统中学习缓冲区溢出的原理,在编译时要加上fno-stack-protector选项,
#否则运行时会出现*** stack smashing detected ***: xxx terminated,
#而不是期望的Segmentation fault。同时还需要加上允许栈执行的选项。
#-fno-stack-protector用来关闭gcc编译器gs验证码机制
#-z execstack用来关闭ld链接器堆栈段不可执行机制
网上很多说用:sudo echo > 0 /proc/sys/kernel/randomize_va_space关闭ASLR,但本人试了会提示
bash: /proc/sys/kernel/randomize_va_space: Permission denied
可以用的命令:echo 0 | sudo tee /proc/sys/kernel/randomize_va_space 屡试不爽!
0 - 表示关闭进程地址空间随机化。
1 - 表示将mmap的基址,stack和vdso页面随机化。
2 - 表示在1的基础上增加栈(heap)的随机化。
或者之关闭这个程序的地址随机化,其他程序不变,在编译的时候加上-no-pie就行,-pie表示开启ASLR
第一次用可能容器没有socat,用apt-get update ; apt-get install socat安装
同样上面有用到gcc 用apt-get install gcc安装,以后有用到什么再装就行了
在文件目录下用命令socat tcp-l:9999,fork exec:./static2挂载到容器的9999端口
这仅仅是一次性的,运行后终端会卡在这个界面,当你CTRL+C退出后挂载的题就不在了
#首先编写一个.sh脚本
#!/bin/sh
#name:static2.sh
socat tcp-l:9999,fork exec:./static2
退出保存后执行命令:
sudo chmod u+x ./pwn.sh
nohup ./pwn.sh &
注:nohup是永久执行,&是指在后台运行
nohup:http://www.cnblogs.com/allenblogs/archive/2011/05/19/2051136.html
&:http://blog.sina.com.cn/s/blog_963453200102uya7.html
区别:http://blog.csdn.net/zhang_red/article/details/52789691
用ifconfig查看容器IP。预先用apt-get install net-tools安装
输入命令:nc 172.17.0.2 9999
你的支持是我最大的动力!