最近发现当初整的虚拟机有点小了,回想起之前分区的惨痛经历,索性两眼一闭整个新的
顺便记录一下各种工具和安装,方便日后查询(说不定还有重装的时候…
虚拟机的安装
在网上整个ios镜像下载就行
中科大源:http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/
分配的硬盘大小调到50g就直接默认安装
安装后可能出现没有网络的问题,解决方案是打开网络开关,不行的话移除网络适配器再重新添加即可
初始工作
最基本的工具
先行安装:
1 | $ sudo apt-get install python-pip |
更换pip源
更换pip源为阿里云
修改 ~/.pip/pip.conf (没有就创建一个), 内容如下:
1 | [global] |
更换默认的python3.5为python3.7
1、配置依赖环境
1 | $ sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev |
2、按这里面的来
https://blog.csdn.net/qq_29837161/article/details/83616364
但是一定要注意创建python3和pip3的软链接(主要是为了方便):
1 | $ sudo ln -s /opt/python3.7/bin/python3.7 /usr/bin/python3 |
然后会出现无法打开终端的问题
原因是没有_gi
这个库,然后你把原来系统中的库改个名就可以
1 | $ cd /usr/lib/python3/dist-packages/gi/ |
如果不慎把终端关了,可以在文件里面用右键打开
工具的安装
gdb-peda
这是我想起来的第一个工具,用于在终端动调程序,安装方式也简单,没出什么幺蛾子
1 | $ git clone https://github.com/longld/peda.git ~/peda |
使用操作
常用
- start 开始调试
- run 从头开始运行到断点
- next 执行下一行语句,不进入到函数中(n 10指执行10行),按回车是执行上一次的命令
- quit 退出程序
断点
- b N-LINE 在第n行设置断点
- b fnc 在fnc函数上设置断点
- delete breakpoints 删除断点
- info breakpoints 查看断点列表
读操作
- 读取某个变量的值: p <var>
- 读取某个内存地址里的内容: x /NFU <memaddr>
- 读取某个寄存器的值: info r <register>
- 读取栈上内容: stack(s) 20(读取20行,每25行为一页,按回车进行切换
写操作
修改某个变量的值: set var <name> = <value>
修改某个内存地址的值:
1
2
3
4
5
6
7
8
9
10
11set *(unsigned char *)<memaddr> = <value> ; write 1 byte
set *(unsigned short *)<memaddr> = <value> ; write 2 bytes
set *(unsigned int *)<memaddr> = <value> ; write 4 bytes
set *(unsigned long long *)<memaddr> = <value> ; write 8 bytes
or
set *(char *)<memaddr> = <value> ; write 1 byte
set *(short *)<memaddr> = <value> ; write 2 bytes
set *(int *)<memaddr> = <value> ; write 4 bytes
set *(long long *)<memaddr> = <value> ; write 8 bytes修改某个寄存器的值:set $<register> = <value>
geany
一个轻量化的编辑器,感觉还挺好用的,PyCharm打开太慢了…
1 | $ sudo apt-get install geany |
binwalk
用来分割文件写misc题的小工具
1 | $ sudo apt-get install binwalk |
使用操作
binwalk -e filename
pwntools
便于简单快速写EXP的CTF框架和漏洞利用开发库
1 | $ apt-get install -y python-dev python-pip libffi-dev libssl-dev |
使用操作
顺便记录一下pwn的exp模版
1 | #-*- coding:utf8 -*- |
one_gadget
一个用于在libc中寻找直接get shell地址的工具
1 | $ sudo apt-get install ruby |
常用操作
one_gadget libc-2.23.so
-l可以指定搜索等级
ROPgadget
用于构造ROP链的工具
1 | $ git clone https://github.com/JonathanSalwan/ROPgadget.git |
常用操作
ROPgadget –binary morton.dms –only ‘pop|ret’ | grep rdi
docker
相当于linux下的虚拟机,有助于一劳永逸的解决各种环境问题
参照这个:https://blog.csdn.net/jinking01/article/details/82490688
使用操作
https://www.runoob.com/docker/docker-hello-world.html
pwndocker
https://nocbtm.github.io/2020/02/24/skysider-pwndocker-正确使用姿势
运行:sudo docker exec -it d094 bash
angr
一个二进制分析框架,学符号执行时使用的
其实很简单的问题,只需要将python3.5换成python3.7就行,但是整了很久
主要是开始python3玩崩了打算去用docker,结果那个镜像好像有点问题…
1 | $ sudo apt-get install python3-dev libffi-dev build-essential virtualenvwrapper |
其中virtualenvwrapper是一个Python虚拟环境,使用虚拟环境的主要原因是angr会修改libz3和libVEX
创建虚拟环境之后每次使用workon
和deactivate
即可在真实与虚拟环境切换
glibc-all-in-one
https://github.com/matrix1001/glibc-all-in-one
1 | $ git clone https://github.com/matrix1001/glibc-all-in-one.git |
查看list文件
1 | $ cat list |
下载glibc
例如需要下载2.29-0ubuntu2_amd64
1 | $ ./download_old 2.29-0ubuntu2_amd64 |
patchelf
1 | $ sudo apt-get install patchelf |
例如我们需要让 re-alloc 程序指向glibc-all-in-one中下载的libc-2.29
1 | $ ldd re-alloc |
出现的问题
sudo apt-get install
报错信息一般是这玩意
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
解决方案:https://blog.csdn.net/jiangjiang_jian/article/details/80695548