CSAW CTF 2020 - writeup
先週末にCSAW CTF 2020があり、またもやぼっちで出場してました。
2問解いて499位。普通に難しくてビビった。
以下、解いた問題とwriteup
Python ソケットプログラミングについての備忘
ソケットプログラミングは難しい…。
自分でいろいろコードを書いてて思ったので疑問とか書いておく。
TCP/IPに繋がる大事な部分だからちゃんと調べないといけないよね。
書いたコードは以下。
pythonにおけるソケットプログラミングでは、
- socketを作る
sock = socket.sockeet(socket.AF_INET, socket.SOCK_STREAM)
↓ - socketをアドレスにbindする
sock.bind(listen_ip, listen_port)
↓ - bindされたsocketをlisten状態にする
sock.listen()
↓ - socketへの接続を許可(accept)する
con, addr = sock.accept()
で、conに対してデータをやり取りする、ってのが一般な流れ。
ただ、sock.accept()に関してはちょっと難しい部分が多いように感じる。
python3の公式ドキュメントには、
socket.accept()
接続を受け付けます。
ソケットはアドレスにbind済みで、listen中である必要があります。
戻り値は(conn, address) のペアで、 conn は接続を通じてデータの送受信を行うための 新しい ソケットオブジェクト、 address は接続先でソケットにbindしているアドレスを示します。
accept()で実際にどのような動作をするのか詳しく調べられていない。
受け付けるタイミングっていうのは、いったいいつなんだろう。
LISTENしているポートに接続があった瞬間にaccept()を叩くことで、それが許可されるのか、
それともLISTENしているポートにaccept()を叩いておくことで、接続が許可されるのかわからない。
低水準ネットワークインターフェイスと呼ばれるように、ソケット周りに関してはOS周りのソケットAPIを 呼び出すため、もっとLinuxの知識を深める必要がありそう。
vmstatでhuman-readableな表記をする
最近Linuxサーバのパフォーマンスチューニングに熱中しています。
難しいし、やりすぎるとサーバが動かなくなるこの感覚、
ミニ四駆であったシャーシの肉抜きみたいなところありますね。(?)
パフォーマンスの確認、ということで vmstat でサクッとサーバの状態をチェックすることがあるんですが、 memory欄のfree欄、これ標準がキロバイト表記なので最近のクラウドでRAM16GBインスタンス!とかではめちゃ見ずらくなります。
これをメガバイト表記にするオプションはこちら。
vmstat -S m
ただし、vmstatのヘッダではメガバイト表記に直しているとは表示されないので、
見間違えないように…。
Webアプリを作っている①
先日、Webアプリを作ろう…とかうけうけと抜かしてしまったのでちゃんと作ることにした。
いーやマジで複雑になるとプログラムって意味わかんなくなるね。
今は全然複雑じゃないんだけども。 クソコードって自分でもわかるわ…。
続きを読む
Nginxのキャッシュについて(fastcgi_cache, proxy_cache)
Nginxのキャッシュは2つの種類があり、それぞれで動作が異なるんですよね。
たまーに設定しようとすると特性を忘れる傾向にあるのでメモ程度に。