Loading... <!-- wp:paragraph --> <p>这是我做的第一道处于进阶区pwn题。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>checksec查看安全保护</p> <!-- /wp:paragraph --> <!-- wp:image {"align":"center","id":362,"sizeSlug":"large"} --> <div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-02-195634.png" alt="" class="wp-image-362"/></figure></div> <!-- /wp:image --> <!-- wp:paragraph --> <p>中规中矩</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>到ida里反汇编一下,shift+F12发现有这么一个函数</p> <!-- /wp:paragraph --> <!-- wp:image {"id":368,"sizeSlug":"large"} --> <figure class="wp-block-image size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-02-202539.png" alt="" class="wp-image-368"/><figcaption>所以调用它就是了</figcaption></figure> <!-- /wp:image --> <!-- wp:image {"align":"center","id":363,"sizeSlug":"large"} --> <div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-02-195539.png" alt="" class="wp-image-363"/></figure></div> <!-- /wp:image --> <!-- wp:paragraph --> <p>同时可以发现有两个溢出点,第一个溢出点只有32的上限,没什么用处,因为会发现,<img class="wp-image-364" style="width: 150px;" src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-02-195929.png" alt="">这里面若想直接改变调用的函数,就必须修改v14,然后v14正好离s 32个字节处,这里的fgets只读到32-1位哈哈哈哈哈哈哈哈哈哈。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>所以就考虑使用第二个溢出点。这个不错,可以无限溢出。</p> <!-- /wp:paragraph --> <!-- wp:image {"id":365,"sizeSlug":"large"} --> <figure class="wp-block-image size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-02-200509.png" alt="" class="wp-image-365"/></figure> <!-- /wp:image --> <!-- wp:paragraph --> <p>我们再看看这个switch,会发现case 5之前的判断都比较麻烦,但是case 5之后就都是v2[i]在a~z中的时候就v14++,并且v14只会加到10,之后就是一直default break,</p> <!-- /wp:paragraph --> <!-- wp:image {"id":366,"sizeSlug":"large"} --> <figure class="wp-block-image size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-02-201956.png" alt="" class="wp-image-366"/></figure> <!-- /wp:image --> <!-- wp:paragraph --> <p>再结合栈中变量的分布,<img class="wp-image-364" style="width: 150px;" src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-02-195929.png" alt="">,当v14等于10的时候,就会调用v12中存的函数,所以我们可以考虑改变v12的指向的函数位置,这个很容易,只要覆盖掉就可以了</p> <!-- /wp:paragraph --> <!-- wp:image {"align":"center","id":367,"sizeSlug":"large"} --> <div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-02-202307.png" alt="" class="wp-image-367"/></figure></div> <!-- /wp:image --> <!-- wp:paragraph --> <p>看一眼exp,'a'*0x44+p32(..)(注意!必须是a~z中的字母,不然没法通过switch)把v12指向的函数地址变为了有cat flag的函数,然后通过'a'*0x20+p32(0x8)把v14修改为8,之后的for中就可以把v14变成10了。当然0x5-0x7也是(应该)可以的(0x6是可以的,我测了),那么为什么不一开始直接赋给v14 10或9呢,这是因为0x9和0x分别是</p> <!-- /wp:paragraph --> <!-- wp:image {"id":369,"sizeSlug":"large"} --> <figure class="wp-block-image size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-02-203043.png" alt="" class="wp-image-369"/></figure> <!-- /wp:image --> <!-- wp:paragraph --> <p>scanf读到这些的时候就停了,然后就玩完了,所以必须要是0x8(或者之前一点)</p> <!-- /wp:paragraph --> <!-- wp:image {"id":370,"sizeSlug":"large"} --> <figure class="wp-block-image size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/屏幕截图-2020-11-02-203220.png" alt="" class="wp-image-370"/></figure> <!-- /wp:image --> <!-- wp:paragraph --> <p>这个还挺恶心的,所以要留点心。</p> <!-- /wp:paragraph --> 最后修改:2020 年 12 月 30 日 05 : 25 PM © 允许规范转载 赞赏 如果觉得我的文章对你有用,那听听上面我喜欢的歌吧 ×Close 赞赏作者 扫一扫支付 支付宝支付 微信支付