前言
这周都在出awd的题目,记录一下遇到的问题
SSH
在awd中需要通过ssh连接到靶机上,因此需要在dockerfile里配置好ssh的服务
1 2 3 4 5 6 7 8 9 10 11 12
| ... RUN apt-get update -y && apt-get install -y openssh-server\
#新建一个用户,做好权限维持 RUN useradd -m ctf
#设置ssh的账号密码 RUN echo "ctf:ctf" | chpasswd #直接使用写好的ssh的配置文件 COPY ./sshd_config /etc/ssh/sshd_config RUN chmod 644 /etc/ssh/sshd_config ...
|
同时需要设置时区,否则安装openssh-server时会卡在选择时区的选项
1 2
| RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone
|
在sshd_config中配置好了ssh的端口为2222,因此在dockerfile中将2222的端口暴露出来
在运行docker的时候需要将2222端口映射出来
1
| sudo docker run --name pwn -p 2222:2222 -p 9999:9999 -d pwn
|
在awd中,可以释放文件进行文件的替换,因此需要将部署的文件设置为ctf的权限
1
| chown -R ctf:ctf /home/ctf/pwn
|
libc
有时候会遇到本地的libc与docker搭建的ubuntu的libc版本不一致,那么只需要将本地的libc拷贝到docker中即可
1 2
| COPY ./lib/ /lib/ COPY ./lib64/ /lib64/
|
- lib存放的就是本地的libc,需要注意的是libc是放在x86_64-linux-gnu下的,因此存放libc的路径为./lib/x86_64-linux-gnu/libc.so.6
- lib64则是链接文件,即存放ld-linux-x86-64.so.2
在docker部署之前需要修改这两个文件的权限
1 2
| chmod 777 ./lib/x86_64-linux-gnu/libc.so.6 chmod 777 ./lib64/ld-linux-x86-64.so.2
|
否则会出现/bin/sh权限不足的情况
docker_debug
有时候需要在docker部署的靶机上进行调试,在安装时将gdb,tmux,python3以及pwntools装好
1 2 3 4 5 6 7 8 9 10 11
| FROM ubuntu:20.04
RUN sed -i "s/http:\/\/archive.ubuntu.com/http:\/\/mirrors.tuna.tsinghua.edu.cn/g" /etc/apt/sources.list RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone RUN apt-get update -y && apt-get install -y \ lib32z1 xinetd openssh-server python3-dev python3-pip tmux git wget gdb\ && rm -rf /var/lib/apt/lists/*
RUN python3 -m pip install --no-cache-dir pwntools -i https://pypi.tuna.tsinghua.edu.cn/simple ...
|
在docker内安装gef即可,因为gef没pwndbg那么大,因此安装起来比较方便
tmux
由于在docker内使用的是命令行进行调试,因此需要进入tmux进行多窗口。记录一下用到的命令
- CRTL+B+空格:将上下屏切换到左右屏
- CRTL+B+方向键:切换上下左右的屏幕
patch
现在通常给pwn题打patch都会将patch的代码写在.eh_frame上,这个段在旧版本的ubuntu上是有可执行权限的,但是现在的ubuntu上可执行权限已经没有了,需要手动修改一下权限
使用010的模板可以快速找到ELF文件的段节之类的信息

找到.eh_frame所属的段上,修改为可执行权限,那么这个段就有可执行权限了

接着修改一下.eh_frame的节为可执行权限,那么在ida就会以代码的结果显示

待更新。。。