Skip to main content

构建指定版本libc的docker

ElegyAbout 3 mindockerpwndevelopment

构建指定版本libc的docker

因为在阅读文章的时候 复现它的操作发现它的libc版本太低了 导致我们的复现失败 所以这里学习docker构造指定版本的libc环境
参考文章:Docker配置任意版本编译环境(GCC升级、降级、指定版本)_如何降低docker里面的gcc版本-CSDN博客open in new window
使用docker调试和部署pwn题-Pwn-看雪-安全社区|安全招聘|kanxue.comopen in new window
docker run 命令详解(新手入门必备)-CSDN博客open in new window

版本对应

Ubuntu20.04:libc-2.31 Ubuntu18.04:linc-2.27 Ubuntu16.04:libc-2.23 Ubuntu14.04:libc-2.19docke

操作指令

这里只是浅浅展示一下基础会用到的指令 然后将遇到的报错展示出来 以及对应的解决方法

  • install cmd:

    docker pull ubuntu:xx.xx
    
    • 然后因为我下载了docker destop导致报错:

      error during connect: this error may indicate that the docker daemon is not running: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/images/json": open //./pipe/docker_engine: The system cannot find the file specified.
      
  • 查看镜像

    docker images
    
    • 结果:

      REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
      ubuntu       22.04     3db8720ecbf5   2 weeks ago    77.9MB
      ubuntu       18.04     f9a80a55f492   9 months ago   63.2MB
      ubuntu       16.04     b6f507652425   2 years ago    135MB
      
  • 运行images

    docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的标识:镜像名称[:tag]
    // 我们使用 可以直接进入docker内部
    docker run -id --name="pwn" b6f507652425 /bin/sh
    // -i 即使未链接stdin(标准输入)也保持打开状态 并且分配一个交互终端
    // -t 容器启动后直接进入命令行
    // -d 后台运行
    // 所以我在这里选择的是 -id
    
  • 查看正在执行的容器

    docker ps -a
    
    • 结果

      CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                     PORTS     NAMES
      af2e5d02e3e8   b6f507652425   "/bin/bash"   3 seconds ago   Exited (0) 3 seconds ago             pwn_docker
      6711535f8c6a   3db8720ecbf5   "/bin/bash"   4 minutes ago   Exited (0) 4 minutes ago             confident_pike
      
  • 进入docker

    docker exec -it container_id /bin/sh 
    
  • 向docker内部传文件

    docker cp 本地地址 container_id:docker内路径
    
    • 也可以docker 内部传给本地

      docker cp container_di:docker内路径 本地地址
      

主力pwn环境

由于我的vmware中ubuntu再次崩溃了 然后忘记存快照了 所以转使用docker

  • 文章中推荐的主力pwn环境是:

    skysider/pwndocker
    

pull image

docker pull skysider/pwndocker

error

进入后使用apt发生报错

Err:1 http://mirrors.aliyun.com/ubuntu bionic InRelease
  400  Bad Request [IP: 120.226.194.113 80]
Err:2 http://mirrors.aliyun.com/ubuntu bionic-security InRelease
  400  Bad Request [IP: 120.226.194.113 80]
Err:3 http://mirrors.aliyun.com/ubuntu bionic-updates InRelease
  400  Bad Request [IP: 120.226.194.113 80]
Err:4 http://mirrors.aliyun.com/ubuntu bionic-proposed InRelease
  400  Bad Request [IP: 120.226.194.113 80]
Err:5 http://mirrors.aliyun.com/ubuntu bionic-backports InRelease
  400  Bad Request [IP: 120.226.194.113 80]
  • 我以为是docker无法链接外部网络的问题 但是ping baidu.com又是可以的 找了很多文章都没有解决 结果加速器一关久解决好了

    大概是docker代理的问题 hhh后面找到个类似的解决的文章:Windows docker镜像 apt update时提示400 Bad Request_docker 400 bad request-CSDN博客open in new window

    --- baidu.com ping statistics ---
    15 packets transmitted, 14 received, 6.66667% packet loss, time 17696ms
    rtt min/avg/max/mdev = 37.782/38.619/41.413/0.892 ms
    root@936a687b2420:/ctf# ping http://222.187.238.94:9527/
    ping: http://222.187.238.94:9527/: Name or service not known
    root@936a687b2420:/ctf# ping 222.187.238.94:9527
    ping: 222.187.238.94:9527: Name or service not known
    

各版本的轻量级pwn环境

有大佬已经写好了:roderickchan/debug_pwn_env Tags | Docker Hubopen in new window
我们只需要根据ubuntu的版本 找到我们需要的libc版本进行下载即可