0CTF Misc300(PolyQuine) WriteUp

Reading time ~1 minute

看到这题的题目确实是让我有点不敢相信,各种以为是自己理解错了题目的意思,一开始真的很难相信,程序可以这么玩……

我们先看看题目描述:

Different people see different me.
But I am always myself.
202.112.26.114:12321
Make the output of your program exactly the same as your source code.
All 5 correct required to get this flag
$python2 --version
Python 2.7.6
$python3 --version
Python 3.4.0
$gcc --version
gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
$ruby --version
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]
$perl --version
This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi

想要一个程序同时支持python2、python3、c、ruby、perl感觉就已经够难的了,竟然还要求每个程序的输出都是自身!

然后这题还有个简化版本,只要支持其中任何三种语言就好,好吧,不得不说这看起来一点也不简单,对于某些想要自己写的队友而言……

当然,这种题其实果断应该是Google大法好,最后队友在网上找到了这个,同时支持C、Ruby、Python、Perl、Brainfuck,于是果断手动将Brainfuck去掉(其实本来就有个不带Brainfuck的版本),然后交上去试了下,过了4个,但是python3过不了,然后拿python3跑下了,发现是语法问题,“print a%b,”这句在py3里显然是过不了的,加上括号改成形式的结局就是最后会多一个空行,此时py2、py3都是一样了。

于是问题来了,怎么解决这个空行的问题呢?

我当时的想法是,首先我们发现def printf那里是单独为python写的一段代码,于是乎我们就可以在这里做文章了,它整个代码的关键是第七行最后那一个printf的调用,而这里为python定义的printf也只是在那里调用了,于是,果断在这里截取字符串和参数,使得在最后的换行不输出,从而弥补print本身带来的换行,于是这题就这么愉快的过掉了,最后得到的程序在此,这里是用的那个本来就有个不带Brainfuck的版本改的,因为会短点,改完后一共420个字符

然后后来又听说了一个更好想的想法,也是对自己当时根本没往这里想醉了:既然print会多输出一个换行,那么我们用stdout的write不就好了么!

感觉这题就是很好的说明了Google的重要性,两题一共400分,要是自己写,只怕写到比赛结束也不一定能写出来了。

挂载网络文件夹后网络故障时文件操作命令卡死

挂载 NFS 或者 Samba 的时候,经常会由于网络故障导致挂载好的链接断掉。此时如果尝试进行 ls、cd、df 等各种命令,只要与此目录沾上边,就会卡住。如果使用了类似 oh-my-zsh 这种配置的,只要在网络目录中,弹出命令提示符前就会直接卡住。这个时候第一反应就是...… Continue reading

路由折腾记 第四弹

Published on September 02, 2017