Skip to content
This repository was archived by the owner on May 24, 2023. It is now read-only.

Latest commit

 

History

History
executable file
·
30 lines (17 loc) · 1.41 KB

Writeup.md

File metadata and controls

executable file
·
30 lines (17 loc) · 1.41 KB

脆弱性

選択肢2にFSBがある。

しかし、-D_FORTIFY_SOURCE=2を指定されているためleakしかできない。

解法

まずスタックにある__libc_start_main+234を読んでlibc leakをする。

他に道がないため、randで使われるseedをleakすることを考える。

https://code.woboq.org/userspace/glibc/stdlib/random.c.html#__random

を見ると、randtblという配列に乱数を生成するための情報が格納されるようだ。

それをgdbなどでオフセットを確認した後leakする。 (失敗してnullが入ることがあるので、その場合やり直す)

その後、乱数生成のアルゴリズムを作って過去8回のdice()の結果が1になるように調整できる練習の回数を求めればよい。

備考

  • やってることはFSBでleakするのみだが、randの実装を読む必要があるのでMediumにした。

    (初心者向けCTFということを考えればHard寄り?)

  • 選択肢2で最大値を10**7にしているのは計算リソースの制限。

    6**8 = 1679616 なので運が悪くても10**7の制限に引っ掛かるのは2-3回くらいだろう。

  • ld-linux-x86-64.so.2は配布しなくてもいいかも?

    動かない場合がありそうなので念のため配布するようにしたが、通常のpwnでは配布されないので混乱させてしまうかも。