云计算百科
云计算领域专业知识百科平台

CTFshow-pwn入门-前置基础(pwn0~34)WP

Test_your_nc

此部分题目较为简单,flag 往往很容易得到,但对入门学者来说理解程序运行原理比拿 flag 更重要,所以有时得到了 flag 也会继续分析,各位老师傅不必纠结,嫌麻烦跳过即可。

pwn0

这一题是彩蛋题,输入连接密码后,有一些不完整的剧情和花里胡哨的加载界面。

提示说只有三秒时间,其实是吓人的,这里直接获取了 shell

pwd指令查看当前目录

ls发现当前目录下没东西

cd /回到上一级目录

ls发现当前目录下有文件ctfshow_flag

cat ctfshow_flag得到 flag

pwn1

下载附件在虚拟机中打开

chmod 777 pwn给附件加权限

checksec pwn查看附件信息,64 位

./pwn运行附件,报错没有找到/ctfshow_flag

用 ida 打开,F5反编译程序

发现程序直接打印出 flag ,本地虚拟机没有 flag 文件所以报错

nc 连接题目容器

得到 flag

pwn2

下载附件在虚拟机中打开

chmod 777 pwn给附件加权限

checksec pwn查看附件信息,64 位

./pwn运行附件,发现直接拿到了 shell

nc 连接题目容器

cat ctfshow_flag得到 flag

再来 ida 里分析一下附件,F5反编译程序

果然是直接把 shell 给我们了

pwn3

下载附件在虚拟机中打开

chmod 777 pwn给附件加权限

checksec pwn查看附件信息,64 位

./pwn运行附件,需要作出选择,明显选项 6 是正确的,本地没有 flag 文件报错

nc 连接题目容器

选择选项 6,成功得到 flag

还是再来 ida 里分析一下附件,F5反编译程序

其他选项都无法读出 flag,选项 6 执行了 system_func() 这个函数,点开函数

发现该函数功能即是打印 flag

pwn4

老样子,下载附件在虚拟机中打开

chmod 777 pwn给附件加权限

checksec pwn查看附件信息,64 位

./pwn运行附件,随便输入回车,程序退出,结合提示猜测需要输入正确的字符

用 ida 打开,F5反编译程序

