Loading... <!-- wp:paragraph --> <p>这是一道很简单的题目,算是无libc的ret2libc,但是有很多我不理解的小细节还需要加强学习。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>先检查一下安全措施</p> <!-- /wp:paragraph --> <!-- wp:image {"align":"center","id":468,"sizeSlug":"large"} --> <div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-09-143346.png" alt="" class="wp-image-468"style=""></figure></div> <!-- /wp:image --> <!-- wp:paragraph --> <p>发现没有开启canary,可以轻松的进行栈溢出。</p> <!-- /wp:paragraph --> <!-- wp:image {"align":"center","id":469,"sizeSlug":"large"} --> <div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-09-143533.png" alt="" class="wp-image-469"style=""></figure></div> <!-- /wp:image --> <!-- wp:paragraph --> <p>然后我们发现这里存在一个明显的栈溢出漏洞。但是并没有在程序中找到system和/bin/sh等后门,所以我们可以考虑通过DynELF工具进行爆破。这道题其实和<span class="external-link"><a class="no-external-link" href="http://www.cjovi.icu/2020/11/07/xctf-pwn-100-wp/" target="_blank"><i data-feather="external-link"></i>pwn-100</a></span>是几乎一样的,但是是32位程序,就不需要使用gadgets了,简单了许多。并且可以帮我们泄露的函数是write,可以指定输出的字节数,所以leak函数也好写了许多。</p> <!-- /wp:paragraph --> <!-- wp:image {"id":471,"sizeSlug":"large"} --> <figure class="wp-block-image size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-09-144219-1024x577.png" alt="" class="wp-image-471"style=""></figure> <!-- /wp:image --> <!-- wp:paragraph --> <p>这里有几个细节。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>首先<code>context(log_level = 'debug',arch = 'i386',os = 'linux')</code>,这一句如果不写,就没法拿到shell。也许环境设置对DynELF有影响吧,为了不让终端输出过于混乱,这个我没写,卡了我不少时间。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>其次read函数需要通过plt表中的地址调用,但是上一题却需要用got表,并且都是换一下就没法拿shell,不太理解其中的原因,还是因为对链接不慎熟练。</p> <!-- /wp:paragraph --> 最后修改:2021 年 01 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,那听听上面我喜欢的歌吧