Inhaltsverzeichnis
解析PHP对象注入漏洞
Heim Backend-Entwicklung PHP-Tutorial 解析PHP对象注入漏洞_PHP教程

解析PHP对象注入漏洞_PHP教程

Jul 13, 2016 am 10:07 AM
对象 漏洞

解析PHP对象注入漏洞

??

0、前言

逛乌云知识库的时候看到一篇有趣的译文:www.Bkjia.com

说的是一种注入方式,叫对象注入。对象也能注入?

是的,只要是存在污染数据,没有什么是不可能注入的,但是这个漏洞有点太古怪了,所以我觉得有趣。

 

1、原理

在程序编写的时候,往往需要序列化一些运行时数据,所谓序列化就是按照一定的格式将运行时数据写入本地文件。这样做可以对数据进行本地保存,用的时候直接读文件就可以把运行时产生的数据读出。在PHP中就是serialize和unserialize函数了。

能够注入的原理就是在反序列化的时候,引入了污染数据造成的,比如:

$obj = unserialize($_GET[‘injection’]) ;

通过这个语句,我们可以自己按照序列化数据的格式进行构造,得到我们想要的对象$obj。

有人就要问了,你仅仅得到这个对象$obj有啥用?先看看下面的实例。

 

2、情景

该情景也是来源于译文中的demo,这里还原一下:

 

 

<!--?php 
header(Content-type:text/html;charset=UTF-8);
// … 一些include ...
class FileClass
{
    // 文件名
 
    public $filename = error.log;
 
    //当对象被作为一个字符串会读取这个文件
 
    public function __toString()
    {
        echo filename发生了变化==--> . $this->filename ;
        return file_get_contents($this->filename) ;                
    }
}
 
// Main User class
 
class User
{
    // Class data
 
    public $age = 0;
    public $name = &#39;&#39;;
 
    // 允许对象作为一个字符串输出上面的data
 
    public function __toString()
    {
        return &#39;User &#39; . $this->name . &#39; is &#39; . $this->age . &#39; years old. 
&#39;;
    }
}
 
// 用户可控
 
