PWN环境配置

虚拟机安装

  • 镜像下载网站(http://old-releases.ubuntu.com/releases/)
  • 虚拟机建议硬盘 256 G 以上,内存也尽量大一些。硬盘大小只是上界,256 G 不是真就占了 256G,而后期如果硬盘空间不足会很麻烦。
  • lsb_release -a查看版本
  • 更换 ubuntu 镜像源 (https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/),建议先在 系统设置 → Software & Updates → Download from → 选择国内服务器例如阿里云 (貌似不这样后续换源会出错),然后再 sudo vim /etc/apt/sources.list 将镜像源中不高于当前系统版本的镜像复制进去(高于当前系统版本容易把 apt 搞坏)。
  • sudo apt update

基础工具

net-tools

ifconfig 查看网络配置需要安装 net-tools

sudo apt install net-tools

vim

sudo apt install vim

gedit

sudo apt install gedit

git

sudo apt install git

gcc

sudo apt install gcc

sudo apt install gcc-multilib

python

sudo apt install python2

sudo apt install python3

sudo apt install ipython

sudo apt install ipython3

pip

sudo apt install python3-pip

sudo apt install curl

curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py

sudo python2 get-pip.py

docker

sudo apt install docker.io

sudo apt install docker-compose

oh-my-zsh

#尽量root用户也下载一边

sudo apt install zsh

安装oh-my-zshsh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

设置zsh为默认shell(重启虚拟机后生效)

chsh -s /bin/zsh

安装插件:

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

编辑~/.zshrc添加插件:

plugins=(git

zsh-autosuggestions

zsh-syntax-highlighting

extract

)

 

gdb

安装: sudo apt-get install gdb gdb-multiarch

gdb 插件

主要有 pwndbg,peda,gef,这里我常用的是pwndbg。对于版本过于古老导致环境装不上的可以试一下peda.

先将三个项目的代码都拉取下来:

git clone https://github.com/longld/peda.git

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

git clone https://github.com/hugsy/gef.git

pwndbg 需要运行初始化脚本:

cd pwndbg

sudo ./setup.sh

另外还有一个 pwngdb 插件在调试多线程堆( heapinfoall 命令)的时候很有用,建议安装。

git clone https://github.com/scwuaptx/Pwngdb.git

gdb 在启动的时候会读取当前用户的主目录的.gdbinit文件进行 gdb 插件的初始化,这里提供一个

配置方案。

source /home/ubuntu/tools/pwndbg/gdbinit.py
#source /home/ubuntu/tools/peda/peda.py
#source /home/ubuntu/tools/gef/gef.py
#source /home/ubuntu/tools/muslheap/muslheap.py
source /home/ubuntu/tools/Pwngdb/pwngdb.py
source /home/ubuntu/tools/Pwngdb/angelheap/gdbinit.py
define hook-run
python
import angelheap
angelheap.init_angelheap()
end
end

注意,以普通用权限和管理员权限启动 gdb 时读取的 .gdbinit 文件的路径是不同的,普通权限读取的

是 /home/<username>/.gdbinit 而管理员权限读取的是 /root/.gdbinit 。

pwndbg 安装 ghidra 插件可以支持代码反编译(虽然没啥用 )

  • 安装 r2pipe 库
    • pip3 install r2pipe
  • 下载安装 radere2 项目
    • git clone https://github.com/radareorg/radare2.git
    • cd radare2
    • sudo sys/install.sh
  • 下载编译安装 r2ghidra 项目
    • git clone https://github.com/radareorg/r2ghidra.git
    • cd r2ghidra
    • sudo ./preconfigure
    • sudo ./configure
    • sudo make -j16
    • sudo make install
gadget 搜索工具
ROPgdbget

安装:

git clone https://github.com/JonathanSalwan/ROPgadget.git

cd ROPgadget

sudo python3 setup.py install

使用:

ROPgadget --binary ntdll.dll > rop

ropper

安装:

  • 在pypi 的 ropper 官网上下载 ropper
  • 运行安装脚本完成 ropper 安装
    • sudo python3 setup.py install

使用:

ropper --file ./pwn --nocolor > rop

one_gadget

用于搜索 libc 中能够实现 execve("/bin/sh", (char *[2]) {"/bin/sh", NULL}, NULL); 的效果

的跳转地址,由于是采用特征匹配的方法,因此只能是在 libc 中查找。

安装:

  • sudo apt install -y ruby ruby-dev
  • sudo gem install one_gadget

使用:可以查找到 gadget 地址以及条件限制。

➜ ~ one_gadget /lib/x86_64-linux-gnu/libc.so.6
0x50a37 posix_spawn(rsp+0x1c, "/bin/sh", 0, rbp, rsp+0x60, environ)
constraints:
rsp & 0xf == 0
rcx == NULL
rbp == NULL || (u16)[rbp] == NULL
0xebcf1 execve("/bin/sh", r10, [rbp-0x70])
constraints:
address rbp-0x78 is writable
[r10] == NULL || r10 == NULL
[[rbp-0x70]] == NULL || [rbp-0x70] == NULL
0xebcf5 execve("/bin/sh", r10, rdx)
constraints:
address rbp-0x78 is writable
[r10] == NULL || r10 == NULL
[rdx] == NULL || rdx == NULL
0xebcf8 execve("/bin/sh", rsi, rdx)
constraints:
address rbp-0x78 is writable
[rsi] == NULL || rsi == NULL
[rdx] == NULL || rdx == NULL

 

seccomp-tools

用于查看和生成程序沙箱规则。

安装: sudo gem install seccomp-tools

使用: seccomp-tools dump ./pwn

LibcSearcher

通过泄露的 libc 中函数的地址来确定 libc 版本

git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
sudo python3 setup.py install
glibc-all-in-one

临时找 glibc 和 ld 或者编译 glibc

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

更新下载列表:

➜ glibc-all-in-one ./update_list
[+] Common list has been save to "list"
[+] Old-release list has been save to "old_list"
➜ glibc-all-in-one cat list
2.23-0ubuntu10_amd64
2.23-0ubuntu10_i386
2.23-0ubuntu11_amd64
2.23-0ubuntu11_i386
2.23-0ubuntu3_amd64
2.23-0ubuntu3_i386
2.27-3ubuntu1_amd64
2.27-3ubuntu1_i386
2.28-0ubuntu1_amd64
2.28-0ubuntu1_i386
......
➜ glibc-all-in-one cat old_list
2.21-0ubuntu4.3_amd64
2.21-0ubuntu4.3_amd64
2.21-0ubuntu4_amd64
2.21-0ubuntu4_amd64
2.24-3ubuntu1_amd64
2.24-3ubuntu1_amd64
2.24-3ubuntu2.2_amd64
2.24-3ubuntu2.2_amd64
2.24-9ubuntu2.2_amd64
2.24-9ubuntu2.2_amd64
......

下载libc:

cat list |xargs -i ./download {}

cat old_list |xargs -i ./download_old {}

编译libc:

sudo ./build [版本例如2.29] [架构例如 i686 amd64]

patchelf

安装: sudo apt install patchelf

qemu

安装: sudo apt install qemu-user qemu-system

alpha3

安装: git clone https://github.com/TaQini/alpha3.git

from pwn import *
import os
context(arch='amd64', os='linux')
context.log_level = 'debug'
fp = open("shellcode", "wb+")
fp.write(asm(shellcraft.sh()))
fp.close()
shellcode = os.popen("python ./alpha3/ALPHA3.py x64 ascii mixedcase rax --
input=shellcode").read()
print shellcode

WSL

我们可以用wsl和vscode来完成我们的环境搭建.

  1. 首先我们需要在vscode下载wsl插件.
  2. 在wsl里输入code .
    1. 如果这一部报错,看报错信息记住他说要去哪个网址(https://update.code.visualstudio.comcommit:(根据报错填写)/server-linux-x64/stable)下载东西,我们挂上梯子,然后我们手动下载,之后放到~/.vscode-server/bin目录下,记得把其他文件删完.
      1. cd ~/.vscode-server/bin
      2. tar -zxf vscode-server-linux-x64.tar.gz
      3. mv vscode-server-linux-x64 ${id} # 注意把:${id}替换成对应的id
  3. wsl里输入code .就能打开vscode了

LINUX安装应用

比如安装clion,我们下载了他的tar.tz包,解压之后它里面会有一个bin目录

bin里有个clion.sh(pycharm里面是pycharm.sh),这个就是启动脚本,

打开后创建桌面条目就行了

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/701988.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

批量文件重命名软件

因为日常用电脑的时候,经常都会遇到需要对当前目录下的文件,进行重命名。最好是按照自己的规则上来进行批量重命名。我试了几款软件,都感觉不是很好,不是要收费,就是各种乱七八糟的流氓广告。本想着干脆自己写算了,在绝望之际,找到了这款软件,亲测,确实还用,特别是满…

Python基础教程(十四):OS 文件/目录方法

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

matlab模拟闪电效果,分形几何

介绍 今日北京雷暴雨&#xff0c;从闪电中想到了今天想发一篇关于模拟闪电的matlab文章&#xff0c; 闪电跟人类神经元链接的样子非常相似&#xff0c;它们都属于分形几何的范畴。 分形几何 分形几何是一种复杂的几何结构&#xff0c;它在不同的尺度上具有自相似性。即&…

WPF界面设计

1、使用C#-WPF实现抽屉效果-炫酷漂亮的侧边栏导航菜单-SplitViewMD主题重绘原生控件的美观效果-提供源码Demo下载 码源地址&#xff1a;https://download.csdn.net/download/Prince999999/89424685 2、使用C#-WPF实现抽屉效果-菜单导航功能实现&#xff0c;常规的管理系统应该…

使用ecal后导致cmake项目的RelWithDebInfo编译类型会报依赖库NOTFOUND错误

cmake项目的RelWithDebInfo编译类型会报依赖库NOTFOUND&#xff0c;Release类型却正常&#xff0c;哪怕该依赖库是RelWithDebInfo类型编译的。 原因&#xff1a;eCAL的cmake脚本强行把Debug/Release之外的类型映射为Release了&#xff1b;如果依赖库以Release类型编译安装就能…

大众点评全国酒店POI采集146万家-2024年5月底

大众点评全国酒店POI采集146万家-2024年5月底 店铺POI点位示例&#xff1a; 店铺id k8sp5Gm38dMqzlFf 店铺名称 广州长隆熊猫酒店 十分制服务评分 9.4 十分制环境评分 9.4 十分制划算评分 9.4 人均价格 - 评价数量 13333 店铺地址 汉溪大道东299号 店铺类型 豪华型 …

【启明智显实战指南】SSD202D方案双网口开发板烧录全攻略---从入门到精通

提示&#xff1a;作为Espressif&#xff08;乐鑫科技&#xff09;大中华区合作伙伴及sigmastar&#xff08;厦门星宸&#xff09;VAD合作伙伴&#xff0c;我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考。同时也用心整理了乐鑫及星宸…

满屏假算力 全都是泡沫!

A股如戏&#xff0c;全靠演技。拖了半个月&#xff0c;去年的大牛股鸿博&#xff08;股份&#xff09;摊牌&#xff0c;明确回复深交所年报问询函&#xff0c; 洋洋洒洒那么多字&#xff0c;意思就是不想搞算力了&#xff0c;也不想对之前签署的合同履约&#xff0c;那些年吹过…

3D交互软件有哪些?哪个比较简单好学?

一个物理实验的仿真&#xff0c;要求做出来的结果是可以在电脑上完成实验&#xff0c;也就是通过操作实验器材让表盘上的表针按照实际的情况运动。实验器材的模型已经用3Dmax做出来了&#xff0c;请问用什么软件能方便的做到3D交互呢&#xff1f;最好是有中文的。 已经有制作好…

Linux基础 (十三):计算机网络基础概论

一、网络基本概念 1.1 网络 把独立自主的计算机通过传输介质和网络设备链接起来&#xff0c;就构成一个网络 &#xff0c;网络是由若干结点和连接这些结点的链路组成&#xff0c;网络中的结点可以是计算机&#xff0c;交换机、 路由器等设备。 网络设备有&#xff1a;交换机、…

【深度学习】Transformer分类器,CICIDS2017,入侵检测,随机森林、RFE、全连接神经网络

文章目录 1 前言2 随机森林训练3 递归特征消除 RFE Recursive feature elimination4 DNN5 Transformer5.1. 输入嵌入层&#xff08;Input Embedding Layer&#xff09;5.2. 位置编码层&#xff08;Positional Encoding Layer&#xff09;5.3. Transformer编码器层&#xff08;T…

Ubuntu server 24 (Linux) lvm 动态扩容磁盘空间

1 查看磁盘信息 sudo fdisk -l 2 查看lvm分区信息 sudo lvdisplay 3 扩展逻辑卷 sudo lvextend -l 100%FREE /dev/ubuntu-vg/ubuntu-lv 4 刷新逻辑卷 sudo resize2fs /dev/ubuntu-vg/ubuntu-lv 5 查看磁盘信息 df -h

代码随想录第28天|贪心算法part2

122买卖股票的最佳时机2 贪心算法最好能写出表达式&#xff0c;这样才好推导 假设在i天买入&#xff0c;j天卖出&#xff0c;则利润:price[j]-price[i] (price[j]-price[j-1])(price[j-1]price[j-2])...(price[i1]-price[i]) 于是我们可以计算出相邻天数的价格差&#xff0c;如…

178.二叉树:最大二叉树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

BPMN结束事件-Activiti7从入门到专家(8)

结束事件类型 bpmn结束事件表示流程或者分支的结束&#xff0c;当流程执行到结束时会抛出一个结果&#xff0c;是的&#xff0c;了解了开始事件以后&#xff0c;这个结束事件就相对很容易了。结束事件只有4种类型&#xff1a; 空结束事件错误结束事件取消结束事件终止结束事件…

程序员写博客的好处

编程不仅仅是一种谋生的手段&#xff0c;也是解决问题和创造价值的方式&#xff0c;如果把编程作为一门艺术看待&#xff0c;那就会有趣的多&#xff0c;也不会有什么35岁危机。 写博客不仅仅是一种记录和分享知识的手段&#xff0c;更是一种促进个人成长、拓宽职业道路的有效…

泛微OA E9 浏览框显示的数据根据表单字段过滤

一、实现效果&#xff1a;如图所示&#xff0c;字段“物品名称”浏览框显示的数据根据“类型”字段进行过滤。 二、实现方法&#xff1a; 1、建模引擎-应用建模-浏览框-浏览框列表中单击“办公耗材”-“浏览框列表”-“操作”-“编辑” 2、sql语句中根据OA自带是示例增加where…

echarts rich富文本标签使用

echarts 常见的富文本标签rich 位于 title, xAxis, yAxis, series中 这里着重讲解在 title 和 series中的 rich富文本标签使用 title 中的富文本标签在 textStyle属性下面 series 中的富文本标签在 label属性下面 rich富文本使用方法&#xff1a; title: {text: [//a 代表自…

A comprehensive review of machine learning-based models for fake news detection

Abstract 互联网在假新闻传播中的作用使其成为一个严重的问题&#xff0c;需要复杂的技术来自动检测。为了应对 Facebook、Twitter、Instagram 和 WhatsApp 等社交媒体网站上误导性材料的快速传播&#xff0c;本研究探索了深度学习方法和各种分类策略领域。该研究特别调查了基…

Java Opencv识别图片上的虫子

最近有个需求&#xff0c;希望识别图片上的虫子&#xff0c;对于java来说&#xff0c;图像识别不是很好做。在网上也搜索了很多&#xff0c;很多的代码都是不完整&#xff0c;或者下载下载报错&#xff0c;有的写的很长看不懂。所以自己试着用java的opencv写了一段代码。发现识…