搭建远程pwn环境和ubuntu无法gitclone的问题
mango

git和复制粘贴的问题

  1. 如果无法访问github怎么办(ping不通)

    修改/etc/hosts

    添加dns解析

    1
    2
    140.82.113.4 github.com
    146.75.77.194 github.global.ssl.fastly.net
  2. 可以访问github了但是clone很慢

    使用gitclone,这是一个提供下载缓存的代码下载网站

    比如我要clone ctf-_xinetd,但是一直卡在这里

    image-20240129193802718

    那么可以尝试换成https传输,从gitclone下载

    1
    git clone https://gitclone.com/github.com/Eadom/ctf_xinetd.git
  3. ubuntu 22.04的open-vm-tools-desktop有点抽象。不能直接拖拽但是可以复制粘贴文件。

    经过资料查询,才发现open-vm-tools有两个组件:open-vm-tools 以及open-vm-tools-desktop。两者区分如下:

    核心 open-vm-tools 软件包中包含核心 open-vm-tools 用户空间实用程序、应用程序和库(包括 vmtoolsd),以帮助有效管理您的主机与客户机操作系统之间的通信。此软件包中包含的功能如下:将客户机操作系统时钟与虚拟化平台同步、在主机与客户机之间传输文件、将检测信号信息从客户机操作系统发送到虚拟化基础架构以支持 vSphere High Availability (HA)、将客户机操作系统的资源利用率和网络连接信息发布到虚拟化平台等。

    open-vm-tools-desktop 软件包是可选的,其中包含的附加用户程序和库可增强虚拟机桌面操作的交互式功能。安装该软件包后,您将能够调整客户机显示屏幕的大小以匹配其主机控制台窗口或适用于 vSphere 的 VMware Remote Console 窗口。该软件包还允许您在主机与客户机操作系统之间进行复制和粘贴,以及在客户机与适用于 VMware Workstation 和 VMware Fusion 产品的主机之间进行拖放。
    参考了https://blog.csdn.net/as3luyuan123/article/details/121626106

    想在主机和虚拟机之间复制粘贴要先卸载之前的open-vm-tools

    1
    2
    3
    sudo apt-get autoremove open-vm-tools
    sudo apt-get install open-vm-tools-desktop
    sudo reboot

遇到这种和网络环境有关的问题,搜索时可以把时间限定在近期,远古的解决方案在今天大概率没用。

配置ctf-xinetd

gitclone好ctf-xinetd就可以开始啦。

这里是因为要练习BROP,复现一个没有二进制文件的题目所以被迫学习搭建远程环境了。

题目的附件来自https://github.com/ctf-wiki/ctf-challenges/tree/master/pwn/stackoverflow/brop/hctf2016-brop

题目的elf文件放到bin文件夹下(如果有libc也要一起放),修改一下flag

image-20240129200010782

在ctf-xinetd同级目录下创建docker-compose.yml文件

image-20240129200955549

内容为:

1
2
3
4
5
6
7
8
9
10
11
12
version: '3'

services:
wiki_brop:
build: ./
image: wiki_brop
ports:
- "60001:9999"
pids_limit: 1024
# cpus: 0.5
restart: unless-stopped
# privileged: true

这里image的名字要和后面创建的docker image的名字一样

然后打开ctf.xinetd文件,把这个地方改成bin文件夹种放的elf文件的名字

image-20240129200833355

打开Dockerfile文件,把虚拟机版本改一下。如果虚拟机版本高于18的话把下面那个红框的命令删除

image-20240129201417996

然后在ctf_xinetd目录下运行:

1
sudo docker build -t "wiki_brop" .

注意:sudo、末尾有一个空格和一个点

image-20240129201229583

没什么问题的话应该是类似上面这样的

1
sudo docker run -d -p "ip:8888:9999" -h "wiki_brop" --name="wiki_brop" wiki_brop

-p后面的内容是将9999端口映射到8888端口,端口号可以改。

-name是指定容器名称,-h是指定容器的hostname,最后是image的名字,要和前面创建的镜像的名字一样。

这里是手动映射了端口,但其实直接使用docker-compose文件映射端口也可以。

然后就发现docker已经成功运行了,题目部署完毕。

image-20240129203326426

如果你希望在一台虚拟机上部署这个题目,然后在其他虚拟机/主机连接,上面ip的地方务必填写虚拟机ip,而不是127.0.0.1或者0.0.0.0,这样只能在部署的虚拟机上连接题目…

在exp中可以写:

1
p=remote("ip",port) # port是映射后的端口,这里是8888

在其他机器上nc连接:

image-20240129211704873

简单点:

image-20240129211740973

停掉容器之后再重启容器好像有点问题,总是nc连接不上。reboot一下虚拟机偶尔有效(有时没用)

docker的基础指令

(sudo或者root)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 查看帮助
docker --help (或者准确点 docker [command] --help)

# (!以下命令若显示权限不够的,请自行添加sudo)
# 查看docker的基本信息,有多少个容器、镜像等等
docker info

# 查看本机上的所有镜像
docker images

# 容器构建
docker build

# 运行容器
docker run

# 停止容器
docker stop

# 强制停止容器
docker kill

# 删除容器
docker rm

进程相关

1
2
3
4
5
6
7
8
# 查看端口连接:
sudo netstat -antp | grep docker

# 查看连接所在进程:
sudo lsof -i:[端口号]

# 断开连接:
sudo kill -9 [PID]

编译的相关参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 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 # 去除符号表
1
2
3
#程序需要输出输入时,加上这两段代码,不然部署在docker中运行时要回车才有输出
setvbuf(stdout, 0, 2, 0);
setvbuf(stdin, 0, 2, 0);

部署多题可使用https://github.com/giantbranch/pwn_deploy_chroot

https://bbs.kanxue.com/thread-275212.htm

由 Hexo 驱动 & 主题 Keep
访客数 访问量