经过几次XCTF的洗礼,迎来了第一次国际大赛0CTF,每次看Scoreboard都在仰望各位dalao,再回头看看自己手头上想了一早上还没有结果的题。
这是最终的排名,我大CMU的PPP战队是没发挥好嘛。
这是新手区的排名,找找sysu战队在哪儿。
Welcome - Misc
签到题。基本上就是去一个IRC聊天室,输入频道名称#0ctf2017,就能看到顶端挂着flag了。(做出了签到题好激动)
simplesqlin - Web
字面上是一个简单的SQL注入题,URL是http://202.120.7.203/index.php?id=1,参数id以GET方式传入。一般的注入尝试都失败了,原因在于这个题目使用了WAF,于是想到使用%00夹在各种SQL关键字中绕过。
首先利用union select找到SCHEMA_NAME,第二个字段中出现information_schema,news。
|
|
通过news找到TABLE_NAME,第二个字段出现flag, news,说明flag藏在flag表中。
|
|
最后得到flag。
|
|
Temmo’s Tiny Shop - Web
比赛的时候知道要买到hint才能进行下一步,但是普通账户注册完一进去只有4000块,而hint却要8000块,很尴尬。原来是要用到race condition才能刷钱买hint,刷钱脚本如下。原理在于后台对于买卖请求只会按照cookie进行标识,如果使用不同的cookie同时卖出一个物品的时候,请求就会顺利通过。
|
|
执行之后账户里会变成8000块钱,顺利买到hint。
|
|
hint为select flag from ce63e444b0d049e9c899c9a0336b3c59
。
怀疑orderby存在注入点。首先在商店里买两样东西,点search按钮,使用Burp Suite拦截数据包并更改GET请求中的order参数,具体思路是一个个匹配flag的字符,如果匹配到那么就以price排序,否则以name排序。
这里试验第一个字符是否为0,果然返回的商品以name排序。
|
|
再次试验第一个字符是否为f,返回的商品以price排序。
|
|
因此,最终脚本如下。
|
|
最后得到flag。
KoG - Web
这道题主要考察调试JS的能力。打开页面源码,可以发现这样一段JS代码。
|
|
可以以GET方式注入的参数是id。开两个网页进行比较,一个使用?id=1,一个使用?id=1 or 1=1,打开chrome开发者工具的JS单步调试器,发现在functionn.js的第7633行,如果存在非正常输入则变量13会为false,导致返回的ar参数只有’WrongBoy’。直接改JS代码令变量13为true绕过。
第二处不同在第7699行,如果存在非正常输入,即使已经改过了变量13,label也会变为12,正常输入的label为0。直接改JS代码令判断失效绕过。
之后就是一般流程的SQL注入,发现有0ctf的schema。
|
|
之后查到table名为fl4g,列名为hey。
|
|
|
|
最后查到flag。
|
|