记一次院赛CTF的Pwn和Misc题(入门)

目录

  • Pwn
    • easy pwn
    • 莽撞人
    • 反向读取
  • Misc
    • drop the beats
    • 拼东东
    • 消失的50px

Pwn

见到别的比赛的pwn题才幡然醒悟,已经没有比这些更简单的pwn题了。

easy pwn

首先,拿到Pwn题的第一步,看是64位还是32位
在这里插入图片描述
第二步 gdb看开了哪些保护
记一次院赛CTF的Pwn和Misc题(入门)_第1张图片

【1】Canary:Canary保护机制的原理,是在一个函数入口处从fs段内获取一个随机值,一般存到EBP - 0x4(32位)或RBP - 0x8(64位)的位置。如果攻击者利用栈溢出修改到了这个值,导致该值与存入的值不一致,__stack_chk_fail函数将抛出异常并退出程序。Canary最高字节一般是\x00,防止由于其他漏洞产生的Canary泄露 
【2】FORTIFY:FORTIFY_SOURCE机制对格式化字符串有两个限制(1)包含%n的格式化字符串不能位于程序内存中的可写地址。(2)当使用位置参数时,必须使用范围内的所有参数。所以如果要使用%7$x,你必须同时使用1,2,3,4,5和6。
【3】NX:NX enabled如果这个保护开启就是意味着栈中数据没有执行权限,以前的经常用的call esp或者jmp esp的方法就不能使用,但是可以利用rop这种方法绕过
【4】PIE:PIE enabled如果程序开启这个地址随机化选项就意味着程序每次运行的时候地址都会变化,而如果没有开PIE的话那么No PIE (0x400000),括号内的数据就是程序的基地址 
【5】RELRO:RELRO会有Partial RELRO和FULL RELRO,如果开启FULL RELRO,意味着我们无法修改got表

第三步,拖入ida反汇编
记一次院赛CTF的Pwn和Misc题(入门)_第2张图片
可以看到本题只需要让v5等于2019便可以执行sh了。
然后看一下他的栈结构,这边var_4便是v5(双击v5就可以跳到var_4)
记一次院赛CTF的Pwn和Misc题(入门)_第3张图片
因为read(0,&buf,0xC)可以知道,我们可以输入11位字符,所以我们只需要让最后四位是2019,就可以覆盖到var_4,也就是可以令v5等于2019.
于是写出exp
记一次院赛CTF的Pwn和Misc题(入门)_第4张图片
这边payload的\n加不加其实是一样的,加了\n表示就是结束输入。
exp里面主要是
导入pwn
连接到服务器
构建payload
发送payload
最后这个这题是一样的,因为不需要获取的shell,就是不需要获取控制权,他的意思就是把控制权交给用户。本题是当你执行到就直接给你flag的,不会给你控制权
记一次院赛CTF的Pwn和Misc题(入门)_第5张图片

莽撞人

记一次院赛CTF的Pwn和Misc题(入门)_第6张图片
记一次院赛CTF的Pwn和Misc题(入门)_第7张图片
记一次院赛CTF的Pwn和Misc题(入门)_第8张图片
首先一波常规操作,找到漏洞点,发现buf是0x10位的空间,但是可以输入0x50的内容
记一次院赛CTF的Pwn和Misc题(入门)_第9张图片
记一次院赛CTF的Pwn和Misc题(入门)_第10张图片

可以发现,这边有一个函数是getShell,只要执行到这个函数,就执行systm(“/bin/sh”)

栈结构为junk+ebp+ret_address+参数1+参数2+……+参数n
于是我们只需要将read到buf中的数据,覆盖到ret_address为getShell()地址。
记一次院赛CTF的Pwn和Misc题(入门)_第11张图片
记一次院赛CTF的Pwn和Misc题(入门)_第12张图片

反向读取

记一次院赛CTF的Pwn和Misc题(入门)_第13张图片
记一次院赛CTF的Pwn和Misc题(入门)_第14张图片
记一次院赛CTF的Pwn和Misc题(入门)_第15张图片

这边比较关键的是要发现漏洞点,因为要让if(*((_BYTE )&v2+i)==((_BYTE *)&v8+s[i]))一直都是成立的。

记一次院赛CTF的Pwn和Misc题(入门)_第16张图片
记一次院赛CTF的Pwn和Misc题(入门)_第17张图片

可以发现,当char类型的大于127会变成负数,所以我们可以利用这一点让他们相等。
记一次院赛CTF的Pwn和Misc题(入门)_第18张图片
通过分析,可以发现v2和v8相差0x40也就是64,所以*(&v2)=*(&v8-64)
构建exp如下,这边192就是-64
记一次院赛CTF的Pwn和Misc题(入门)_第19张图片

然后,就得到了flag

记一次院赛CTF的Pwn和Misc题(入门)_第20张图片

Misc

drop the beats

这是一道音频的杂项题,因为比较简单,所以这种简单的音频题我知道的一般就是一个mp3隐写,要么就是拖入Audacity频谱分析了
记一次院赛CTF的Pwn和Misc题(入门)_第21张图片
记一次院赛CTF的Pwn和Misc题(入门)_第22张图片

拼东东

一个损坏的zip,第一步就是想到拖到winhex里面看下文件头,发现没有zip的文件头50 4B 03 04,加上后就可以正常打开了。
记一次院赛CTF的Pwn和Misc题(入门)_第23张图片
记一次院赛CTF的Pwn和Misc题(入门)_第24张图片
记一次院赛CTF的Pwn和Misc题(入门)_第25张图片
记一次院赛CTF的Pwn和Misc题(入门)_第26张图片

消失的50px

这题很明显就是一个改图片高度的题了,拖入winhex找需要修改的高度。
记一次院赛CTF的Pwn和Misc题(入门)_第27张图片
可以看到图片高度是350像素,转换成16进制就是015E
记一次院赛CTF的Pwn和Misc题(入门)_第28张图片
然后找到015E,把他改大一些就好了。
记一次院赛CTF的Pwn和Misc题(入门)_第29张图片
记一次院赛CTF的Pwn和Misc题(入门)_第30张图片

你可能感兴趣的:(CTF)