Loading... <!-- wp:paragraph --> <p>这道题考的其实不是pwn,应该说是Linux系统编程的知识。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>我啥都不会,看了别人的wp之后才知道一点。</p> <!-- /wp:paragraph --> <!-- wp:image {"align":"center","id":528,"sizeSlug":"large"} --> <div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/QQ截图20201117160130.png" alt="" class="wp-image-528"style=""></figure></div> <!-- /wp:image --> <!-- wp:paragraph --> <p>这个函数close了标准输出(close(1))和标准错误(close(2)),所以虽然我们有了shell,但是我们获得不了输出。然鹅我们可以通过exec 1>&0来把标准输出重定向到文件描述符0(标准输入),这个文件默认是开启的。这样我们就可以看到输出了。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>那么<code>exec 1>&0</code>是什么鬼呢,问一下男人<code>man exec</code>。</p> <!-- /wp:paragraph --> <!-- wp:image {"align":"center","id":529,"sizeSlug":"large"} --> <div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://www.cjovi.icu/usr/uploads/2020/11/QQ截图20201117161012.png" alt="" class="wp-image-529"style=""></figure></div> <!-- /wp:image --> <!-- wp:paragraph --> <p>男人好像不会说中文,看不是很懂。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>exec有两个作用</p> <!-- /wp:paragraph --> <!-- wp:list {"ordered":true} --> <ol><li>代替shell执行命令,区别是shell执行完之后会回到shell,而exec会直接退出。</li><li>文件重定向,也就是<code>exec 1>&0</code>这样将文件描述符为1的文件重定向到0上</li></ol> <!-- /wp:list --> <!-- wp:paragraph --> <p>好的,文件这个名词好像很迷惑。Linux将所有的东西都看作文件,即“一切皆文件”,标准输出流就是一个文件,标准输出就是输出到这个文件上,这是一种抽象,现在Linux还活的好好的,说明这种抽象是合理的。而内核为了高效的管理这些文件,就为他们设立了文件描述符,文件描述符一般是非负(小)整数,特别的,标准输入的文件描述符为0,标准输出的文件描述符为1,标准错误的文件描述符为2。由于这三个非常标准,所有程序是默认开启这几个文件的,不然就没法交换了嘛。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>这道题为了秀我们,就把标准输出的文件关了,所以我们把这个文件重定向到标准输入上,这样一切本来会写到标准输出的流就写到标准输出上了,我们就可以看到输出了。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>当然exec的语法很迷惑,我也不知道为啥要这么写,估计&就是取址的意思,这样就实现了重定向。</p> <!-- /wp:paragraph --> 最后修改:2020 年 12 月 30 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,那听听上面我喜欢的歌吧