分析程序,这三部分意思分别是:

  • 将 s1 的值改为 CTFshowPWN
  • 输入 s2
  • s1 等于 s2 时执行函数 execve_func()
  • 点进 execve_func() 函数发现这里可以获取 shell

    nc 连接题目容器,构造 s1 等于 s2,即输入 CTFshowPWN

    拿到权限,cat ctfshow_flag得到 flag

    前置基础

    此部分题目是关于 pwn 学习的一些前置基础知识内容,较为简单,flag 往往很容易得到,但对入门学者来说理解程序运行原理比拿 flag 更重要,所以有时得到了 flag 也会继续分析,各位老师傅不必纠结,嫌麻烦跳过即可。

    pwn5

    pwn5-pwn12 简单介绍了汇编语言的几种寻址方式,虽然有注释,但也要逐渐理解汇编的意思。

    下载附件在虚拟机打开

    chmod 777 Welcome_to_CTFshow给附件加权限

    checksec Welcome_to_CTFshow查看附件信息,32 位,小端

    ./Welcome_to_CTFshow运行附件,其中%是换行标识

    则 flag 为<font style=\”color:rgb(33, 37, 41);\”>ctfshow{Welcome_to_CTFshow_PWN}</font>

    还是再来 ida 里分析一下附件,F5反编译程序

    系统调用输出 dword_80490E8 地址后的 0x16 个字节,即 22 个字符

    点进该地址继续观察

    该地址下是十六进制数据 636c6557 ,右键选择(或光标放在该数据上按 R)可以转化为字符串形式,即为 cleW

    由于是小端序,0x636c6557的低位 0x57 先输出接着是 0x65………

    所以输出为 Welc

    再接上后面的内容正好 22 字符

    pwn6

    打开 Welcome_to_CTFshow.asm汇编文件

    注释写的很清楚了,一步一步计算,最后 eax 的值为 114514

    根据题目要求,flag为: ctfshow{114514}

    pwn7

    打开 <font style=\”color:rgb(77, 77, 77);\”>Welcome_to_CTFshow.asm</font>汇编文件

    注释写的很清楚了,寄存器寻址方式结束后edx寄存器中的值为0x36d

    根据题目要求,flag为:ctfshow{0x36D} ,d要大写

    pwn8

    打开 <font style=\”color:rgb(77, 77, 77);\”>Welcome_to_CTFshow.asm</font>汇编文件

    注释写的很清楚了,想看到 <font style=\”color:rgb(77, 77, 77);\”>msg</font> 的地址需要将已经编译好的程序反编译

    ida 打开 elf 文件,<font style=\”color:rgb(77, 77, 77);\”>F5</font>反编译程序

    这些地址是十六进制数据,所以在前面加 <font style=\”color:rgb(77, 77, 77);\”>0x</font>

    flag 为:ctfshow{0x80490E8}

    pwn9

    打开 <font style=\”color:rgb(77, 77, 77);\”>Welcome_to_CTFshow.asm</font>汇编文件

    根据注释,esi存的地址是 <font style=\”color:rgb(77, 77, 77);\”>0x80490E8</font>

    ida 打开 elf 文件,<font style=\”color:rgb(77, 77, 77);\”>F5</font>反编译程序,跟进地址

    该地址指向的值即为 636C557h 这里的 h 表示十六进制,我们用 0x 表示

    所以本题的 flag 为:ctfshow{0x636C6557}

    pwn10

    打开 <font style=\”color:rgb(77, 77, 77);\”>Welcome_to_CTFshow.asm</font>汇编文件

    分步解析:

  • 赋值:ecx 值为 <font style=\”color:rgb(77, 77, 77);\”>0x80490E8</font>
  • +4:<font style=\”color:rgb(77, 77, 77);\”>ecx</font> 值为 <font style=\”color:rgb(77, 77, 77);\”>0x80490EC</font>
  • <font style=\”color:rgb(77, 77, 77);\”>eax</font> 值为地址 <font style=\”color:rgb(77, 77, 77);\”>0x80490EC</font> 处的值
  • ida 打开 elf 文件,<font style=\”color:rgb(77, 77, 77);\”>F5</font>反编译程序,按 <font style=\”color:rgb(77, 77, 77);\”>G</font> ,输入地址跳转

    所以本题 flag 为:ctfshow{ome_to_CTFshow_PWN}

    pwn11

    打开 <font style=\”color:rgb(77, 77, 77);\”>Welcome_to_CTFshow.asm</font>汇编文件

    分步解析:

  • 赋值:ecx 值为 <font style=\”color:rgb(77, 77, 77);\”>0x80490E8</font>
  • 赋值:<font style=\”color:rgb(77, 77, 77);\”>edx</font> 值为 <font style=\”color:rgb(77, 77, 77);\”>2</font>
  • 计算赋值:<font style=\”color:rgb(77, 77, 77);\”>eax</font> 值为地址 <font style=\”color:rgb(77, 77, 77);\”>0x80490E8 + 2 * 2</font>=<font style=\”color:rgb(77, 77, 77);\”>0x80490EC</font> 处的值
  • ida 打开 elf 文件,<font style=\”color:rgb(77, 77, 77);\”>F5</font>反编译程序,按 <font style=\”color:rgb(77, 77, 77);\”>G</font> ,输入地址跳转

    所以本题 flag 仍为:ctfshow{ome_to_CTFshow_PWN}

    pwn12

    打开 <font style=\”color:rgb(77, 77, 77);\”>Welcome_to_CTFshow.asm</font>汇编文件

    分步解析:

  • 赋值:ecx 值为 <font style=\”color:rgb(77, 77, 77);\”>0x80490E8</font>
  • 赋值:<font style=\”color:rgb(77, 77, 77);\”>edx</font> 值为 <font style=\”color:rgb(77, 77, 77);\”>1</font>
  • +8:ecx 值为 <font style=\”color:rgb(77, 77, 77);\”>0x80490F0</font>
  • 计算赋值:<font style=\”color:rgb(77, 77, 77);\”>eax</font> 值为地址 <font style=\”color:rgb(77, 77, 77);\”>0x80490F0 + 1 * 2 – 6</font>=<font style=\”color:rgb(77, 77, 77);\”>0x80490EC</font> 处的值
  • ida 打开 elf 文件,<font style=\”color:rgb(77, 77, 77);\”>F5</font>反编译程序,按 <font style=\”color:rgb(77, 77, 77);\”>G</font> ,输入地址跳转

    所以本题 flag 仍为:ctfshow{ome_to_CTFshow_PWN}

    pwn13

    打开 flag.c 文件,用 ASCII 码的形式储存了多个字符,也应该就是我们的 flag

    按照题目要求编译, gcc flag.c -o flag

    ./flag 运行拿到 flag

    pwn14

    打开 flag.c

    这里读取了文件 key 的内容,由于没有该文件,直接编译运行会报错

    创建 key 文件并填写题目中的密钥,再运行

    成功拿到 flag

    pwn15

    .asm 是汇编代码文件,读汇编代码几乎没有任何可读性,还是按照题目要求来编译运行

    汇编:nasm -f elf32 flag.asm -o flag.o

    链接:ld -m elf_i386 flag.o -o flag

    得到 flag

    pwn16

    .s 也是汇编代码文件,也无法读,还是按照题目要求来编译运行

    编译:gcc flag.s -o flag

    得到 flag

    pwn17

    查看文件信息

    64 位小端序,运行附件,让我们选择

    挨个尝试后发现选项 1 和 4 没什么效果,选项 3 迟迟不出结果

    选项 2 可以列出根目录文件,发现 flag 就在根目录里

    拖进 ida 分析,F5 反编译

    发现选项 3 的等待时间过于久远,所以考虑从选项 2 中入手

    需要闭合再写命令,具体有两种方式

  • 直接 cat flag 文件
  • ;cat ctfshow_flag 发现进入死循环,可能是因为输入太长溢出导致的

    改为;cat ctf*其中*是通配符,文件名符合这个形式的都会被执行

    得到 flag

  • ;/bin/sh拿 shell 权限,再查看 flag
  • 同样得到 flag

    pwn18

    查看附件信息

    64 位小端序,直接运行没什么东西,随便输入后弹出 两条报错

    拖进 ida 分析,F5 反编译

    发现一个判断和两个函数

    真假函数的区别在于>>和>,其中>>是追加写入,>是覆盖写入

    所以我们应该执行fake()函数中的>>,所以v4

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » CTFshow-pwn入门-前置基础(pwn0~34)WP
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!