WP - CISCN - 华北
web
include
最开始以为是session竞争,后来试了试pearcmd的文件包含,可以写入phpinfo
写到helloworld.php里。
1=system('cat /hahaiETVMOEsAsAQ446_fIa9');
flag{254c619397}
quiz with award
注册完以后,看到数字比大小,这应该有运算的点,先试了试纯比大小。。。&麻了
想到ssti,
{{.}}看到了参数,
.Guess, .Result
golang的不是很熟悉,尝试一下golang的ssti。
99{{if lt .Guess .Result}}{{.hh "111"}}{{end}}
让guess和result比大小,如果guess小于result,让他用不存在的.hh报错就不会扣分
然后用bp的intruder爆破去跑,赚够钱在买flag。
flag{f660e351e0}
Say Love Me
根据提示,访问/file后提示Check me my heart By url?
http://39.104.82.208:46825/file?url=file:///usr/local/tomcat/webapps/ROOT.war
下载源码
misc
the Kenoru's Arithmetic Classroom Revenge
1if 0else 32
用条件表达式直接绕过对字典的计算
接下来都是nb师弟们的了
crypto
Diophhantine
2020虎符CTF Crypto的Pell题目与此类似
通过https://www.alpertron.com.ar/QUAD.HTM得到该Pell方程的递推式即可,第一组解可以试出或爆破出
from pwn import *
from Crypto.Util.number import *
from hashlib import md5
import string
table = string.ascii_letters+string.digits
def get_xxxx(s0,s1):
for i in table:
for j in table:
for k in table:
for l in table:
XXXX=i+j+k+l
tmp=(XXXX+s0).encode("utf-8")
if md5(tmp).hexdigest()[:5]==s1:
return XXXX
sh = remote("39.104.82.208",57536)
L1 = sh.recvline(keepends=False)
s0 = str(L1[40:44],encoding="utf-8")
s1 = str(L1[-5:],encoding="utf-8")
x = get_xxxx(s0,s1)
sh.sendline(bytes(x,encoding="utf-8"))
sh.sendline(b"Y")
sh.sendline(b"Y")
sh.recvuntil(b"(x, y) where x > 0, y > 0}",drop=False)
x=[3]
y=[3]
def func(num):
i=1
while i < num:
xx = 3*x[i-1] + 4*y[i-1]
yy = 2*x[i-1] + 3*y[i-1]
x.append(xx)
y.append(yy)
i+=1
func(202)
for i in range(202):
sh.sendline(bytes(str(x[i]-1),encoding="utf-8"))
sh.sendline(bytes(str(y[i]-1),encoding="utf-8"))
sh.recvuntil(b"answer!",drop=False)
print(sh.recvline(keepends=False))
print(sh.recvline(keepends=False))
sh.close()
reverse
jsfuck
做了混淆的JS,基本上就是在倒换变量名
每一个函数都用到函数D,在D内部下断点,发现是一个按索引-116取变量表Y内部元素的函数,把表Ydump出来备查
师弟的图存的是本地的渣男可能在忙,联系上再要图
之后看检查flag的函数asdgasg,动调发现输入base64之后单字节异或了3,判断与D(119)即Y[3]是否相等,查表找到密文,异或3之后base64解密得到flag
flag{1dcca23355272056f04fe8bf20edfce0}