$obj = unserialize($_GET[&#39;usr_serialized&#39;]);
 
// 输出 __toString
var_dump($obj) ;
echo $obj;

?>
Nach dem Login kopieren

 

上面的代码是从用户可控的数据获取一个序列化数据,然后调用unserialize方法对$_GET['usr_serialized']进行反序列化,那么这个$obj就可以被我们控制了。

正常的方式是提交:

http://127.0.0.1/code/objin.php?usr_serialized=O:4:User:2:{s:3:age;i:20;s:4:name;s:4:John;}

上面的序列化数据是一个User类的对象,其中$age=20, $name=John。

这时,echo $obj ;直接echo对象,就能调用魔术方法__toString,在User类中已经对这个魔术方法进行了重载,即输出一段字符串,运行效果如下:

\

 

上面的代码是从用户可控的数据获取一个序列化数据,然后调用unserialize方法对$_GET['usr_serialized']进行反序列化,那么这个$obj就可以被我们控制了。

正常的方式是提交:

http://127.0.0.1/code/objin.php?usr_serialized=O:4:User:2:{s:3:age;i:20;s:4:name;s:4:John;}

上面的序列化数据是一个User类的对象,其中$age=20, $name=John。

这时,echo $obj ;直接echo对象,就能调用魔术方法__toString,在User类中已经对这个魔术方法进行了重载,即输出一段字符串,运行效果如下:

\

 

3、漏洞挖掘

这类漏洞相当隐蔽,但是一旦出现效果很到位。挖掘主要是找找unserialize函数中的参数是否是污染数据。找到相应的控制位置,再看看哪个类可以利用起来完成我们的攻击,比如本情景中的FileClass类。

 

 

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/953320.htmlTechArticle解析PHP对象注入漏洞 ?? 0、前言 逛乌云知识库的时候看到一篇有趣的译文:www.Bkjia.com 说的是一种注入方式,叫对象注入。对象也能注入?...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Konvertieren Sie ein Array oder Objekt mit der json_encode()-Funktion von PHP in einen JSON-String Konvertieren Sie ein Array oder Objekt mit der json_encode()-Funktion von PHP in einen JSON-String Nov 03, 2023 pm 03:30 PM

JSON (JavaScriptObjectNotation) ist ein leichtes Datenaustauschformat, das sich zu einem gängigen Format für den Datenaustausch zwischen Webanwendungen entwickelt hat. Die json_encode()-Funktion von PHP kann ein Array oder Objekt in einen JSON-String konvertieren. In diesem Artikel wird die Verwendung der json_encode()-Funktion von PHP vorgestellt, einschließlich Syntax, Parametern, Rückgabewerten und spezifischen Beispielen. Syntax Die Syntax der Funktion json_encode() lautet wie folgt: st

Jailbreaken Sie jedes große Modell in 20 Schritten! Weitere „Oma-Lücken' werden automatisch entdeckt Jailbreaken Sie jedes große Modell in 20 Schritten! Weitere „Oma-Lücken' werden automatisch entdeckt Nov 05, 2023 pm 08:13 PM

In weniger als einer Minute und nicht mehr als 20 Schritten können Sie Sicherheitsbeschränkungen umgehen und ein großes Modell erfolgreich jailbreaken! Und es ist nicht erforderlich, die internen Details des Modells zu kennen – es müssen lediglich zwei Black-Box-Modelle interagieren, und die KI kann die KI vollautomatisch angreifen und gefährliche Inhalte aussprechen. Ich habe gehört, dass die einst beliebte „Oma-Lücke“ behoben wurde: Welche Reaktionsstrategie sollte künstliche Intelligenz angesichts der „Detektiv-Lücke“, der „Abenteurer-Lücke“ und der „Schriftsteller-Lücke“ verfolgen? Nach einer Angriffswelle konnte GPT-4 es nicht ertragen und sagte direkt, dass es das Wasserversorgungssystem vergiften würde, solange ... dies oder das. Der Schlüssel liegt darin, dass es sich lediglich um eine kleine Welle von Schwachstellen handelt, die vom Forschungsteam der University of Pennsylvania aufgedeckt wurden. Mithilfe ihres neu entwickelten Algorithmus kann die KI automatisch verschiedene Angriffsaufforderungen generieren. Forscher sagen, dass diese Methode besser ist als die bisherige

Pufferüberlauf-Schwachstelle in Java und ihr Schaden Pufferüberlauf-Schwachstelle in Java und ihr Schaden Aug 09, 2023 pm 05:57 PM

Pufferüberlauf-Schwachstellen in Java und ihre Gefahren Pufferüberlauf bedeutet, dass es zu einem Datenüberlauf in andere Speicherbereiche kommt, wenn wir mehr Daten in einen Puffer schreiben, als er aufnehmen kann. Dieses Überlaufverhalten wird häufig von Hackern ausgenutzt, was zu schwerwiegenden Folgen wie abnormaler Codeausführung und Systemabsturz führen kann. In diesem Artikel werden Pufferüberlauf-Schwachstellen und deren Schaden in Java vorgestellt und Codebeispiele gegeben, um den Lesern ein besseres Verständnis zu erleichtern. Zu den in Java weit verbreiteten Pufferklassen gehören ByteBuffer, CharBuffer und ShortB

Wie konvertiere ich ein MySQL-Abfrageergebnisarray in ein Objekt? Wie konvertiere ich ein MySQL-Abfrageergebnisarray in ein Objekt? Apr 29, 2024 pm 01:09 PM

So konvertieren Sie ein MySQL-Abfrageergebnis-Array in ein Objekt: Erstellen Sie ein leeres Objekt-Array. Durchlaufen Sie das resultierende Array und erstellen Sie für jede Zeile ein neues Objekt. Verwenden Sie eine foreach-Schleife, um die Schlüssel-Wert-Paare jeder Zeile den entsprechenden Eigenschaften des neuen Objekts zuzuweisen. Fügt dem Objektarray ein neues Objekt hinzu. Schließen Sie die Datenbankverbindung.

Verwenden Sie die Python-Funktion __contains__(), um die Einschlussoperation eines Objekts zu definieren Verwenden Sie die Python-Funktion __contains__(), um die Einschlussoperation eines Objekts zu definieren Aug 22, 2023 pm 04:23 PM

Verwenden Sie die Funktion __contains__() von Python, um die Einschlussoperation eines Objekts zu definieren. Python ist eine prägnante und leistungsstarke Programmiersprache, die viele leistungsstarke Funktionen für die Verarbeitung verschiedener Datentypen bietet. Eine davon besteht darin, die Eindämmungsoperation von Objekten durch Definieren der Funktion __contains__() zu implementieren. In diesem Artikel wird erläutert, wie Sie mit der Funktion __contains__() die Einschlussoperation eines Objekts definieren, und es wird ein Beispielcode bereitgestellt. Die Funktion __contains__() ist Pytho

Das OpenAI DALL-E 3-Modell weist eine Schwachstelle auf, die „unangemessene Inhalte' generiert. Ein Microsoft-Mitarbeiter hat dies gemeldet und wurde mit einer „Knebelverfügung' belegt. Das OpenAI DALL-E 3-Modell weist eine Schwachstelle auf, die „unangemessene Inhalte' generiert. Ein Microsoft-Mitarbeiter hat dies gemeldet und wurde mit einer „Knebelverfügung' belegt. Feb 04, 2024 pm 02:40 PM

Laut Nachrichten vom 2. Februar hat Shane Jones, Manager der Software-Engineering-Abteilung von Microsoft, kürzlich eine Schwachstelle im DALL-E3-Modell von OpenAI entdeckt, die angeblich in der Lage sein soll, eine Reihe unangemessener Inhalte zu generieren. Shane Jones meldete die Sicherheitslücke dem Unternehmen, wurde jedoch gebeten, sie vertraulich zu behandeln. Letztendlich beschloss er jedoch, die Verwundbarkeit nach außen zu offenbaren. ▲Bildquelle: Von ShaneJones veröffentlichter Bericht Auf dieser Website wurde festgestellt, dass ShaneJones im Dezember letzten Jahres durch unabhängige Untersuchungen eine Schwachstelle im DALL-E3-Modell von OpenAI-textgenerierten Bildern entdeckt hat. Diese Sicherheitslücke kann die AI Guardrail (AIGuardrail) umgehen, was zur Generierung einer Reihe unangemessener NSFW-Inhalte führt. Diese Entdeckung erregte große Aufmerksamkeit

Schwachstellen und Schutzmaßnahmen des Komma-Operators in Java Schwachstellen und Schutzmaßnahmen des Komma-Operators in Java Aug 10, 2023 pm 02:21 PM

Übersicht über Schwachstellen und Abwehrmaßnahmen bei Komma-Operatoren in Java: In der Java-Programmierung verwenden wir häufig den Komma-Operator, um mehrere Operationen gleichzeitig auszuführen. Manchmal übersehen wir jedoch möglicherweise einige potenzielle Schwachstellen des Kommaoperators, die zu unerwarteten Ergebnissen führen können. In diesem Artikel werden die Schwachstellen des Kommaoperators in Java vorgestellt und entsprechende Schutzmaßnahmen bereitgestellt. Verwendung des Kommaoperators: Die Syntax des Kommaoperators in Java lautet expr1, expr2, was als Sequenzoperator bezeichnet werden kann. Seine Funktion besteht darin, zunächst ex zu berechnen

Was ist der Unterschied zwischen Arrays und Objekten in PHP? Was ist der Unterschied zwischen Arrays und Objekten in PHP? Apr 29, 2024 pm 02:39 PM

In PHP ist ein Array eine geordnete Sequenz, und auf Elemente wird über einen Index zugegriffen. Ein Objekt ist eine Entität mit Eigenschaften und Methoden, die über das Schlüsselwort new erstellt werden. Der Array-Zugriff erfolgt über einen Index, der Objektzugriff über Eigenschaften/Methoden. Es werden Array-Werte und Objektreferenzen übergeben.

See all articles