前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022 年 Ubuntu 16.04 配置 pwn 环境的一些小问题

2022 年 Ubuntu 16.04 配置 pwn 环境的一些小问题

作者头像
意大利的猫
发布2022-08-31 10:15:45
1.7K0
发布2022-08-31 10:15:45
举报
文章被收录于专栏:漫流砂漫流砂

Ubuntu 16.04 已经不在官方支持的时间范围内了,所以我的日常环境选择了 Ubuntu 18.04 但是,很多书籍和教程中使用的是 Ubuntu 16.04 , glibc 2.23

在 2022 年的今天,配置一台 Ubuntu 16.04 的 pwn 环境还是有一些必要的,我知道 Ubuntu 18.04或者更高版本可以修改 glibc 版本,以适应题目要求,但作为初学者来说,与教学环境保持一致是非常重要的,避免由于环境带来额外的影响

ps: 如果你认真看了 《Linux 二进制分析》 这本书,并且将其中进程注入的章节详细实验了一遍,你就知道我上面说的话是有道理的

配置允许 root 以桌面环境登录

使用 root 直接调试会省很多事,所以这里直接使用 root

默认 Ubuntu 是允许 root 登录的,所以我们进行如下配置

1. 为 root 设置密码

2. 为 root 配置 bash 环境

我们直接把当前用户的 bash 环境复制到 root 的根目录(/root/)就好

su root 切换到 root 用户(输入root的密码)

cp /home/debug/.bashrc /root/

其中 debug 为当前用户的名字

3. 配置允许 root 桌面登录

在 root 用户的权限下修改 /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 文件的内容

原本内容为:

我们修改一下:

修改这一步你可以使用 vim nano gedit 等文本编辑器,也可以直接执行下面这个命令

echo "greeter-show-manual-login=true" >> /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf

代码语言:javascript
复制
[Seat:*]
user-session=ubuntu
greeter-show-manual-login=true

在 root 权限下修改 /root/.profile 文件

原本内容为:

代码语言:javascript
复制
# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

mesg n || true

我们将最后一行修改一下

代码语言:javascript
复制
# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

tty -s && mesg n || true

重启一下

这样输入账号密码就可以成功登录了

接下来的操作我们就直接在 root 桌面环境下进行,此时大家可以做一个快照,免得因为时间推移,下面的这些操作也过时了

升级 Python3

Ubuntu 16.04 自带的 python3 版本为 3.5.2,我们将其升级至 3.6 升级 python 3 是为了顺利安装 pwntools

升级 Python3 这种事不建议使用任何的 PPA ,实际上 Ubuntu 16.04 可以用来升级 Python3 的PPA 也都不在了,我们选择源码升级

可以参考我在 18 年写的一篇文章

https://mp.weixin.qq.com/s/Z1v7d5M7958yzhGiN3DIkg

下载 Python 3.6.15 源代码

https://www.python.org/ftp/python/3.6.15/Python-3.6.15.tar.xz

tar -xvf Python-3.6.15.tar.xz

进入到 Python-3.6.15 文件夹中

cd Python-3.6.15

安装依赖包

  • apt-get update
  • 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

编译安装 Python3.6

./configure --prefix=/usr/local/python3 --enable-optimizations

make

这个命令需要一段时间

make install

报错了,我们修改 /usr/bin/lsb_release

原本是这样的

我们将 python3 改为 python3.5

此时输入 Python3 还是 3.5.2 版本

添加软链接

备份原本的软链接

mv /usr/bin/python3 /usr/bin/python3.bak

新建软链接

ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

解决 CommandNotFound

此时如果随便输入一个不存在的指令,就会产生下面这个错误告警

编辑这个报错文件

vim /usr/lib/command-not-found

#!/usr/bin/python3 修改为 #!/usr/bin/python3.5

此时再输入不存在的指令就会正常显示了

安装 pwntools

我们升级 Python3 就是为了顺利安装 pwntools

默认会出现这种问题,这个时候我们需要升级一下 pip3

升级 pip3

wget https://bootstrap.pypa.io/pip/3.6/get-pip.py

python3 get-pip.py

继续安装 pwntools

pip3 install pwntools

成功安装 pwntools

安装 pwndbg

下载源码

cd /root/

apt install git

git clone https://github.com/pwndbg/pwndbg

cd pwndbg

./setup.sh

如果 git clone 的时候连接不是很通畅,可以考虑打开 https://github.com/pwndbg/pwndbg 直接下载压缩包,网站还是打不开的话,那你懂吧

遗憾的是

哎,报错了,这个报错原因是什么呢?

gdb 的 Python 解释器

眼尖的朋友可能已经看到了,我们明明已经把软链接改成我们升级后的 python3.6.15 了,为什么执行 setup.sh 还是使用了 python 3.5.2 了呢?pip 还是 8.1.1 版本呢?

其实这里 Python版本并不是从系统环境变量或者文件软链接来的,而是使用了下面这条命令获取的 gdb 默认依赖的 Python 解释器

gdb -batch -q --nx -ex 'pi import platform; print(".".join(platform.python_version_tuple()[:2]))'

这条指令就是 setup.sh 中使用的

这个时候我想把 gdb 升级一下,之后使用咱们升级后的 Python 3.6.15 版本作为解释器,遗憾的是失败了,之后又想更改原本 gdb 依赖的 Python 解释器,结果没有搜索到操作方法,其实想想也知道,不重新安装很难做到

那么接下来就只能想办法改 pwndbg

后来看到一篇文章,找不到具体链接了

代码语言:javascript
复制
sys.stderr.write(f"ERROR: {exc}")

这个报错是因为 f-string 这种语法是在 Python3.6 这个版本新增的特性,又是一个简便的语法

具体可以参考

https://zhuanlan.zhihu.com/p/140898888

我们打开报错的文件

/usr/local/lib/python3.5/dist-packages/pip/_internal/cli/main.py

经过查询,我发现就这一个地方使用了 f-string 语法,那好,我们直接把这里改成 Python3.5.2 接受的语法

升级 Python3.5.2 对应的pip3

重新执行 ./setup.sh

遗憾的是依旧报错,因为这里使用的 pip 是 pip3-8.1.1 ,我们需要把 python3.5.2 对应的 pip 进行升级

wget https://bootstrap.pypa.io/pip/3.5/get-pip.py

python3.5 get-pip.py 注意,这里是 python3.5

重新执行 ./setup.sh

成功安装

再次修正 f-string 语法问题

尝试使用一下

又出现了报错,但是这里我们不怕,我们知道是因为 f-string 导致的,继续修改文件

/root/pwndbg/pwndbg/commands/context.py

修改为

再试一下 pwndbg

搞定!!! 记得做快照!!!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NOP Team 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置允许 root 以桌面环境登录
    • 1. 为 root 设置密码
      • 2. 为 root 配置 bash 环境
        • 3. 配置允许 root 桌面登录
        • 升级 Python3
          • 下载 Python 3.6.15 源代码
            • 安装依赖包
              • 编译安装 Python3.6
                • 添加软链接
                  • 解决 CommandNotFound
                  • 安装 pwntools
                    • 升级 pip3
                      • 继续安装 pwntools
                      • 安装 pwndbg
                        • 下载源码
                          • gdb 的 Python 解释器
                            • 升级 Python3.5.2 对应的pip3
                              • 再次修正 f-string 语法问题
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档