avatar

安装ubuntu16虚拟机/工具的各种操作备忘录

最近发现当初整的虚拟机有点小了,回想起之前分区的惨痛经历,索性两眼一闭整个新的

顺便记录一下各种工具和安装,方便日后查询(说不定还有重装的时候…

虚拟机的安装

在网上整个ios镜像下载就行

中科大源:http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/

分配的硬盘大小调到50g就直接默认安装

安装后可能出现没有网络的问题,解决方案是打开网络开关,不行的话移除网络适配器再重新添加即可

初始工作

最基本的工具

先行安装:

1
2
3
$ sudo apt-get install python-pip
$ sudo apt install vim
$ sudo apt install git

更换pip源

更换pip源为阿里云

修改 ~/.pip/pip.conf (没有就创建一个), 内容如下:

1
2
3
4
5
6
[global]
timeout = 10
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=
mirrors.aliyun.com

更换默认的python3.5为python3.7

1、配置依赖环境

1
2
3
$ sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev 
libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev
liblzma-dev libffi-dev libc6-dev

2、按这里面的来

https://blog.csdn.net/qq_29837161/article/details/83616364

但是一定要注意创建python3和pip3的软链接(主要是为了方便):

1
2
$ sudo ln -s /opt/python3.7/bin/python3.7 /usr/bin/python3
$ sudo ln -s /opt/python3.7/bin/pip3 /usr/bin/pip3

然后会出现无法打开终端的问题

原因是没有_gi这个库,然后你把原来系统中的库改个名就可以

1
2
3
4
5
$ cd /usr/lib/python3/dist-packages/gi/
# 下面的35 改成37 表示从py3.5 改到py3.7,如果安装的是3.6就改成36
$ sudo cp _gi_cairo.cpython-35m-x86_64-linux-gnu.so _gi_cairo.cpython-37m-x86_64-linux-gnu.so
$ sudo cp _gi.cpython-35m-x86_64-linux-gnu.so _gi.cpython-37m-x86_64-linux-gnu.so
$ cp -r /usr/lib/python3/dist-packages/gi /opt/python3.7/lib/python3.7/site-packages/

如果不慎把终端关了,可以在文件里面用右键打开

工具的安装

gdb-peda

这是我想起来的第一个工具,用于在终端动调程序,安装方式也简单,没出什么幺蛾子

1
2
$ git clone https://github.com/longld/peda.git ~/peda
$ echo "source ~/peda/peda.py" >> ~/.gdbinit

使用操作

常用

  1. start 开始调试
  2. run 从头开始运行到断点
  3. next 执行下一行语句,不进入到函数中(n 10指执行10行),按回车是执行上一次的命令
  4. quit 退出程序

断点

  1. b N-LINE 在第n行设置断点
  2. b fnc 在fnc函数上设置断点
  3. delete breakpoints 删除断点
  4. info breakpoints 查看断点列表

读操作

  1. 读取某个变量的值: p <var>
  2. 读取某个内存地址里的内容: x /NFU <memaddr>
  3. 读取某个寄存器的值: info r <register>
  4. 读取栈上内容: stack(s) 20(读取20行,每25行为一页,按回车进行切换

写操作

  1. 修改某个变量的值: set var <name> = <value>

  2. 修改某个内存地址的值:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    set *(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
  3. 修改某个寄存器的值: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
2
3
$ apt-get install -y python-dev python-pip libffi-dev libssl-dev
$ pip install -U setuptools
$ pip install pwntools

使用操作

顺便记录一下pwn的exp模版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#-*- coding:utf8 -*-
from pwn import *

context.arch = "amd64"
context.log_level = "debug"
elf = ELF("./easy_stack")
#p = remote('', '')
p = process("./easy_stack")
libc = ELF("./libc-2.23.so")

my_u64 = lambda x: u64(x.ljust(8, '\x00'))
my_u32 = lambda x: u32(x.ljust(4, '\x00'))

libc_start_main_offset=libc.symbols['__libc_start_main']

payload =
p.sendline(payload)

p.interactive()

one_gadget

一个用于在libc中寻找直接get shell地址的工具

1
2
3
$ sudo apt-get install ruby
$ sudo apt-get install gem
$ sudo gem install one_gadget

常用操作

one_gadget libc-2.23.so

-l可以指定搜索等级

ROPgadget

用于构造ROP链的工具

1
2
3
$ git clone https://github.com/JonathanSalwan/ROPgadget.git
$ cd ROPgadget
$ sudo python setup.py install

常用操作

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
2
3
4
5
$ sudo apt-get install python3-dev libffi-dev build-essential virtualenvwrapper
$ export WORKON_HOME=$HOME/Python-workhome
$ source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
$ mkvirtualenv angr
$ sudo pip3 install angr

其中virtualenvwrapper是一个Python虚拟环境,使用虚拟环境的主要原因是angr会修改libz3和libVEX

创建虚拟环境之后每次使用workondeactivate即可在真实与虚拟环境切换

glibc-all-in-one

https://github.com/matrix1001/glibc-all-in-one

1
2
3
4
$ git clone https://github.com/matrix1001/glibc-all-in-one.git
$ cd glibc-all-in-one/
$ chmod a+x build download extract
$ ./update_list

查看list文件

1
2
$ cat list
$ cat old_list

下载glibc

例如需要下载2.29-0ubuntu2_amd64

1
2
3
4
5
6
7
8
9
10
11
12
$ ./download_old 2.29-0ubuntu2_amd64
Getting 2.29-0ubuntu2_amd64
-> Location: http://old-releases.ubuntu.com/ubuntu/pool/main/g/glibc/libc6_2.29-0ubuntu2_amd64.deb
-> Downloading libc binary package
-> Extracting libc binary package
-> Package saved to libs/2.29-0ubuntu2_amd64
-> Location: http://old-releases.ubuntu.com/ubuntu/pool/main/g/glibc/libc6-dbg_2.29-0ubuntu2_amd64.deb
-> Downloading libc debug package
-> Extracting libc debug package
-> Package saved to libs/2.29-0ubuntu2_amd64/.debug
$ ls libs/2.29-0ubuntu2_amd64/
ld-2.29.so ... libc-2.29.so

patchelf

1
$ sudo apt-get install patchelf

例如我们需要让 re-alloc 程序指向glibc-all-in-one中下载的libc-2.29

1
2
3
4
5
6
7
8
9
10
$ ldd re-alloc 
linux-vdso.so.1 => (0x00007ffd3e7c7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f48a66cb000)
/lib64/ld-linux-x86-64.so.2 (0x00007f48a6a95000)
$ patchelf --set-rpath ~/Desktop/glibc-all-in-one/libs/2.29-0ubuntu2_amd64/ re-alloc
$ patchelf --set-interpreter ~/Desktop/glibc-all-in-one/libs/2.29-0ubuntu2_amd64/ld-2.29.so re-alloc
$ ldd re-alloc
linux-vdso.so.1 => (0x00007ffdaff7e000)
libc.so.6 => /home/ctfer/Desktop/glibc-all-in-one/libs/2.29-0ubuntu2_amd64/libc.so.6 (0x00007f2d342fd000)
/home/ctfer/Desktop/glibc-all-in-one/libs/2.29-0ubuntu2_amd64/ld-2.29.so => /lib64/ld-linux-x86-64.so.2 (0x00007f2d342c4000)

出现的问题

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

那些直接百度或者google最后一行报错信息就能解决的问题就不贴了

文章作者: 0bs3rver
文章链接: http://yoursite.com/2020/04/22/%E5%AE%89%E8%A3%85ubuntu16%E8%99%9A%E6%8B%9F%E6%9C%BA:%E5%B7%A5%E5%85%B7%E7%9A%84%E5%90%84%E7%A7%8D%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98%E5%BD%95/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 0bs3rver的小屋