cakectf 2021 jit4b
chall
省略
sol
このプログラムは各演算が定義され、それを好きなように組み合わせることができる。
今回の実装内容は、
- 関数を定義。
- INT_MINとINT_MAXを入力し、出力が0-2になるようにチェック。
- clientから$x$を受け取り、配列の長さ3(すべて3.14)のindexとして値を返却。
Flagを得る条件は、最終出力が3.14でない=配列外参照を起こすこと。
これは、簡単な数学で、演算が一定でないですね。(割り算のせい)
これを使っていきます。また、コードとして
1 | inline bool operator<=(const int& lhs, const Range& rhs) { |
なので、比較では最小比較ではrange.minと最大比較ではrange.maxで行っています。これもバグの一つですね。
例えば、INT_MIN/INT_MIN=1であるのに、INT_MAX/INT_MINでは0になりますねぇ、これってrangeはrange(1,0)
で逆転します。
ということは、-1
をかけてやることで、range(0,-1)
で範囲外参照を起こせそうです。
1 | from ptrlib import * |