menemukan variabel lingkungan dengan gdb, untuk mengeksploitasi buffer overflow
<p>saya harus mengeksploitasi buffer overflow yang sangat sederhana dalam program c++ yang rentan untuk penugasan dan saya tidak dapat menemukan variabel lingkungan shell.</p><p>saya belum pernah bekerja dengan bof sebelumnya, dan setelah membaca banyak pertanyaan serupa, posting, dll. saya punya informasi ini (koreksi saya jika salah):</p><ul> <li>program ini menyimpan variabel lingkungan dalam variabel global yang disebut <code>environ</code></li> <li> <p>saya dapat menemukan alamat variabel ini seperti ini:</p> <pre><code>(gdb) info variable environ all variables matching regular expression "environ": non-debugging symbols: 0xb7fd1b00 \_\_environ 0xb7fd1b00 \_environ 0xb7fd1b00 environ </code></pre></li> <li> <p>saya perlu menemukan <code>/bin/bash</code> string dalam variabel itu untuk meluncurkan shell (saya sudah mendapatkan sistem dan keluar dari alamat, saya hanya perlu rute ke shell). dan di sinilah saya tidak tahu harus berbuat apa. saya telah membaca tutorial gdb, tapi tetap saja tidak ada. <code>x/s 0xb7fd1b00</code> tidak menghasilkan sesuatu yang berguna.</p> </li> </ul>
<p><code>environ</code> adalah pointer ke pointer, karena memiliki tipe <code>char **environ</code>.</p><p>anda harus mencoba sesuatu seperti:</p><pre><code>(gdb) x/s *((char **)environ) 0xbffff688: "ssh\_agent\_pid=2107" (gdb) x/s *((char **)environ+1) 0xbffff69b: "shell=/bin/bash" </code></pre>
<p>jawaban ini sudah tua, tetapi sepertinya masih mendapatkan traffic. seperti disebutkan di bawah, ada alat bawaan di windows sekarang:</p><p>mulai → semua program → aksesori → alat sistem → monitor sumber daya (atau jalankan resmon.exe)</p><p>anda bisa mendapatkan info lebih lanjut di jawaban di bawah ini. sisa jawaban ini tidak lagi relevan.</p><hr><p> <a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx">process explorer</a> dari sysinternals akan memungkinkan anda mencari melalui pegangan dan dll. cari direktori dan cari tahu proses mana yang "menggunakan" folder tersebut.</p><p>dari sana, anda memiliki kemampuan untuk mematikan proses itu, atau hanya menutup pegangan file tertentu. pastikan apa yang anda lakukan saat menangani file ditangani secara langsung, dan pastikan itu tidak digunakan oleh beberapa proses penting.</p> <p>arsitektur innodb menuntut penggunaan empat tipe dasar halaman info</p><ul> <li>halaman data tabel</li> <li>halaman indeks tabel</li> <li>tabel metadata</li> <li> <a href="http://en.wikipedia.org/wiki/multiversion\_concurrency\_control"><strong> [~ # ~] mvcc [~ # ~] </strong></a> data (untuk mendukung isolasi transaksi dan <a href="http://en.wikipedia.org/wiki/acid"><strong> kepatuhan acid </strong></a> ) <ul> <li>segmen kembalikan</li> <li>batalkan spasi</li> <li>double write buffer (penulisan latar belakang untuk mencegah ketergantungan pada caching os)</li> <li>masukkan buffer (mengelola perubahan pada indeks sekunder yang tidak unik)</li> </ul> </li> </ul><p> <a href="http://www.scribd.com/doc/31337494/xtradb-innodb-internals-in-drawing"><strong> <em> lihat representasi pictorial dari ibdata1</em> </strong></a> </p><p>secara default, <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan. ini menyebabkan keempat jenis halaman info mendaratkan satu file bernama ibdata1. banyak orang mencoba menyebar data dengan membuat banyak file ibdata. ini dapat menyebabkan fragmentasi data dan halaman indeks.</p><p>inilah sebabnya saya sering <a href="https://stackoverflow.com/a/4056261/491757">merekomendasikan untuk membersihkan infrastruktur innodb, menggunakan file ibdata1 default dan tidak lebih</a> .</p><p>menyalin sangat berbahaya karena infrastruktur di mana innodb bekerja. ada dua infrastruktur dasar</p><ul> <li>innodb\_file\_per\_table dinonaktifkan</li> <li>innodb\_file\_per\_table diaktifkan</li> </ul><h1>innodb ( <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan)</h1><p>dengan <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan, semua jenis info innodb ini tinggal di dalam ibdata1. satu-satunya manifestasi dari setiap tabel innodb di luar ibdata1 adalah file .frm dari tabel innodb. menyalin semua data innodb sekaligus membutuhkan menyalin semua/var/lib/mysql.</p><p>menyalin tabel innodb individu sama sekali tidak mungkin. anda harus membuang mysql untuk mengekstrak dump tabel sebagai representasi logis dari data dan definisi indeks yang sesuai. anda kemudian akan memuat dump itu ke database lain di server yang sama atau server lain.</p><h1>innodb ( <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> diaktifkan)</h1><p>dengan <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> diaktifkan, data tabel dan indeksnya tinggal di folder database di sebelah file .frm. misalnya, untuk tabel db1.mytable, manifestasi dari tabel innodb di luar ibdata1 adalah:</p><ul> <li><code>/var/lib/mysql/db1/mytable.frm</code></li> <li><code>/var/lib/mysql/db1/mytable.ibd</code></li> </ul><h1>tablespace sistem <code>ibdata1</code></h1><p>semua metadata untuk db1.mytable masih berada di ibdata1 dan <em> sama sekali tidak ada jalan lain</em>. redo log dan data mvcc juga masih hidup dengan ibdata1.</p><p>ketika datang ke tabel fragmentasi, inilah yang terjadi pada ibdata1:</p><ul> <li><strong> <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> diaktifkan </strong>: anda dapat mengecilkan db1.mytables dengan <code>alter table db1.mytable engine=innodb;</code> atau <code>optimize table db1.mytable;</code>. ini menghasilkan /var/lib/mysql/db1/mytable.ibd secara fisik lebih kecil tanpa fragmentasi.</li> <li><strong> <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan </strong>: anda tidak dapat mengecilkan db1.mytables dengan <code>alter table db1.mytable engine=innodb;</code> atau <code>optimize table db1.mytable;</code> karena berada dengan ibdata1. menjalankan perintah mana pun sebenarnya, membuat tabel berdekatan dan lebih cepat untuk membaca dan menulis. sayangnya, itu terjadi pada akhir ibdata1. ini membuat ibdata1 tumbuh dengan cepat. <a href="https://stackoverflow.com/a/4056261/491757">ini sepenuhnya dibahas di pos pembersihan innodb saya</a> .</li> </ul><h1>peringatan (atau bahaya sebagai <a href="http://www.youtube.com/watch?v=rg0ochx16dg&amp;feature=related">robot akan mengatakan dalam lost in space</a> )</h1><p>jika anda berpikir untuk hanya menyalin file .frm dan .ibd, anda sejalan dengan dunia yang menyakitkan. menyalin file .frm dan .ibd dari tabel innodb hanya baik <strong> <em> jika dan hanya jika anda dapat menjamin bahwa id tablespace dari file .ibd cocok persis dengan entri tablespace id di metadata dari file ibdata1</em> </strong>.</p><p>saya menulis dua posting di dba stackexchange tentang konsep id tablespace ini</p><ul> <li> <a href="https://dba.stackexchange.com/questions/9500/table-compression-in-innodb/9555#9555">kompresi tabel dalam innodb?</a> (di bawah judul 'memulihkan database')</li> <li> <a href="https://dba.stackexchange.com/questions/6268/how-to-recover-an-innodb-table-whose-files-were-moved-around/6269#6269">cara memulihkan tabel innodb yang file-nya dipindahkan</a> </li> </ul><p>berikut ini adalah tautan yang sangat baik tentang cara memasang kembali file .ibd ke ibdata1 jika id tablespace tidak cocok: <a href="http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file">http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in- file</a> . setelah membaca ini, anda harus segera menyadari bahwa menyalin file .ibd benar-benar gila.</p><p>untuk innodb, anda hanya perlu memindahkan sesuatu ini</p><pre><code>create table db2.mytable like db1.mytable; insert into db2.mytable select * from db1.mytable; </code></pre><p>untuk membuat salinan tabel innodb.</p><p>jika anda memigrasikannya ke server db lain, gunakan mysqldump.</p><p>sehubungan dengan mencampur semua tabel innodb dari semua database, saya benar-benar dapat melihat kebijaksanaan dalam melakukannya. di perusahaan hosting db/web perusahaan saya, saya memiliki satu klien mysql yang memiliki tabel di satu basis data yang batasannya dipetakan ke tabel lain di basis data lain dalam instance mysql yang sama. dengan satu repositori metadata yang umum, itu membuat dukungan transaksional dan pengoperasian mvcc mungkin di beberapa basis data.</p> <p>docker awalnya menggunakan <a href="http://lxc.sourceforge.net/">linux containers</a> (lxc), tetapi kemudian beralih ke <a href="https://github.com/opencontainers/runc">runc</a> (sebelumnya dikenal sebagai<strong> libcontainer </strong>), yang berjalan dalam sistem operasi yang sama dengan host-nya. ini memungkinkannya untuk berbagi banyak sumber daya sistem operasi host. juga, ia menggunakan sistem file berlapis ( <a href="http://aufs.sourceforge.net/">aufs</a> ) dan mengelola jaringan.</p><p>aufs adalah sistem file berlapis, sehingga anda dapat memiliki bagian hanya baca dan bagian tulis yang digabungkan. seseorang dapat memiliki bagian umum dari sistem operasi sebagai hanya baca (dan dibagi di antara semua wadah anda) dan kemudian memberikan masing-masing wadah mount sendiri untuk ditulis.</p><p>jadi, katakanlah anda memiliki gambar kontainer 1 gb; jika anda ingin menggunakan vm penuh, anda harus memiliki 1 gb x jumlah vm yang anda inginkan. dengan docker dan aufs anda dapat berbagi sebagian besar 1 gb di antara semua wadah dan jika anda memiliki 1000 kontainer anda masih mungkin hanya memiliki sedikit lebih dari 1 gb ruang untuk wadah os (dengan asumsi mereka semua menjalankan gambar os yang sama) .</p><p>sistem tervirtualisasi lengkap mendapatkan set sumber daya sendiri yang dialokasikan untuk itu, dan melakukan pembagian minimal. anda mendapatkan lebih banyak isolasi, tetapi jauh lebih berat (membutuhkan lebih banyak sumber daya). dengan docker anda mendapatkan lebih sedikit isolasi, tetapi wadahnya ringan (membutuhkan lebih sedikit sumber daya). jadi anda dapat dengan mudah menjalankan ribuan kontainer pada host, dan itu bahkan tidak akan berkedip. coba lakukan itu dengan xen, dan kecuali anda memiliki host yang sangat besar, saya rasa itu tidak mungkin.</p><p>sistem virtualisasi penuh biasanya membutuhkan waktu beberapa menit untuk memulai, sedangkan wadah docker/lxc/runc membutuhkan waktu beberapa detik, dan seringkali bahkan kurang dari satu detik.</p><p>ada pro dan kontra untuk setiap jenis sistem tervirtualisasi. jika anda ingin isolasi penuh dengan sumber daya yang dijamin, \_ vm yang lengkap adalah cara untuk melakukannya. jika anda hanya ingin mengisolasi proses dari satu sama lain dan ingin menjalankan satu ton dari mereka pada host berukuran cukup, maka docker/lxc/runc tampaknya menjadi cara untuk pergi.</p><p>untuk informasi lebih lanjut, lihat <a href="http://web.archive.org/web/20150326185901/http://blog.dotcloud.com/under-the-hood-linux-kernels-on-dotcloud-part">set posting blog ini</a> yang melakukan pekerjaan dengan baik untuk menjelaskan cara kerja lxc.</p><blockquote> <p>mengapa menyebarkan perangkat lunak ke gambar buruh pelabuhan (jika itu istilah yang tepat) lebih mudah daripada hanya menggunakan lingkungan produksi yang konsisten?</p> </blockquote><p>menyebarkan lingkungan produksi yang konsisten lebih mudah diucapkan daripada dilakukan. bahkan jika anda menggunakan alat seperti <a href="https://en.wikipedia.org/wiki/chef\_%28software%29">chef</a> dan <a href="https://en.wikipedia.org/wiki/puppet\_%28software%29">wayang</a> , selalu ada pembaruan os dan hal-hal lain yang berubah antara host dan lingkungan.</p><p>docker memberi anda kemampuan untuk memotret os menjadi gambar yang dibagikan, dan membuatnya mudah untuk digunakan pada host docker lainnya. secara lokal, dev, qa, prod, dll .: semua gambar yang sama. tentu anda bisa melakukan ini dengan alat lain, tetapi tidak semudah atau cepat.</p><p>ini bagus untuk pengujian; katakanlah anda memiliki ribuan tes yang perlu terhubung ke database, dan setiap tes membutuhkan salinan asli dari database dan akan membuat perubahan pada data. pendekatan klasik untuk ini adalah mereset basis data setelah setiap pengujian baik dengan kode khusus atau dengan alat seperti <a href="https://flywaydb.org/">flyway</a> - ini bisa sangat memakan waktu dan berarti tes harus dijalankan secara seri. namun, dengan docker anda bisa membuat gambar dari database anda dan menjalankan satu contoh per tes, dan kemudian menjalankan semua tes secara paralel karena anda tahu mereka semua akan berjalan melawan snapshot yang sama dari database. karena tes berjalan secara paralel dan dalam wadah docker, mereka dapat menjalankan semua pada kotak yang sama pada waktu yang sama dan harus menyelesaikan lebih cepat. coba lakukan itu dengan vm penuh.</p><p>dari komentar ...</p><blockquote> <p>menarik! saya kira saya masih bingung dengan gagasan &quot;snapshot [ting] os&quot;. bagaimana seseorang melakukannya tanpa, membuat gambar os?</p> </blockquote><p>baiklah, mari kita lihat apakah saya bisa menjelaskan. anda mulai dengan gambar dasar, dan kemudian membuat perubahan anda, dan melakukan perubahan itu menggunakan buruh pelabuhan, dan itu membuat gambar. gambar ini hanya berisi perbedaan dari pangkalan. ketika anda ingin menjalankan gambar anda, anda juga membutuhkan basis, dan lapisan gambar anda di atas basis menggunakan sistem file berlapis: seperti yang disebutkan di atas, docker menggunakan aufs. aufs menggabungkan lapisan yang berbeda bersama-sama dan anda mendapatkan apa yang anda inginkan; anda hanya perlu menjalankannya. anda dapat terus menambahkan lebih banyak gambar (lapisan) dan itu akan terus menyimpan hanya diff. karena docker biasanya membangun di atas gambar yang sudah jadi dari <a href="https://registry.hub.docker.com/">registry</a> , anda jarang harus &quot;memotret&quot; sendiri seluruh os.</p> <p>aku akan menusuk pertanyaanmu kemarin, tapi kupikir aku harus memikirkannya terlebih dahulu.</p><p>saya benar-benar tidak bisa memberi tahu anda apa "fungsi lain" yang harus anda berikan untuk pengguna anda. saya tidak terpisah dari tim anda. sepertinya anda memaku sebagian besar dari mereka, tetapi pada akhirnya saya tidak dapat membuat keputusan atau memberikan saran ketika kami benar-benar tidak memiliki perincian lengkap tentang apa yang dilakukan aplikasi anda di luar yang memungkinkan mereka membuat formulir.</p><p>namun, saya dapat mengarahkan anda ke beberapa aplikasi lain di luar sana yang dapat memberi anda beberapa gagasan tentang fungsi apa yang dapat anda tambahkan.</p><ul> <li> <a href="http://pencil.evolus.vn/en-us/home.aspx">pensil</a> - perangkat lunak wireframing/prototyping, periksa fungsionalitasnya</li> <li> <a href="http://iplotz.com/">iplotz</a> - perangkat lunak wireframing/prototyping, periksa fungsionalitasnya</li> <li>google - <a href="http://googlesystem.blogspot.com/2007/02/learning-googles-keyboard-shortcuts.html">ikhtisar pintasan</a> </li> <li>gmail - <a href="http://mail.google.com/support/bin/answer.py?hl=en&amp;answer=6594">daftar pintasan</a> </li> <li>google documents - <a href="http://docs.google.com/support/bin/answer.py?hl=en&amp;answer=66280">daftar pintasan</a> </li> <li> <a href="http://wufoo.com/">wufoo</a> - pembuat formulir online populer, lihat apa yang mereka lakukan</li> </ul><p>anda bisa membuat semua jenis pintasan keyboard gila untuk aplikasi anda. namun, anda mungkin ingin tetap menggunakan yang paling umum digunakan, yang sepertinya sudah anda daftarkan. jika anda akan membuat pintasan baru, pastikan pintasannya intuitif bagi pengguna.</p><p>saya harap tautan itu terbukti spark beberapa ide untuk anda dan tim anda, dan maaf saya tidak bisa memberikan contoh yang tepat.</p> <p>saya dari api gateway.</p><p>sayangnya, solusi terbaik yang kami miliki sampai sekarang adalah, untuk menyuntikkan header kustom origin di cloudfront dan memvalidasi itu dalam customizer (opsi 4 dalam pertanyaan anda).</p><p>kami sudah menyadari keterbatasan ini dan solusi yang tidak terlalu bagus. kami mencari untuk memberikan integrasi waf yang lebih baik di masa depan, tetapi kami tidak memiliki eta.</p> kelemahan model atom rutherford menurut fisika klasik terjadi saat elektron yang bergerak mengelilingi inti memancarkan energi dalam bentuk gelombang elektromagnetik. sebagai akibatnya, seharusnya lama-kelamaan elektron itu akan kehabisan energi dan akhirnya bergabung dengan inti atom. model atom rutherford ini belum mampu menjelaskan dimana letak elektron dan cara rotasinya terhadap inti atom. elektron memancarkan energi ketika bergerak, sehingga energi atom menjadi tidak stabil. selain itu, model atom rutherford tidak dapat menjelaskan spektrum garis pada atom hidrogen (h). faktor eksternal merupakan faktur yang di luar individu. dalam konteks soal, sarana dan pengarahan terhadap anak muda supaya memanfaatkan waktu senggang dengan baik merupakan salah satu faktor eksternal yang dapat mendorong pemuda untuk menjauhi aktivitas yang tidak baik. faktor-faktor eksternal: * proses pencarian jati diri yg dialami para remaja disalurkan ke hal negatif * jalan pikiran remaja yang sangat labil * jauh dari ilmu agama * kurangnya kesadaran akan pentingnya akhlak lebih tinggi daripada ilmu * pikiran para remaja yang lebih mementingkan pandangan orang lain tanpa tau benar atau tidaknya faktor-faktor internal: dari dalam diri masing-masing <p>ini telah ditanyakan dalam stack overflow <a href="https://stackoverflow.com/questions/404040/how-do-you-like-your-primary-keys/404057#404057">di sini</a> dan <a href="https://stackoverflow.com/questions/829284/guid-vs-int-identity">di sini</a> .</p><p> <a href="http://www.codinghorror.com/blog/2007/03/primary-keys-ids-versus-guids.html">posting jeff</a> menjelaskan banyak tentang pro dan kontra menggunakan guid.</p><blockquote> <h3>guid pro</h3> <ul> <li>unik di setiap tabel, setiap basis data, dan setiap server</li> <li>mengizinkan penggabungan catatan dengan mudah dari database yang berbeda</li> <li>mengizinkan distribusi basis data dengan mudah di beberapa server</li> <li>anda dapat membuat id di mana saja, alih-alih harus bolak-balik ke database</li> <li>sebagian besar skenario replikasi membutuhkan guid kolom pula</li> </ul> <h3>kontra guid</h3> <ul> <li>ini adalah kekalahan 4 kali lebih besar dari nilai indeks 4 byte tradisional; ini dapat memiliki implikasi kinerja dan penyimpanan yang serius jika anda tidak berhati-hati</li> <li>tidak praktis untuk debug (<code>where userid='{bae7df4-ddf-3rg-5ty3e3rf456as10}'</code>)</li> <li>guid yang dihasilkan sebagian harus berurutan untuk kinerja terbaik (misalnya, <code>newsequentialid()</code> pada sql server 2005+) dan untuk memungkinkan penggunaan indeks berkerumun</li> </ul> </blockquote><p>jika anda yakin tentang kinerja dan anda tidak berencana untuk mereplikasi atau menggabungkan catatan, maka gunakan <code>int</code>, dan atur secara otomatis peningkatan (<em> identitas benih di sql server </em>).</p> <p> <a href="http://www.gurulib.com/\_scripts/barcode/gurulib\_barcode.html">guru lib</a> tampaknya memiliki pemindai barcode, saya belum pernah mencobanya ( <a href="http://www.gurulib.com/">halaman rumah</a> ).</p><p>ada <a href="http://gurulib.wordpress.com/2007/12/28/a-flash-based-webcam-barcode-reader/">instruksi</a> di blog mereka.</p> ingat kembali syarat f(x) merupakan variabel acak diskrit berikut.


 f(x)≥0.
 x∑​f(x)=1, untuk semua nilai x yang mungkin.


akan dibuktikan bahwa x∑​f(x)=1, maka

∑x​f(x)​​f(1)+f(2)+f(3)+f(4)+f(5)91​+92​+93−2​+94−2​+95−2​91​+92​+91​+92​+93​99​1​

karena hasilnya sama dengan 1 maka x merupakan variabel acak diskrit.

jadi, x merupakan variabel acak diskrit..