449afc1bf0232367b2fc02594f17b3169f2cbf13
ctf/IERAE CTF 2024 writeup.md
| ... | ... | @@ -193,7 +193,7 @@ from predict_secret import predict_secret |
| 193 | 193 | if __name__ == '__main__': |
| 194 | 194 | process = subprocess.Popen( |
| 195 | 195 | # ['python3', '../challenge.py'], |
| 196 | - ['nc', '35.201.137.32', '19937'], |
|
| 196 | + ['nc', '192.0.2.1', '19937'], |
|
| 197 | 197 | stdin=subprocess.PIPE, |
| 198 | 198 | stdout=subprocess.PIPE, |
| 199 | 199 | stderr=subprocess.PIPE, |
| ... | ... | @@ -418,7 +418,7 @@ pwnは初挑戦! |
| 418 | 418 | gdbで変数の中身を覗くくらいはやったことがあったのだが、gdbだけでは難しいようで、`gdb-peda`というラッパーツールを使う。 |
| 419 | 419 | stackの中身を表示しながらデバッグできる。 |
| 420 | 420 | |
| 421 | -gdb-pedaの出力から`win`関数へのアドレスは(多分)分かった。 |
|
| 421 | +gdb-pedaの出力から`win`関数へのアドレスは(恐らく)分かった。 |
|
| 422 | 422 | どこかに不正な入力を入れ、バッファオーバーフローを起こし、stackのリターンアドレスを書き換えようとした。 |
| 423 | 423 | |
| 424 | 424 | ```c |
| ... | ... | @@ -436,8 +436,8 @@ if (nrow * ncol < nrow) { // this is integer overflow right? |
| 436 | 436 | } |
| 437 | 437 | ``` |
| 438 | 438 | |
| 439 | - |
|
| 440 | 439 | このチェックは、nrowを0とすればncolがどんな値でも通過できると思ったのだが、そうすると |
| 440 | + |
|
| 441 | 441 | ```c |
| 442 | 442 | for (unsigned long long int i=0; i<nrow; i++) { |
| 443 | 443 | for (unsigned long long int j=0; j<ncol; j++) { |
| ... | ... | @@ -447,3 +447,4 @@ for (unsigned long long int i=0; i<nrow; i++) { |
| 447 | 447 | ``` |
| 448 | 448 | のループが実行できず、SEGVは起こせないことに気が付いた。 |
| 449 | 449 | |
| 450 | +その後はstackの値を見ながら、scanfに入れる文字列を試していたのだがバッファオーバーフローしないのでギブアップ。 |
|
| ... | ... | \ No newline at end of file |