如何打造一个究极舒适的pwn环境
如果能把精力集中在shellcode的编写上,而不是一遍又一遍地在虚拟机和vscode中来回横跳,那是多么惬意的事情。
我们假设读者刚刚装好了vscode,里面什么插件也没有,从零开始。
整个过程大概需要花费半天到一天的时间。
成果图:
linux系统的搭建与shell美化
方法一:使用虚拟机(推荐)
个人推荐从kali官网上下载虚拟机版本,这样安装就是导入几分钟的事情,可以少走许多弯路。
并且安装好后,系统本身安装的包就基本够用了,什么python3、pip、gdb、ssh都是预置好的的,非常方便。
系统自带的终端zsh颜值还不错,也不需要过多的配置。
方法二:使用wsl/wsl2
如果你的windows内部版本小于18362,那么我并不推荐你选择这种方法,因为之前的版本只能安装wsl,而且wsl不是真正的linux内核。具体一点,你不能运行32位程序。
如果你的windows内部版本小于19041,那么安装wsl2会开启Hyper-V,会导致与Vmware虚拟机产生冲突,因此个人也不推荐。
for experienced: 如果你之前装了wsl,可以参考这篇升级指南:https://zhuanlan.zhihu.com/p/356397851
我的系统内部版本是18363,因此安装了wsl,这里以安装wsl为例进行介绍。
启用wsl并下载linux子系统
win10设置——更新与安全——开发者选项——开发人员模式
win+q——启用或关闭windows功能——重启
去微软应用商店自行下载一个linux发行版即可,我选择的是ubuntu18.04
记得装好后第一件事就是换源。
学会在vim中生存下来。
如果你有魔法,建议装一个proxychains以免去git clone时的痛苦。
更改并美化linux终端(可选)
主要分为以下三步:
安装zsh
安装oh-my-zsh
在oh-my-zsh中配置Powerlevel9k主题
(这几步够你喝一壶了)
参考链接:
https://www.thisfaner.com/p/powerlevel9k-zsh/#powerlevel9k-%E7%AE%80%E4%BB%8B
https://www.sysgeek.cn/install-zsh-shell-ubuntu-18-04/
设置共享文件夹
vmware
右键虚拟机——设置——选项——共享文件夹——总是启用——添加路径
在kali中:共享文件的路径是/mnt/hgfs
如果是直接导入的kali,那么就不需要挂载操作。
否则参考这篇文章:https://www.cnblogs.com/wuhongbin/p/14052984.html
wsl
直接在/mnt/
中就可以看到主机的所有盘符,无需共享。
在linux中配置pwn环境
在 linux 中使用 IDA pro (updated on 4/29/2023)
如果有钱买 linux 正版可以略过此节。
ref: https://www.debugwar.com/article/activate-IDAPython-with-wine-IDA-under-linux
相信大部分读者应该有 IDA pro 7.7 的学习版,只不过是 Windows 版本。让 linux 环境跑起 IDA pro 的步骤如下(以 ubuntu 22.04.2 LTS为例):
- 下载
winehq
,选择stable-branch
即可: https://wiki.winehq.org/Ubuntu - 使用
wine
运行一次ida.exe/ida64.exe
,此时 ida 会提示没有 python 环境。 - 建议下载
python3.8.10
的绿色包:wget https://www.python.org/ftp/python/3.8.10/python-3.8.10-embed-amd64.zip
,并放置于 wine 对应 windows 分区的C:\Program Files\Python3
(即 linux 分区的~/.wine/drive_c/Program Files/Python3
)。 - 在 windows
注册表中将3中路径添加到
PATH
中,即HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
中的PATH
键值。 - 将
C:\Program Files\Python3\python38.dll
添加至HKEY_CURRENT_USER\Software\Hex-Rays
中的Python3TargetDLL
键值(如果没有就创建) - 此时打开
IDA
应该可以用IDAPython
,但是yara keystone
相关插件仍会报错。这是因为我们没有用pip
安装相关模块。 - 执行
pip
安装脚本:wine python https://bootstrap.pypa.io/get-pip.py
并在Python3
目录中的python38._pth
文件中添加一行./Lib/site-packages
,此时执行wine python.exe -m pip --version
应回显pip
版本。 wine python -m pip install yara-python keystone-engine six
- (可选)将
pip
加入PATH
(C:\Program Files\Python3\Scripts
),加入chatGPT插件gepetto.py
(需安装openai
模块),配置主题文件等。 - 不要运行
idapyswitch.exe
,容易前功尽弃。
编写shellcode所需工具
- 安装python,版本建议在3.6~3.10之间。
- 安装最新版的pip。
- 安装pwntools。
调试工具
安装gdb。(建议把gcc和g++也装上)
安装gdb的插件peda、gef与pwndbg。(我是用gdbplugins项目打包安装的)
因为这三个插件不能共存,因此需要写一个启选择脚本或者记住这三个插件的启动方式。
选择脚本:https://www.jianshu.com/p/94a71af2022a
或者在~/.gdbinit中编辑:
1
2
3source ~/GdbPlugins/gef/gef.py
#source ~/GdbPlugins/pwndbg/gdbinit.py
#source ~/GdbPlugins/peda/peda.py想用哪个去掉哪个注释即可。
配置vscode远程链接
比较麻烦而且坑比较多,请务必做好心理准备。
在linux下配置ssh
kali应该自带的,不必额外安装。
sudo apt-get install ssh
vim /etc/ssh/sshd_config
中PermitRootLogin
改为yes
service ssh start
配置端口(可选)
vim /etc/ssh/sshd_config
vim的find命令是在normal模式中输入
/
,然后输入#port
,因为vim默认是完全匹配并区分大小写。(如果你不知道什么是normal模式,请你多按几次esc键)
默认端口22,想改就把注释去掉。
在windows下配置ssh
建议装个git,自带ssh。
其余配置与linux相仿。
windows环境测试
打开你的终端,输入:
ssh kali@<your outer ip in kali> -p <your modified port>
(对于kali虚拟机)
ssh <your name>@localhost -p <your modified port>
(对于wsl)
如果输入密码正确,进入了linux的终端,就代表配置成功了。
配置SSH key(可选)
如果你不想输密码,可以通过部署一对SSH key解决问题。(原理跟部署博客是一样的)
可以参考这篇文章:https://blog.csdn.net/andriodhahaha/article/details/104809303
vscode ssh插件配置
搜索remote - SSH
,安装后点击边上多出的Remote Explorer
菜单。
点击加号,把之前输入终端的ssh命令再输一遍,就可以坐等vscode在远端安卓vscode server了。
坑点一——bad owner or permissions on /.ssh/config
https://blog.csdn.net/chaoenhu/article/details/103698804
坑点二——vscode server安装过程中好像卡住不动了
类似于这样:
其实它并没有卡死,它早就安装完了。我们只需要点击右上角的加号,新建一个终端即可。
在vscode server上安装插件(可选)
跟在本地安插件的过程相仿,只是你需要点击的是install on 192.168.xxx.xxx/127.0.0.1
,别安到本地去了。
常见问题——updated on 3/25/2022
vscode的pylance插件可能识别不出pwntools中的一些函数而产生警告,可以采用以下步骤忽略警告:
Ctrl+Shift+P,输入settings.json
你会来到一个settings界面,不要管里面有什么内容。在你的远端ip的设置中找到
edit in setting.json
这个选项,点进去。在最后一个大括号的上一行添加如下代码:
1
2
3"python.analysis.diagnosticSeverityOverrides": {
"reportUndefinedVariable": "none"
}
vscode的pylance插件还可能会因为sendline
系列函数,大段大段地报code is unreachable
这个错误,修改方法如下:
查看sendline的源码,修改以下部分
1 | def send_raw(self, data): |
将raise EOFError('Not implemented')
改为raise NotImplementedError
即可。
vscode界面微调
在非编辑区域右键即可调整。
做完这些事情后,我们就可以开始愉快地coding啦!