Upload files to 'run-offline/sasaaageyooo'

This commit is contained in:
dragonmuffin 2023-08-28 17:05:50 +00:00
parent 4e7c16ab82
commit 30b5cd3c39
4 changed files with 153 additions and 0 deletions

View file

@ -0,0 +1,8 @@
FROM python:3.11-alpine
RUN pip3 install websockets
COPY server.py /srv/server.py
ENTRYPOINT ["/usr/local/bin/python3", "/srv/server.py"]
#ENTRYPOINT /bin/python3 /srv/server.py

View file

@ -0,0 +1,29 @@
services:
sasageyo-back:
build: .
container_name: sasageyo-back
networks:
- sasageyo-tie
nginx:
image: nginx:1.25.2-alpine-slim
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./html:/var/www/html:ro
#hports:
# - 8080:8080
labels:
- traefik.enable=true
- traefik.http.routers.sasaaageyooo.tls=false
- traefik.http.routers.sasaaageyooo.rule=Host(`sasaaageyooo.ctf.sch9.ru`)
- traefik.http.routers.sasaaageyooo.service=sasaaageyooo
- traefik.http.services.sasaaageyooo.loadbalancer.server.port=8080
networks:
- traefik-proxy-net
- sasageyo-tie
networks:
sasageyo-tie:
name: sasageyo-tie
traefik-proxy-net:
name: traefik-proxy-net

View file

@ -0,0 +1,47 @@
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
server{
listen 8080;
location /train{
proxy_pass http://sasageyo-back:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
location /get-flag{
proxy_pass http://sasageyo-back:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
location /{
root /var/www/html;
}
}
}

View file

@ -0,0 +1,69 @@
import asyncio
#import time
import random as rnd
import websockets
import json
flag='ctf{1_l0v3_4774ck_0n_7174n}'
async def game(ws,path):
if('train' in path):
train=True
else:
train=False
if train:
state=[3,5,7]
else:
state=[rnd.randint(1,300) for i in range(300)]
await ws.recv()
await ws.send(json.dumps({'state':state}))
while(state!=[0]*len(state)):
try:
data = json.loads(await ws.recv())
index=data['index']
value=data['value']
if(state[index]<value or value<1):
0/0
state[index]-=value
except Exception as e:
await ws.send(json.dumps({'msg':'not valid request'}))
return
if(state==[0]*len(state)):
if(train):
await ws.send(json.dumps({'msg':'Вы победили. Теперь победите в финальной битве'}))
else:
await ws.send(json.dumps({'msg':flag}))
return
x=0
for i in state:
x^=i
mask=x
while(mask&(mask-1)):
mask=mask&(mask-1)
if(x==0):
for i in range(len(state)):
if(state[i]!=0):
index=i
value=rnd.randint(1,state[i])
break
else:
for i in range(len(state)):
if(mask&state[i]):
index=i
value=state[i]-(state[i]^x)
state[index]-=value
await ws.send(json.dumps({'index':index,'value':value}))
start_server = websockets.serve(game, "0.0.0.0", 8000)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()