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反编译程序
分析程序,这三部分意思分别是:
点进 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>汇编文件
分步解析:
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>汇编文件
分步解析:
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>汇编文件
分步解析:
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 ctfshow_flag 发现进入死循环,可能是因为输入太长溢出导致的
改为;cat ctf*其中*是通配符,文件名符合这个形式的都会被执行
得到 flag
同样得到 flag
pwn18
查看附件信息
64 位小端序,直接运行没什么东西,随便输入后弹出 两条报错
拖进 ida 分析,F5 反编译
发现一个判断和两个函数
真假函数的区别在于>>和>,其中>>是追加写入,>是覆盖写入
所以我们应该执行fake()函数中的>>,所以v4
评论前必须登录!
注册