0%

[祥云杯2020]云比赛记录

[祥云杯2020]云比赛记录

前两天祥云杯师傅们大力输出,我大力划水看了一个题,今天比赛结束看wp开始学习

学习之前先批评一下这个比赛的py程度,可能是20w的烂钱太过诱人,导致大家的py程度前所未有的高,py的具体内容见这篇知乎回答
mbg.jpg

flaskbot

是先猜数字再SSTI,SSTI经典过滤,然后额外过了了通配符和flag
猜数字是在限制范围内二分猜50次,理论上必然猜对
但是我可以直接进行一个NAN的输入,很有意思的是NAN不大于任何数,也不小于任何数,但你把它当数字输入也不报错,这样子就直接过了猜数字
SSTI只会抄payload,过滤了一下没调通,抄的任意文件读能用,读了下源码看过滤,flag位置没找到,还是要拼字符串去执行命令
经典字符串加法过过滤
{{joiner.__init__.__globals__.__builtins__['__impo'+'rt__']('o'+'s')['po'+'pen']('c'+'at /super_secret_fl'+'ag.txt').read()}}

学习点

之前猜数字乱输的时候会报错,进debug界面,看了null的wp,任意文件读就可以直接读log文件获取PIN码,在debug界面直接RCE
这里读的是/var/log/app.log
不过这个是log默认目录吗,还是看了proc的cmdline知道log写到这了?

Command

经典命令注入,过滤比较多,可以使用经典管道符加base64命令执行
学习到的新技巧:

xargs参数输入

如果直接输入echo L2ZsYWc=|base64 -d|/bi?/ca?的话,等于是使用无参数的cat命令,echo的内容是在管道符中是以标准输入的形式传递的,可以在命令行里测试,这种情况下cat将会读取标准输入进行输出,就是输入什么输出什么,完全不能读文件

root@myserver:~# echo L2ZsYWc=|base64 -d|/bi?/ca?
/flagroot@myserver:~#

菜鸟教程的xargs简介有这么一句话,很直白

之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要

所以需要使用这个xargs命令,这个命令将标准输入作为命令行参数输入,这样子我们执行的命令就是cat /flag,而不是cat再标准输入flag了

root@myserver:~# echo L2ZsYWc=|base64 -d|xargs /bi?/ca?
flag{test}root@myserver:~#

~~比赛没打,后来看其他队伍的WP,好像`反引号也没过滤,那样的话就不需要xargs也行吧

sed读取文件

这个东西我真的不会用。。。印象里是个很难用的文本编辑软件,按行数或者规则增删查改之类的
但是还可以读文件真是太牛逼了

root@myserver:~# sed '' /flag
flag{test}root@myserver:~#

trick+1

剩下的题目没看云了也没用,咕咕咕