microcorruption

前两题忘记记下来了,反正很容易就不写了

Sydney

这里是逐一比较,一开始按照顺序来写不对,卡了一下,看了题解应该是数据存储应该是高位在后面,就是要6750倒过来写5067,很容易忘记的基础知识点了orz。

Hanoi

这里是要比较0x2e和0x2410地址里的东西是否一样,一样就可以过,前面可以随便填

Cusco

不能让r15=0,就往前面函数看看

不管前面输入什么,到这两句r15都会变为0,因此不能单纯靠写答案过这题,看了看题解应该是要用栈溢出来操作。

当执行到login函数的ret指令时,sp处于我们可以覆盖的位置,因此可以把这个位置写成我们需要跳转的地址0x4446,因此选择16位输入aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4644,就过啦!

Reykjavik

照例输入aaaaaaaaaaaa运行一下,当sp运行到password开始的地方,留意汇编指令

这里需要比较0x6cd1和0x43fe-0x24=0x43da的内容,也就是password的第一组数字,因此password先直接输d16c,然后就发现过了。

其实这一题做的时候并没有这么简单,当时是发现了程序的汇编码在内存里面,只能一条一条去看,并且看见enc的函数名,以为是要一条一条解密的,后来实在撂不清2400后面的程序整个的逻辑,去找了题解顺着做才发现这条重要指令,对汇编指令还是不够敏感,还得继续努力orz。

Whitehorse

这道题出现栈溢出的地方是程序最后的ret那里

因为之前习惯于在最后判定结果前找漏洞,找这个ret找了很久,最后是在栈溢出的地方填需要跳转的地址,这里没有unlock函数,但是在conditional_xxx函数里有一个call,我们可以填充参数0x7f进去,就能unlock。

Montevideo

跟上一题是一模一样的。

Johannesburg

这里是一个cananry,因此sp+11地址的值应该等于30,才能绕过,同时填充我们要的返回地址0x4446就行。

Santa Cruz

这里不能使之为0,一步一步推。


microcorruption
http://example.com/2021/05/26/microcorruption/
作者
Magnesium
发布于
2021年5月26日
许可协议