Table des matières
解析PHP对象注入漏洞
Maison développement back-end tutoriel php 解析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;

?>
Copier après la connexion

 

上面的代码是从用户可控的数据获取一个序列化数据,然后调用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 说的是一种注入方式,叫对象注入。对象也能注入?...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Convertissez un tableau ou un objet en chaîne JSON à l'aide de la fonction json_encode() de PHP Convertissez un tableau ou un objet en chaîne JSON à l'aide de la fonction json_encode() de PHP Nov 03, 2023 pm 03:30 PM

JSON (JavaScriptObjectNotation) est un format d'échange de données léger qui est devenu un format courant pour l'échange de données entre applications Web. La fonction json_encode() de PHP peut convertir un tableau ou un objet en chaîne JSON. Cet article explique comment utiliser la fonction json_encode() de PHP, y compris la syntaxe, les paramètres, les valeurs de retour et des exemples spécifiques. Syntaxe La syntaxe de la fonction json_encode() est la suivante : st

Jailbreaker n'importe quel grand modèle en 20 étapes ! Plus de « failles de grand-mère » sont découvertes automatiquement Jailbreaker n'importe quel grand modèle en 20 étapes ! Plus de « failles de grand-mère » sont découvertes automatiquement Nov 05, 2023 pm 08:13 PM

En moins d'une minute et pas plus de 20 étapes, vous pouvez contourner les restrictions de sécurité et réussir à jailbreaker un grand modèle ! Et il n'est pas nécessaire de connaître les détails internes du modèle - seuls deux modèles de boîte noire doivent interagir, et l'IA peut attaquer de manière entièrement automatique l'IA et prononcer du contenu dangereux. J'ai entendu dire que la « Grandma Loophole », autrefois populaire, a été corrigée : désormais, face aux « Detective Loophole », « Adventurer Loophole » et « Writer Loophole », quelle stratégie de réponse l'intelligence artificielle devrait-elle adopter ? Après une vague d'assaut, GPT-4 n'a pas pu le supporter et a directement déclaré qu'il empoisonnerait le système d'approvisionnement en eau tant que... ceci ou cela. La clé est qu’il ne s’agit que d’une petite vague de vulnérabilités exposées par l’équipe de recherche de l’Université de Pennsylvanie, et grâce à leur algorithme nouvellement développé, l’IA peut générer automatiquement diverses invites d’attaque. Les chercheurs disent que cette méthode est meilleure que celle existante

Vulnérabilité de débordement de tampon en Java et ses dommages Vulnérabilité de débordement de tampon en Java et ses dommages Aug 09, 2023 pm 05:57 PM

Les vulnérabilités de débordement de tampon en Java et leurs dommages Le débordement de tampon signifie que lorsque nous écrivons plus de données dans un tampon que sa capacité, cela entraînera un débordement de données vers d'autres zones de mémoire. Ce comportement de débordement est souvent exploité par les pirates informatiques, ce qui peut entraîner de graves conséquences telles qu'une exécution anormale de code et un crash du système. Cet article présentera les vulnérabilités de débordement de tampon et leurs dommages en Java, et donnera des exemples de code pour aider les lecteurs à mieux comprendre. Les classes tampon largement utilisées en Java incluent ByteBuffer, CharBuffer et ShortB.

Comment convertir le tableau de résultats d'une requête MySQL en objet ? Comment convertir le tableau de résultats d'une requête MySQL en objet ? Apr 29, 2024 pm 01:09 PM

Voici comment convertir un tableau de résultats de requête MySQL en objet : Créez un tableau d'objets vide. Parcourez le tableau résultant et créez un nouvel objet pour chaque ligne. Utilisez une boucle foreach pour attribuer les paires clé-valeur de chaque ligne aux propriétés correspondantes du nouvel objet. Ajoute un nouvel objet au tableau d'objets. Fermez la connexion à la base de données.

Utilisez la fonction __contains__() de Python pour définir l'opération de confinement d'un objet Utilisez la fonction __contains__() de Python pour définir l'opération de confinement d'un objet Aug 22, 2023 pm 04:23 PM

Utilisez la fonction __contains__() de Python pour définir l'opération de confinement d'un objet. Python est un langage de programmation concis et puissant qui fournit de nombreuses fonctionnalités puissantes pour gérer différents types de données. L'un d'eux consiste à implémenter l'opération de confinement des objets en définissant la fonction __contains__(). Cet article explique comment utiliser la fonction __contains__() pour définir l'opération de confinement d'un objet et donne un exemple de code. La fonction __contains__() est Python

Le modèle OpenAI DALL-E 3 présente une vulnérabilité qui génère un « contenu inapproprié ». Un employé de Microsoft l'a signalé et a reçu une « ordonnance de bâillon ». Le modèle OpenAI DALL-E 3 présente une vulnérabilité qui génère un « contenu inapproprié ». Un employé de Microsoft l'a signalé et a reçu une « ordonnance de bâillon ». Feb 04, 2024 pm 02:40 PM

Selon l'actualité du 2 février, Shane Jones, responsable du département d'ingénierie logicielle de Microsoft, a récemment découvert une vulnérabilité dans le modèle DALL-E3 d'OpenAI, qui serait capable de générer une série de contenus inappropriés. Shane Jones a signalé la vulnérabilité à l'entreprise, mais il lui a été demandé de garder cette information confidentielle. Cependant, il a finalement décidé de révéler sa vulnérabilité au monde extérieur. ▲ Source de l'image : rapport divulgué par ShaneJones. Ce site Web a remarqué que ShaneJones avait découvert grâce à une recherche indépendante en décembre de l'année dernière qu'il existait une vulnérabilité dans le modèle DALL-E3 d'images générées par du texte OpenAI. Cette vulnérabilité peut contourner l'AI Guardrail (AIGuardrail), entraînant la génération d'une série de contenus inappropriés NSFW. Cette découverte a attiré une large attention

Vulnérabilités de l'opérateur virgule et mesures de protection en Java Vulnérabilités de l'opérateur virgule et mesures de protection en Java Aug 10, 2023 pm 02:21 PM

Présentation des vulnérabilités de l'opérateur virgule et des mesures de défense en Java : dans la programmation Java, nous utilisons souvent l'opérateur virgule pour effectuer plusieurs opérations en même temps. Cependant, nous pouvons parfois négliger certaines vulnérabilités potentielles de l’opérateur virgule qui peuvent conduire à des résultats inattendus. Cet article présentera les vulnérabilités de l'opérateur virgule en Java et fournira les mesures de protection correspondantes. Utilisation de l'opérateur virgule : La syntaxe de l'opérateur virgule en Java est expr1, expr2, qui peut être considérée comme un opérateur de séquence. Sa fonction est d'abord de calculer ex

Quelle est la différence entre les tableaux et les objets en PHP ? Quelle est la différence entre les tableaux et les objets en PHP ? Apr 29, 2024 pm 02:39 PM

En PHP, un tableau est une séquence ordonnée et les éléments sont accessibles par index ; un objet est une entité avec des propriétés et des méthodes, créée via le mot-clé new. L'accès au tableau se fait via l'index, l'accès aux objets se fait via les propriétés/méthodes. Les valeurs du tableau sont transmises et les références d'objet sont transmises.

See all articles