为了促进室友一起进步,也为了锻炼一下自己的运维能力,特此用Django和apache反向代理搭了一个CTF平台(具体教程就先不贴了,毕竟用的都是github上的开源CMS)里面分享一些自己平时做过的,绕过的坑,或者是看writeup能复现出来的,觉得不太难,脑洞小,却很有价值的题,同时也为以后的自己行个方便。
平台的题我会不定期的写一些writeup,欢迎小伙伴们一起来玩
##平台地址http://ctf.pupiles.com
Web01的writeup
先右键查看源码
发现要传入三个参数,首先第一层绕过就是构造txt等于welcome to the bugkuctf,这里试了一下post和get方式都不能正确的传入数据,因为file_get_content需要一个文件变量,但是利用php://input就可以构造,猜测是php://input把变量存入了一个临时文件中,所以可以file_get到1
?txt=php://input
然后把welcome to the bugkuctf用post方式提交出去得到可以绕过第一层
然后第二层存在一个任意文件读取漏洞所以利用php://filter可以读取到hint.php的内容,这里就不贴用base64可以得到文件内容的原理了,网上一大堆。
base64解码可得到源码
就是要我们包含一个flag.php文件,然而index.php里又有preg_match不能直接读,但是注意到$password处有一个unserialize函数,所以可以根据hint.php进行反序列化构造(这里注意只能用一次php://filter去读文件)
最终payload
base64得出flag
flag{xxxxxxxxxxxxxxx}