CTF Network » 履歴 » バージョン 2
kanata, 2025/05/10 09:23
| 1 | 1 | kanata | # CTF Network |
|---|---|---|---|
| 2 | |||
| 3 | 2 | kanata | {{last_updated_at}} |
| 4 | |||
| 5 | {{>toc}} |
||
| 6 | 1 | kanata | |
| 7 | # Command gadgets |
||
| 8 | |||
| 9 | ## ncat |
||
| 10 | |||
| 11 | ``` |
||
| 12 | nc ホスト名 ポート番号 |
||
| 13 | ``` |
||
| 14 | |||
| 15 | ### eオプションを使うために、ソースからコンパイルする |
||
| 16 | |||
| 17 | eオプション:nc の標準入出力を、 指定したコマンドにリダイレクトするためのオプション |
||
| 18 | |||
| 19 | make 時に「DGAPING_SECURITY_HOLE」を指定しないと -e オプションが使えないという情報を見かけるけど、不要っぽい。 |
||
| 20 | [公式サイト](http://netcat.sourceforge.net/)からダウンロードした後 |
||
| 21 | |||
| 22 | ``` |
||
| 23 | # tar zxvf netcat-0.7.1.tar.gz |
||
| 24 | # cd netcat-0.7.1 |
||
| 25 | # ./configure --prefix=/usr/local |
||
| 26 | # make |
||
| 27 | ``` |
||
| 28 | |||
| 29 | 動作確認(サーバ側) |
||
| 30 | |||
| 31 | ``` |
||
| 32 | # cd src |
||
| 33 | # ./netcat -l -p 1234 -e /bin/sh |
||
| 34 | ``` |
||
| 35 | |||
| 36 | 動作確認(クライアント側) |
||
| 37 | |||
| 38 | ``` |
||
| 39 | # ./netcat localhost 1234 |
||
| 40 | ``` |
||
| 41 | |||
| 42 | ### ncコマンドでTCP proxyを動かしながら記録する |
||
| 43 | |||
| 44 | 名前付きパイプを作る必要がある |
||
| 45 | |||
| 46 | ``` |
||
| 47 | $ mkfifo hoge |
||
| 48 | $ /usr/bin/nc -l 127.0.0.1 5555 < hoge | tee -a in | /usr/bin/nc example.com 80 | tee -a out > hoge |
||
| 49 | ``` |
||
| 50 | |||
| 51 | ### sslを利用する |
||
| 52 | |||
| 53 | SSLで通信を行わせる場合は、サーバ・クライアントともに「–ssl」オプションを付与する必要がある点に注意。 |
||
| 54 | |||
| 55 | サーバ側 |
||
| 56 | |||
| 57 | ``` |
||
| 58 | $ nc -vl [ポート番号] --ssl |
||
| 59 | ``` |
||
| 60 | |||
| 61 | クライアント側 |
||
| 62 | |||
| 63 | ``` |
||
| 64 | $ nc -v [対象ホスト] [ポート番号] --ssl |
||
| 65 | ``` |
||
| 66 | |||
| 67 | ### webサーバへhttp-getリクエストを行う |
||
| 68 | |||
| 69 | ``` |
||
| 70 | $ echo -en "GET / HTTP/1.1\n\n" | nc [対象ホスト] 80 |
||
| 71 | ``` |
||
| 72 | |||
| 73 | ### ファイルを転送する |
||
| 74 | |||
| 75 | サーバ側からクライアント側にファイルを取得させる場合 |
||
| 76 | |||
| 77 | ``` |
||
| 78 | $ nc -l ポート番号 < 転送するファイルPATH # サーバ側 |
||
| 79 | $ nc 対象ホスト ポート番号 > 転送されたファイルを取得するPATH # クライアント側 |
||
| 80 | ``` |
||
| 81 | |||
| 82 | クライアント側からサーバ側にファイルを取得させる場合 |
||
| 83 | |||
| 84 | ``` |
||
| 85 | $ nc -l ポート番号 > 取得したファイルの保持先PATH # サーバ側 |
||
| 86 | $ nc 対象ホスト ポート番号 < 転送するファイルPATH # クライアント側 |
||
| 87 | ``` |
||
| 88 | |||
| 89 | ### ポート範囲を指定してスキャンを行う |
||
| 90 | |||
| 91 | ``` |
||
| 92 | $ nc -vz 対象ホスト ポート番号-ポート番号 |
||
| 93 | ``` |
||
| 94 | |||
| 95 | |||
| 96 | |||
| 97 | |||
| 98 | ## nmap |
||
| 99 | |||
| 100 | ``` |
||
| 101 | nmap 192.168.1.1 |
||
| 102 | nmap -sU 192.168.1.1 |
||
| 103 | nmap -A 192.168.1.1 |
||
| 104 | ``` |
||
| 105 | |||
| 106 | ### IPv4ホストを探索する |
||
| 107 | |||
| 108 | -nはDNS逆引きの無効化、-snはポートスキャンしない。 |
||
| 109 | |||
| 110 | ``` |
||
| 111 | # nmap -n -sn 192.168.0.0/24 |
||
| 112 | ``` |
||
| 113 | |||
| 114 | ### LAN内のIPv6ホストを探索する |
||
| 115 | |||
| 116 | LAN内の全ホストを表すマルチキャストアドレスff02::1にICMP pingを送る。 -vは詳細表示。 |
||
| 117 | |||
| 118 | ``` |
||
| 119 | # nmap -v -n -sn --script targets-ipv6-multicast-echo |
||
| 120 | ``` |
||
| 121 | |||
| 122 | ### 特定のホストをポートスキャンする |
||
| 123 | |||
| 124 | -sSVCはSYN scanの指定とバージョン情報の調査と標準NSEスクリプトの実行、-OはOS推測、-p-は0から65535までの全ポートをスキャン、-T4はスキャン速度を上げる。 |
||
| 125 | |||
| 126 | ``` |
||
| 127 | # nmap -v -sSVC -O -p- -T4 localhost |
||
| 128 | ``` |
||
| 129 | |||
| 130 | ### HTTPサーバ上のファイルを探索する |
||
| 131 | |||
| 132 | /robots.txtや/phpmyadmin/などのよく知られたパスを探索する。 |
||
| 133 | |||
| 134 | ``` |
||
| 135 | # nmap -v --script http-enum localhost -p 80 |
||
| 136 | ``` |
||
| 137 | |||
| 138 | ### サブドメインを辞書攻撃で探索する |
||
| 139 | |||
| 140 | www以外のサブドメインを辞書攻撃で探索する。 |
||
| 141 | |||
| 142 | ``` |
||
| 143 | # nmap -v --script dns-brute www.example.com |
||
| 144 | ``` |
||
| 145 | |||
| 146 | ### IPアドレスの所有者を調べる |
||
| 147 | |||
| 148 | IPアドレスが割り当てられている組織を表示する。 |
||
| 149 | |||
| 150 | ``` |
||
| 151 | # nmap -v --script whois-ip www.example.com |
||
| 152 | ``` |
||
| 153 | |||
| 154 | ### 同一IPアドレスを持つ他のドメインを調べる |
||
| 155 | |||
| 156 | オンラインデータベースにアクセスし、同じIPアドレスに向けられた他のドメインを調べる。 |
||
| 157 | |||
| 158 | ``` |
||
| 159 | # nmap -v --script hostmap-bfk www.example.com |
||
| 160 | ``` |
||
| 161 | |||
| 162 | |||
| 163 | |||
| 164 | |||
| 165 | ## snmpget |
||
| 166 | |||
| 167 | snmpget -v 1 -c コミュニティ名 ホスト OID... |
||
| 168 | |||
| 169 | ``` |
||
| 170 | snmpget -v 1 -c public localhost system.sysUptime.0 system.sysName.0 |
||
| 171 | ``` |
||
| 172 | |||
| 173 | ## tshark |
||
| 174 | |||
| 175 | tsharkは通信の状態をGUIで解析することのできるWiresharkのCUI版です。 |
||
| 176 | |||
| 177 | |||
| 178 | 「-D」オプションでインターフェイスを調べる |
||
| 179 | |||
| 180 | ``` |
||
| 181 | # tshark -D |
||
| 182 | ``` |
||
| 183 | |||
| 184 | キャプチャする(-i 1 はインタフェース確認した際に表示されたeth0に対応した番号) |
||
| 185 | |||
| 186 | ``` |
||
| 187 | # tshark -i 1 -w packet.pcap |
||
| 188 | # tshark -i 1 -f 'host 101.111.73.127' -w packet.pcap |
||
| 189 | # tshark -i 1 -f 'port 53' -w packet.pcap |
||
| 190 | # tshark -i 1 -f 'port 80 and tcp' -w packet.pcap |
||
| 191 | # tshark -i 1 -f 'host www.example.com and not port 80' -w packet.pcap |
||
| 192 | ``` |
||
| 193 | |||
| 194 | 細かく出すには-V |
||
| 195 | |||
| 196 | ``` |
||
| 197 | # tshark -i 1 -V -f 'port 53' |
||
| 198 | ``` |
||
| 199 | |||
| 200 | パケットダンプは-x |
||
| 201 | |||
| 202 | ``` |
||
| 203 | # tshark -i 1 -x -f 'port 53' |
||
| 204 | ``` |
||
| 205 | |||
| 206 | 読み込みは-r |
||
| 207 | |||
| 208 | ``` |
||
| 209 | # tshark -r packet.pcap |
||
| 210 | ``` |
||
| 211 | |||
| 212 | 出力形式を細かく指定できるけど、そんなことするよりかは、普通にWireshark使った方がいいと思う。 |
||
| 213 | http://assimane.blog.so-net.ne.jp/2011-01-08 |
||
| 214 | |||
| 215 | ふるつき - tsharkメモ |
||
| 216 | https://furutsuki.hatenablog.com/entry/2016/02/23/155655 |
||
| 217 | |||
| 218 | |||
| 219 | |||
| 220 | |||
| 221 | |||
| 222 | ## tcpdump |
||
| 223 | |||
| 224 | A tcpdump Primer with Examples |
||
| 225 | https://danielmiessler.com/study/tcpdump/#examples |
||
| 226 | |||
| 227 | |||
| 228 | |||
| 229 | |||
| 230 | ## 証明書を取得するワンライナー |
||
| 231 | |||
| 232 | ``` |
||
| 233 | echo Q | openssl s_client -connect raintrees.net:443 |openssl x509 -text |
||
| 234 | ``` |
||
| 235 | |||
| 236 | ## サーバと連続でやりとりするシェルスクリプト |
||
| 237 | |||
| 238 | 以下は、サーバからもらった計算式を計算して、送り返している例 |
||
| 239 | |||
| 240 | ``` |
||
| 241 | #!/bin/sh |
||
| 242 | |||
| 243 | exec 5<>/dev/tcp/[host]/[port] |
||
| 244 | |||
| 245 | for I in {1..101} |
||
| 246 | do |
||
| 247 | cat 0<&5>test.txt & |
||
| 248 | sleep 1 |
||
| 249 | pkill cat |
||
| 250 | WORD=`cat test.txt|tail -1|sed 's/=//g'` |
||
| 251 | ANSWER=`ecgo ${WORD}|bc` |
||
| 252 | echo ${ANSWER} > &5 |
||
| 253 | echo Debug [${I}] ${WORD} '=' ${ANSWER} |
||
| 254 | done |
||
| 255 | |||
| 256 | exit 0 |
||
| 257 | ``` |
||
| 258 | |||
| 259 | > 余談だが、これ系の問題で、数値がローマ数字だったり漢数字だったりするパターンがある |
||
| 260 | > numconvコマンドを使うと一発で変換してくれる |
||
| 261 | |||
| 262 | ## サーバと連続でやりとりするPythonスクリプト |
||
| 263 | |||
| 264 | 以下は、サーバからもらった計算式を計算して、送り返している例 |
||
| 265 | |||
| 266 | ```python |
||
| 267 | import socket |
||
| 268 | |||
| 269 | sock=socket.socket(socket.AF_INET,socket.SOCKET_STREAM) |
||
| 270 | sock.connect(('[host]',[port])) |
||
| 271 | |||
| 272 | for num in range(100): |
||
| 273 | content=sock.recv(10240) |
||
| 274 | if len(content) == 0: |
||
| 275 | break |
||
| 276 | |||
| 277 | print content |
||
| 278 | if '=' in content: |
||
| 279 | func = content.split('=')[0] |
||
| 280 | answer = eval(func) |
||
| 281 | print answer |
||
| 282 | s.send(str(answer)+'\n') |
||
| 283 | ``` |
||
| 284 | |||
| 285 | ## サーバと連続でやりとりするPythonスクリプト(別解) |
||
| 286 | |||
| 287 | ```python |
||
| 288 | import socket |
||
| 289 | |||
| 290 | server='192.168.100.100',12345 |
||
| 291 | s=socket.socket() |
||
| 292 | s.connect(server) |
||
| 293 | |||
| 294 | for i in range(100) |
||
| 295 | exp = recv(1024) |
||
| 296 | print exp, |
||
| 297 | ans=eval(exp.split('\n')[1][:-1]) |
||
| 298 | print ans |
||
| 299 | s.send(str(ans)+'\n') |
||
| 300 | print s.recv(1024) |
||
| 301 | |||
| 302 | ``` |
||
| 303 | |||
| 304 | ## サーバと連続でやりとりするPythonスクリプト(雛形) |
||
| 305 | |||
| 306 | ```python |
||
| 307 | import socket |
||
| 308 | |||
| 309 | def solve(data): |
||
| 310 | 解法処理を書く |
||
| 311 | return '処理結果 |
||
| 312 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
||
| 313 | s.connect(('123.45.67.89', 12345)) #ホスト名とポート番号 |
||
| 314 | for i in range(100): |
||
| 315 | s.send(solve(s.recv(1024))) #読んで説いて返答 |
||
| 316 | print s.recv(1024) #フラグ表示 |
||
| 317 | |||
| 318 | ``` |
||
| 319 | |||
| 320 | > 余談だが、SymPyを使うと方程式も解ける[実例](https://gist.github.com/jellyfish26/f13dd67ee979eb6c3ccd50deba6b03df) |
||
| 321 | |||
| 322 | ## HTTP通信 GET するPythonスクリプト |
||
| 323 | |||
| 324 | ```python |
||
| 325 | import urllib |
||
| 326 | |||
| 327 | s = urllib.urlopen('http://www.yahoo.co.jp/') |
||
| 328 | html = s.read() |
||
| 329 | s.close() |
||
| 330 | print html |
||
| 331 | ``` |
||
| 332 | |||
| 333 | ## HTTP通信 POST するPythonスクリプト |
||
| 334 | |||
| 335 | ```python |
||
| 336 | import urllib, urllib2 |
||
| 337 | |||
| 338 | data = urllib.urlencode({'name': 'admin', 'password': 'H4ck3r'}) |
||
| 339 | s = urllib2.urlopen('http://www.../login', data) |
||
| 340 | html = s.read() |
||
| 341 | print html |
||
| 342 | ``` |
||
| 343 | |||
| 344 | ## 外部コマンド実行 するPythonスクリプト |
||
| 345 | |||
| 346 | ```python |
||
| 347 | import subprocess |
||
| 348 | |||
| 349 | p = subprocess.Popen(['cat', '-'], stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.STDOUT) |
||
| 350 | p.stdin.write('Hello¥n') |
||
| 351 | print p.stdout.readline() |
||
| 352 | ``` |
||
| 353 | |||
| 354 | ## ファイル入出力 するPythonスクリプト |
||
| 355 | |||
| 356 | ```python |
||
| 357 | src = open('/tmp/a', 'r') |
||
| 358 | dst = open('/tmp/b', 'w') |
||
| 359 | for line in src: |
||
| 360 | dst.write('# ' + line) |
||
| 361 | src.close() |
||
| 362 | dst.close() |
||
| 363 | data = open('/tmp/data', 'rb').read() |
||
| 364 | print data |
||
| 365 | ``` |
||
| 366 | |||
| 367 | ## 10分置きにローテーションと圧縮しながらパケットキャプチャする |
||
| 368 | |||
| 369 | ``` |
||
| 370 | # tcpdump -i eth0 "port 53" -w dnsclient-%F-%T.pcap -G 600 -z gzip -Z test_user & |
||
| 371 | ``` |
||
| 372 | |||
| 373 | オプション |
||
| 374 | |||
| 375 | ``` |
||
| 376 | -G rotate_seconds |
||
| 377 | -i interface |
||
| 378 | -w file |
||
| 379 | -z postrotate-command |
||
| 380 | -Z user |
||
| 381 | ``` |
||
| 382 | |||
| 383 | |||
| 384 | |||
| 385 | |||
| 386 | # Cheat Sheets |
||
| 387 | |||
| 388 | ネットワーク関係チートシート |
||
| 389 | http://packetlife.net/library/cheat-sheets/ |
||
| 390 | |||
| 391 | {{rawhtml(<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Wireshark チートシート part1 <a href="https://t.co/obIJ16Cu8N">pic.twitter.com/obIJ16Cu8N</a></p>— いちごろ@🐸 (@panda66104256) <a href="https://twitter.com/panda66104256/status/1251311853168295937?ref_src=twsrc%5Etfw">April 18 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>)}} |
||
| 392 | |||
| 393 | {{rawhtml(<blockquote class="twitter-tweet"><p lang="lt" dir="ltr">Patr2 <a href="https://t.co/KTWXssdG8K">pic.twitter.com/KTWXssdG8K</a></p>— いちごろ@🐸 (@panda66104256) <a href="https://twitter.com/panda66104256/status/1251313846079250432?ref_src=twsrc%5Etfw">April 18 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>)}} |
||
| 394 | |||
| 395 | |||
| 396 | # パケットのヘッダ構造 |
||
| 397 | |||
| 398 | http://ruffnex.oc.to/kenji/xrea/ipv4.txt |
||
| 399 | http://ruffnex.oc.to/kenji/xrea/checksum.txt |
||
| 400 | http://ruffnex.oc.to/kenji/xrea/udp_spoof.txt |
||
| 401 | http://ruffnex.oc.to/kenji/xrea/icmp.txt |
||
| 402 | http://ruffnex.oc.to/kenji/xrea/syn.txt |
||
| 403 | |||
| 404 | Ethernetヘッダ |
||
| 405 | http://j-net21.smrj.go.jp/develop/digital/entry/002-20081031-02.html |
||
| 406 | |||
| 407 | | 項目 | 長さ | |
||
| 408 | |---------------------------|---------------------------------| |
||
| 409 | |あて先MACアドレスフィールド|6バイト(48ビット) ↔16進数で12桁 | |
||
| 410 | |送信元MACアドレスフィールド|6バイト(48ビット) ↔16進数で12桁 | |
||
| 411 | |タイプフィールド |2バイト(16ビット) ↔16進数で 4桁 | |
||
| 412 | |||
| 413 | タイプ |
||
| 414 | - 0x0800 IP |
||
| 415 | - 0x0806 ARP |
||
| 416 | - 0x8035 RARP |
||
| 417 | - 0x8191 NetBIOS/NetBEUI |
||
| 418 | - 0x86DD IP6 |
||
| 419 | - 0x8863 PPPoE Discovery stage |
||
| 420 | - 0x8664 PPPoE Session stage |
||
| 421 | |||
| 422 | IPヘッダ |
||
| 423 | http://atnetwork.info/tcpip/tcpip83.html |
||
| 424 | |||
| 425 | ``` |
||
| 426 | 0 1 2 3 |
||
| 427 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
||
| 428 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 429 | |Version| IHL |Type of Service| Total Length | |
||
| 430 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 431 | | Identification |Flags| Fragment Offset | |
||
| 432 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 433 | | Time to Live | Protocol | Header Checksum | |
||
| 434 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 435 | | Source Address | |
||
| 436 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 437 | | Destination Address | |
||
| 438 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 439 | | Options | Padding | |
||
| 440 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 441 | ( RFC 791 より ) |
||
| 442 | ``` |
||
| 443 | | 項目 | 意味 | |
||
| 444 | |-------------------|---------------------------------------------------------------------| |
||
| 445 | | Version | バージョン。通常は IPv4 なので 4 だ。IPv6 の場合は 6 が設定される。 | |
||
| 446 | | IHL(Internet Header Length) | 32bits を 1 としてIPヘッダの長さを表す。この値によりパケットの中のどこからがデータなのかを計算する。| |
||
| 447 | | Type of Service(TOS) | 通信が混雑した場合のデータの優先順位を決める。あまり使われていないらしい。 | |
||
| 448 | | Total Length | IPヘッダとデータの合計の長さをバイト単位で表す。| |
||
| 449 | | Identification | IPがデータを分割したときに、もともと同じデータであったことを示すための識別子。| |
||
| 450 | | Flags | IPパケットの分割に関する情報を格納。 | |
||
| 451 | | Flagment Offset | データを分割した際にこのデータが全体のどの位置にいるかを示す。 | |
||
| 452 | | Time to Live(TTL) | データの寿命を表す。ルータを通るたびにこの値が 1 づつ減らされ 0 になると破棄される。| |
||
| 453 | | Protocol | 上位プロトコルが何か?を格納するフィールド。Linux や Unix なら /etc/protocols ファイルに対応番号が書かれてある。 | |
||
| 454 | | Header Checksum | IPヘッダが壊れていないかどうかを判断するチェックサムフィールド。 | |
||
| 455 | | Source Address | データの送り元のIPアドレス | |
||
| 456 | | Destination Address | データの送り先(宛先)のIPアドレス | |
||
| 457 | | Options | 可変長のオプションフィールド。あまり使用しない。 | |
||
| 458 | | Padding | IPヘッダは 32bits の整数倍である必要があるのでそのための穴埋めフィールド。 | |
||
| 459 | |||
| 460 | TCPヘッダ |
||
| 461 | http://atnetwork.info/tcpip/tcpip29.html |
||
| 462 | |||
| 463 | ``` |
||
| 464 | 0 1 2 3 |
||
| 465 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
||
| 466 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 467 | | Source Port | Destination Port | |
||
| 468 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 469 | | Sequence Number | |
||
| 470 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 471 | | Acknowledgment Number | |
||
| 472 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 473 | | Data | |U|A|P|R|S|F| | |
||
| 474 | | Offset| Reserved |R|C|S|S|Y|I| Window | |
||
| 475 | | | |G|K|H|T|N|N| | |
||
| 476 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 477 | | Checksum | Urgent Pointer | |
||
| 478 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 479 | | Options | Padding | |
||
| 480 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 481 | | data | |
||
| 482 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
||
| 483 | TCP Header Format |
||
| 484 | ( RFC 793 より ) |
||
| 485 | |||
| 486 | ``` |
||
| 487 | |||
| 488 | | 項目 | 意味 | |
||
| 489 | |------------------|----------------------------| |
||
| 490 | | Source Port | 送信元が使用するポート番号 | |
||
| 491 | | Destination Port | 送信先(宛先)のポート番号 | |
||
| 492 | | Sequence Number | シーケンス制御の行うために使用するシーケンス番号。3 way handshake による通信の確立を行うときに使用する。 | |
||
| 493 | | Acknowledgment Number | 再送制御を行うために使用するACK番号。 | |
||
| 494 | | Data Offset | TCPヘッダの長さを4bytes(32bits)単位で表したもの。 | |
||
| 495 | | Reserved | 予約フィールドと呼ばれる場所。Flags が今後増えたときにも対応できるようにしたものだと思う。実質、意味は無し。 | |
||
| 496 | | Flags(URG,ACK,PSH,RST,SYN,FIN) | メッセージの種別を表すフラグの格納する場所。| |
||
| 497 | ||URG: 現在は使われていない。 | |
||
| 498 | ||ACK: 応答確認パケットであることを示す。コネクション開設時に使用される。 | |
||
| 499 | ||PSH: バッファリングするかどうかの判定。1,受信後バッファリングしない。0,バッファリングできる。| |
||
| 500 | ||RST: コネクションを強制的にリセットする。強制切断。| |
||
| 501 | ||SYN: 接続要求パケットであることを示す。其以外は 0 である。| |
||
| 502 | ||FIN: パケットが切断要求パケットであることを示す。其以外は 0 である。| |
||
| 503 | | Window | Window制御で使用するサイズを格納する。 | |
||
| 504 | | Checksum | TCPデータが壊れていないかを判断するチェックサムフィールド。IPヘッダとは異なり擬似ヘッダを使用する。 | |
||
| 505 | | Urgent Pointer | TCP Flags の URG が 1 になっている場合に使用されるらしいがURG 自体あまり使われてないのでよくわからない。 | |
||
| 506 | |||
| 507 | UDPヘッダ |
||
| 508 | http://atnetwork.info/tcpip/tcpip30.html |
||
| 509 | |||
| 510 | ``` |
||
| 511 | 0 7 8 15 16 23 24 31 |
||
| 512 | +--------+--------+--------+--------+ |
||
| 513 | | Source | Destination | |
||
| 514 | | Port | Port | |
||
| 515 | +--------+--------+--------+--------+ |
||
| 516 | | | | |
||
| 517 | | Length | Checksum | |
||
| 518 | +--------+--------+--------+--------+ |
||
| 519 | | | |
||
| 520 | | data | |
||
| 521 | +-----------------------------------+ |
||
| 522 | UDP Header Format |
||
| 523 | ( RFC 768 より ) |
||
| 524 | |||
| 525 | ``` |
||
| 526 | |||
| 527 | | 項目 | 意味 | |
||
| 528 | |------------------|------------------------------------| |
||
| 529 | | Source Port | 送信元が使用するポート番号 | |
||
| 530 | | Destination Port | 送信先(宛先)のポート番号 | |
||
| 531 | | Length | UDPヘッダを含めたUDPデータの長さ。 | |
||
| 532 | | Checksum | チェックサムフィールド | |
||
| 533 | |||
| 534 | # Ether - IP - TCP/UDP 以外の通信プロトコル |
||
| 535 | |||
| 536 | ## gdb(remort) |
||
| 537 | |||
| 538 | なんかSECCONの問題にあった気がする |
||
| 539 | |||
| 540 | ## USB - KeyBorad |
||
| 541 | |||
| 542 | [http://www.usb.org/developers/hidpage/Hut1_12v2.pdf](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) |
||
| 543 | |||
| 544 | よっちんのブログ - HackIT CTF 2017 Writeup - USB ducker (Foren 100) |
||
| 545 | http://yocchin.hatenablog.com/entry/2017/09/01/222100 |
||
| 546 | |||
| 547 | # USBの通信プロトコル |
||
| 548 | |||
| 549 | N->N->N - USB HID 1.11 を読む |
||
| 550 | http://d.hatena.ne.jp/hanya_orz/20140425/p1 |
||
| 551 | |||
| 552 | USBキーボードのキーコード |
||
| 553 | http://www2d.biglobe.ne.jp/~msyk/keyboard/layout/usbkeycode.html |
||
| 554 | |||
| 555 | # Misc |
||
| 556 | |||
| 557 | KEIROMICHI - IPアドレスから住所を検索できます。 |
||
| 558 | http://i.penguinweb.net/ |
||
| 559 | |||
| 560 | 坂井さんの簡易パケット操作ツール群(pkttools) |
||
| 561 | http://kozos.jp/software/pkttools.html |
||
| 562 | |||
| 563 | パケットエディタ(pcapも見れるよ!) |
||
| 564 | https://wireedit.com/ |
||
| 565 | |||
| 566 | Ostinato: パケット作成ツール。GUIで使いやすくて、負担テスト、パケット解析の勉強など |
||
| 567 | http://ostinato.org/ |
||
| 568 | |||
| 569 | labunix's blog - MACアドレスのOUIをローカルで調べるコマンドを作ってみる。 |
||
| 570 | http://labunix.hateblo.jp/entry/20190805/1565009988 |
||
| 571 | |||
| 572 | CURRYFINGER - SNI & Host header spoofing utility |
||
| 573 | https://dualuse.io/blog/curryfinger/ |
||
| 574 | |||
| 575 | >CDNの後ろにあるサーバを割り出すためのツール |
||
| 576 | >同様のツールにCloudFlairがある |
||
| 577 | |||
| 578 | PacketProxy |
||
| 579 | https://github.com/DeNA/PacketProxy |
||
| 580 | |||
| 581 | >HTTP/HTTPS通信だけでなく、より低レイヤーのTCP/UDPを利用したバイナリ通信にも対応した、オープンソースのローカルプロキシツール |
||
| 582 | |||
| 583 | The Ultimate PCAP |
||
| 584 | https://weberblog.net/the-ultimate-pcap/ |
||
| 585 | |||
| 586 | >いろんなプロトコルのpcapサンプル |
||
| 587 | |||
| 588 | パケットキャプチャで理解する TLS1.3 |
||
| 589 | https://zenn.dev/arailly/books/41061020f0cfaa |
||
| 590 | |||
| 591 | 東陽テクニカ > 情報通信 > エンジニアノート |
||
| 592 | https://www.toyo.co.jp/ict/contents/detail/engineernote.html |
||
| 593 | |||
| 594 | |||
| 595 | |||
| 596 | |||
| 597 | |||
| 598 | |||
| 599 | |||
| 600 | |||
| 601 | |||
| 602 | |||
| 603 | ## Wiresharks |
||
| 604 | |||
| 605 | Wireshark によるパケット解析講座 1: Wiresharkの表示列をカスタマイズする |
||
| 606 | https://unit42.paloaltonetworks.jp/unit42-customizing-wireshark-changing-column-display/ |
||
| 607 | |||
| 608 | Wireshark によるパケット解析講座 2: 脅威インテリジェンス調査に役立つフィルタリング設定 |
||
| 609 | https://unit42.paloaltonetworks.jp/using-wireshark-display-filter-expressions/ |
||
| 610 | |||
| 611 | Wireshark によるパケット解析講座 3: ホストとユーザーを特定する |
||
| 612 | https://unit42.paloaltonetworks.jp/using-wireshark-identifying-hosts-and-users/ |
||
| 613 | |||
| 614 | Wireshark によるパケット解析講座 4: Pcapからのオブジェクトのエクスポート |
||
| 615 | https://unit42.paloaltonetworks.jp/using-wireshark-exporting-objects-from-a-pcap/ |
||
| 616 | |||
| 617 | Wireshark によるパケット解析講座 5: Trickbot感染の調査 |
||
| 618 | https://unit42.paloaltonetworks.jp/wireshark-tutorial-examining-trickbot-infections/ |
||
| 619 | |||
| 620 | Wireshark によるパケット解析講座 6: Ursnif感染の調査 |
||
| 621 | https://unit42.paloaltonetworks.jp/wireshark-tutorial-examining-ursnif-infections/ |
||
| 622 | |||
| 623 | Wireshark によるパケット解析講座 7: Qakbot感染の調査 |
||
| 624 | https://unit42.paloaltonetworks.jp/tutorial-qakbot-infection/ |
||
| 625 | |||
| 626 | Wireshark によるパケット解析講座 8: HTTPSトラフィックの復号 |
||
| 627 | https://unit42.paloaltonetworks.jp/wireshark-tutorial-decrypting-https-traffic/ |
||
| 628 | |||
| 629 | Wireshark によるパケット解析講座 9: Dridex感染トラフィックの調査 |
||
| 630 | https://unit42.paloaltonetworks.jp/wireshark-tutorial-dridex-infection-traffic/ |
||
| 631 | |||
| 632 | Wireshark によるパケット解析講座 10: Emotet 感染トラフィックの調査 |
||
| 633 | https://unit42.paloaltonetworks.com/wireshark-tutorial-emotet-infection/ |
||
| 634 | |||
| 635 | Wireshark によるパケット解析講座 11: RDPトラフィックの復号 |
||
| 636 | https://unit42.paloaltonetworks.jp/wireshark-tutorial-decrypting-rdp-traffic/ |