ASLR+DEP+SSP, 使えるのはalphanumと' 'だけ.
argv[1]にある文字列について, cmd[X] = "id "; strcat(cmd, argv[1]); system(cmd);を実行する. アルファベットと数字('0''9', 'A''Z', 'a'~'z')でもスペース(0x20)でもない場合は終了.
~~CVE-2014-9585をつかってvdsoから攻めていくと予想. CVE-2014-9585はASLR有効下でもvdsoのアドレスのエントロピーに偏りがあるという脆弱性. これで, libcベースを推測して……, って手順だと思う.~~~
^違った
ulimit -m unlimitedでスタックのASLRを無効化できます.
canaryはsystem("id "+"AAAA...AA"+canary);になるように調整すればリーク可能かも. strlen(rbp_140h);なのでオッケー.
もしかしてcanaryに偏りがあるのかも?
- まず, systemがあるのでsystem("/bin/sh");をしたい.
- "/bin/sh"はlibcから引っ張ってくるのが一番楽.
- 別のパターンを考えると, ROP stager+shellcode, ret2libc, だけど結局はlibcのベースをみつける必要がある.
- ただ, 何をするにもそもそもcanaryがわからないとどうしようもない.
- canaryをリークするにはスタックベースを把握すべき
- writeとかそういうのでリークせねば
- ↑使えるの無いじゃん……
- もうこれリークできないならret2dl-resolveくらいしかないんじゃね??
- vsyscallのgadgetが0xffffffffff600808にあるっぽい
- strcat()が'\0'が使えないしクソw