<!--maybe id can help you locate the information--> <divid="info"><h2>比赛开始!</h2><h3><fontcolor="red">弯道向左,抓地力太小了!</font></h3></div> <formaction="/"method="POST"> <labelfor="driver">选手:</label> <inputtype="text"id="driver"name="driver"required><br><br> <labelfor="steering_control">方向控制:</label> <selectid="steering_control"name="steering_control"required> <optionvalue="-1">左</option> <optionvalue="0"selected>直行</option> <optionvalue="1">右</option> </select><br><br>
eval(int.to_bytes(0x636d616f686e69656e61697563206e6965756e63696165756e6320696175636e206975616e6363616361766573206164^8651845801355794822748761274382990563137388564728777614331389574821794036657729487047095090696384065814967726980153,160,"big",signed=True).decode().translate({ord(c):Nonefor c in"\x00"})) # what is it? defdecrypt(data:str): for x inrange(5): data = base64.b64encode(data).decode() # ummm...? It looks like it's just base64 encoding it 5 times? truely? return data
defdo_POST(self): try: ifself.path == "/login": body = self.rfile.read(int(self.headers.get("Content-Length"))) payload = json.loads(body) params = json.loads(decrypt(payload["params"])) print(params) if params.get("username") == "admin": self.send_response(403) self.end_headers() self.wfile.write(b"YOU CANNOT LOGIN AS ADMIN!") print("admin") return if params.get("username") == params.get("password"): self.send_response(403) self.end_headers() self.wfile.write(b"YOU CANNOT LOGIN WITH SAME USERNAME AND PASSWORD!") print("same") return hashed = gethash(params.get("username"),params.get("password")) for k,v in hashed_users.items(): if hashed == v: data = { "user":k, "hash":hashed, "flag": FLAG if k == "admin"else"flag{YOU_HAVE_TO_LOGIN_IN_AS_ADMIN_TO_GET_THE_FLAG}" } self.send_response(200) self.end_headers() self.wfile.write(json.dumps(data).encode()) print("success") return self.send_response(403) self.end_headers() self.wfile.write(b"Invalid username or password") else: self.send_response(404) self.end_headers() self.wfile.write(b"404 Not Found") except Exception as e: print(e) self.send_response(500) self.end_headers() self.wfile.write(b"500 Internal Server Error")
这里通过post请求传递参数,而且需要用户名和密码一样,但是是一个弱比较,如果完全相等也不行
1 2 3 4 5
print (int.to_bytes( 0x636d616f686e69656e61697563206e6965756e63696165756e6320696175636e206975616e6363616361766573206164 ^8651845801355794822748761274382990563137388564728777614331389574821794036657729487047095090696384065814967726980153,160, "big", signed=True).decode().translate({ord(c): None for c in "\x00"}))
defgethash(*items): c = 0 for item in items: if item isNone: continue c ^= int.from_bytes(hashlib.md5(f"{salt}[{item}]{salt}".encode()).digest(), "big") # it looks so complex! but is it safe enough? returnhex(c)[2:]
hashed_users = dict((k,gethash(k,v)) for k,v in users.items()) hashed = gethash(params.get("username"),params.get("password")) for k,v in hashed_users.items(): if hashed == v: data = { "user":k, "hash":hashed, "flag": FLAG if k == "admin"else"flag{YOU_HAVE_TO_LOGIN_IN_AS_ADMIN_TO_GET_THE_FLAG}" } self.send_response(200) self.end_headers() self.wfile.write(json.dumps(data).encode()) print("success") return
response = session.get(url) for i in range(1001): text = response.text if "moectf" intext: print (text) break; response = session.get (url + "/?id=" + str(i))
try{ echounserialize($after); }catch (Exception$e) { echo"Even Caused A Glitch..."; } ?> Your Movements: O:34:"Omg_It_Is_So_Cool_Bring_Me_My_Flag":2:{s:5:"Chant";s:15:"夺命十三枪";s:11:"Spear_Owner";s:6:"Nobody";} Far away from COOL...