update directory system

This commit is contained in:
2024-11-07 21:52:26 +09:00
parent 1b8c1f4526
commit cd1703e22f
10 changed files with 7 additions and 245 deletions

27
week01/client.py Normal file
View File

@ -0,0 +1,27 @@
import socket
# Fill in the right target here
HOST = 'netsec.net.in.tum.de' # TODO
PORT = 20001 # TODO
def get_flag():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
sf = s.makefile('rw') # we use a file abstraction for the sockets
print(sf.readline().rstrip('\n'))
sf.write('admin\n')
sf.flush()
print(sf.readline().rstrip('\n'))
sf.write('password\n')
sf.flush()
print(sf.readline().rstrip('\n'))
print(sf.readline().rstrip('\n'))
sf.close()
s.close()
if __name__ == '__main__':
get_flag()

87
week01/server.py Normal file
View File

@ -0,0 +1,87 @@
#!/usr/bin/env python3
import dataclasses
import random
import string
import asyncio
import logging
import subprocess
import ast
from asyncio import StreamReader, StreamWriter
from typing import TypeVar, Callable
from pwn_utils import utils
from pwn_utils.utils import read_line_safe
log = logging.getLogger(__name__)
clients = {} # task -> (reader, writer)
def accept_client(client_reader: StreamReader, client_writer: StreamWriter):
task = asyncio.Task(handle_client(client_reader, client_writer))
clients[task] = (client_reader, client_writer)
def client_done(task):
del clients[task]
client_writer.close()
log.info('connection closed')
task.add_done_callback(client_done)
async def handle_client(client_reader: StreamReader, client_writer: StreamWriter):
try:
remote = client_writer.get_extra_info('peername')
if remote is None:
log.error('Could not get ip of client')
return
remote = '%s:%s' % (remote[0], remote[1])
log.info('new connection from: %s' % remote)
except Exception as e:
log.error('EXCEPTION (get peername): %s (%s)' % (e, type(e)))
return
try:
client_writer.write('Please enter username:\n'.encode())
await client_writer.drain()
username = await read_line_safe(client_reader)
if username != 'admin':
client_writer.write('Invalid username\n'.encode())
await client_writer.drain()
return
client_writer.write('Please enter password:\n'.encode())
await client_writer.drain()
password = await read_line_safe(client_reader)
if password != 'password':
client_writer.write('Invalid password\n'.encode())
await client_writer.drain()
return
client_writer.write('Welcome admin\n'.encode())
await client_writer.drain()
flag = subprocess.check_output('flag')
client_writer.write(flag)
await client_writer.drain()
except Exception as e:
utils.log_error(e, client_writer)
def main():
# start server
loop = asyncio.get_event_loop()
f = asyncio.start_server(accept_client, host=None, port=20001)
log.info('Server waiting for connections')
loop.run_until_complete(f)
loop.run_forever()
if __name__ == '__main__':
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s [%(module)s:%(lineno)d] %(message)s',
)
# "INFO:asyncio:poll took 25.960 seconds" is annyoing
logging.getLogger('asyncio').setLevel(logging.WARNING)
main()