一些经常用到的二进制环境整理[不定期更新]
一些经常用到的二进制环境文章目录一些经常用到的二进制环境下载和安装和基本配置kali下载修改ipvmtools重新安装vmtools安装pwntoolsdocker初级调试-ida+docker远程调试初级调试方法简介docker导入镜像常用docker命令ida远程调试开启tcp监听进阶调试-pwndocker初级调试方法简介pwndocker下载pwndocker启动pwndocker内置工.
一些经常用到的二进制环境
文章目录
内容来自网络,给以后换电脑时候快速配置做个记录
下载和安装和基本配置
kali下载
kali下载:https://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/
直接下载vm虚拟机就可以
修改ip
vi /etc/network/interfaces
inface eth0 inet static 设置 eth0 使用默认的静态地址
address 192.168.4.200 设置 eth0 的ip 地址
gatework 192.168.4.4 配置当前主机的默认网关
netmask 255.255.255.0 设置 eth0 的子网掩码
/etc/init.d/networking restart 重启网卡
或者直接:ifconfig eth0 192.168.5.40 netmask 255.255.255.0
vmtools
参考:https://www.jianshu.com/p/5b46c6833bdd
三步即可
apt update
apt install open-vm-tools-desktop fuse
reboot
重新安装vmtools
共享文件夹无法使用的时候需要重安
共享文件夹位置:/mnt/hgfs
tar zxvf xxx.tar
cd xxx
xxx.pl
安装pwntools
直接 : pip install pwntools
验证:
python
>>> import pwn
>>> pwn.asm("xor eax,eax")
'1\xc0'
docker
参考:https://blog.51cto.com/11834557/2309885
//step 1
apt-get update
apt-get install -y apt-transport-https ca-certificates
apt-get install dirmngr
//step 2
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 \
--recv-keys 58118E89F3A912897C070ADBF76221572C52609D
//step 3
echo 'deb https://apt.dockerproject.org/repo debian-stretch main' > \
/etc/apt/sources.list.d/docker.list
//step 4
apt-get update
apt-get install docker-engine //这一步得等很久。。
//step 5
service docker start //启动docker服务即可
初级调试-ida+docker远程调试
初级调试方法简介
适合刚入门的新手,可以调试一些初级的栈溢出类的题目,调试堆相关题目有些麻烦(因为堆题目依赖libc版本)而这两个docker中只有一个版本libc
这个环境是vmware中装kali的虚拟机,然后通过nat链接win主机,NAT配置见:链接
然后再kali中安装docker,导入两个linux镜像,分别是32位和64位,分别用来调试32位程序和64位程序
两个docker的镜像下载链接 密码:bcd6,来自i春秋博客中
每次调试需要根据题目不同打开对应的docker,然后将题目和ida的debug server拷贝进去,运行ida的debug server,便可调试题目。
docker导入镜像
参考:https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=42239&highlight=pwn%E5%85%A5%E9%97%A8
cat ubuntu.17.04.amd64.tar | docker import - ubuntu/17.04.amd64 //导入镜像
docker run -it -p 23946:23946 ubuntu/17.04.amd64 /bin/bash //启动镜像的一个shell,并且将IDA调试服务器监听的23946端口转发到本地的23946端口。
常用docker命令
docker container ls -a //查看docker容器
docker ps -a //同上
docker stop id //停止容器
docker rm id //删除容器
docker rmi id //删除镜像
docker container cp test.txt id:/root/test.txt //docker里拷贝东西
docker exec -it id /bin/bash //开启一个新shell
docker run --security-opt seccomp:unconfined -it -p 23946:23946 ubuntu/17.04.amd64 /bin/bash 启动docker时关闭远程端口保护,否则无法远程调试,前面的端口号是docker的,后面是主机的
ida远程调试
- 先按上面方法开启一个docker
- 去ida目录下的dbgsrv文件夹找到对应的server文件,比如64位linux docker就是linux_server64
- 将对应的server文件传到linux docker中,可以使用docker container cp命令
- 然后docker中chmod +x ./linux_server64 赋予执行权限并执行
- ida中上方导航栏选择Debugger->run->remote linux debugger
- host name填上所在ip(这里是kali的ip,而不是docker的ip,如果不行确保端口映射没问题,排除占用等,要是用关闭端口保护的docker run参数。)
- 然后就可以直接调试ida正在打开的文件
开启tcp监听
socat tcp-listen:10001,reuseaddr,fork EXEC:./题目,pty,raw,echo=0
进阶调试-pwndocker
初级调试方法简介
进阶的调试方法适合调试堆相关题目,使用我同事skysider的docker项目pwndocker。里面集成了各种pwn会用到的工具,无需自己下载,打开即用,非常方便。
pwndocker下载
dockerhub:https://hub.docker.com/r/skysider/pwndocker
docker pull skysider/pwndocker
pwndocker启动
docker run -d --rm -h breeze --name breeze -v /mnt/hgfs/share:/ctf/work -p 23946:23946 --cap-add=SYS_PTRACE skysider/pwndocker
- -d:后台运行
- –rm:停止后自动删除
- -h:主机名breeze
- –name:docker名字breeze
- -v:将kali的/mnt/hgfs/share挂在再docker中的/ctf/work目录(share也是kali和物理机的共享目录,三机共享)
- -p:端口映射(没啥用,这时已经不用ida远程调试了,有些题目带端口的可以用)
- –cap-add:增加一个参数,否则调试会出问题
pwndocker内置工具
pwndocker内置常见的几乎所有pwn所需工具,如dockerhub中介绍的:
pwntools、pwndbg、ROPgadget、one_gadget等等
但最终要的是,pwndocker中有多个libc版本,在根目录中可以看到,编译了对应的32位和64位的版本,带有调试符号,可以直接通过pwntools修改链接库的形式调试任何libc依赖的题目。
使用方法注意一定要带ld.so文件:
from pwn import *
context(arch='amd64', os='linux')
context.terminal=['tmux','splitw','-h']
p = process(["/glibc/2.23/64/lib/ld-2.23.so","./题目"],env={"LD_PRELOAD":"/glibc/2.23/64/lib/libc-2.23.so"})
gdb.attach(p)
pwndbg使用方法
教程链接:
敬告
由于题目给的libc不带调试符号,所以大部分情况下都用pwndocker中的glibc来调试。这时调试的时候调试的差不多就行了,不用非要调试到最后一步,搞懂原理,地址什么的都正确就换回题目的libc。有时会有各种各样的bug,让你本来没问题的exp就是执行不了,有时候有必要再准备个非docker的虚拟机,里面有对应版本的libc,和pwntools来测试exp。遇到过一些情况是exp没问题,就是在docker中无法成功getshell,调试都能看到执行到system(’/bin/bash’)。但关了调试器还是无法成功getshell,玄学。
gdb相关
gdb安装:
apt-get installa gdb
pwndbg & pwngdb
这两个插件做堆类pwn 题非常方便。推荐一起使用,github 下载:
pwndbg:https://github.com/pwndbg/pwndbg
直接运行里面的setup.sh即可,中途可能会报git 的错退出,需要运行一下git init
。
pwngdb:https://github.com/scwuaptx/Pwngdb
直接按照readme 操作即可:
cd ~/
git clone https://github.com/scwuaptx/Pwngdb.git
cp ~/Pwngdb/.gdbinit ~/
操作完需要根据自己已有插件简单修改一下:
source /root/pwndbg-dev/gdbinit.py
source /root/Pwngdb-master/pwngdb.py
source /root/Pwngdb-master/angelheap/gdbinit.py
define hook-run
python
import angelheap
angelheap.init_angelheap()
end
end
gdb-peda
调试内核可能用到,longld/peda
执行之前记得先改目录名字:
echo "source ~/peda/peda.py" >> ~/.gdbinit
docker相关
dockerfile 制作镜像
dockerfile 省略,见菜鸟教程,我一般就一句话包括一个基础镜像,然后剩下的启动容器之后再手动安装:
FROM ubuntu:18.04
dockerfile 制作成镜像:
docker build -t xx:v3 .
docker run -d --rm -h breeze --name ubuntuN -v D:\share:/ctf/work -it --cap-add=SYS_PTRACE ubuntu1804 /bin/bash
将容器commit 为镜像
docker commit 容器名 镜像名:版本
docker tag 镜像名 chenaotian/镜像名:版本 #重命名
push 镜像到dockerhub:
docker login
docker push chenaotian/image
更多推荐
所有评论(0)