목차
解析PHP对象注入漏洞
백엔드 개발 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;

?>
로그인 후 복사

 

上面的代码是从用户可控的数据获取一个序列化数据,然后调用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 说的是一种注入方式,叫对象注入。对象也能注入?...
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP의 json_encode() 함수를 사용하여 배열 또는 객체를 JSON 문자열로 변환 PHP의 json_encode() 함수를 사용하여 배열 또는 객체를 JSON 문자열로 변환 Nov 03, 2023 pm 03:30 PM

JSON(JavaScriptObjectNotation)은 웹 애플리케이션 간의 데이터 교환을 위한 일반적인 형식이 된 경량 데이터 교환 형식입니다. PHP의 json_encode() 함수는 배열이나 객체를 JSON 문자열로 변환할 수 있습니다. 이 기사에서는 구문, 매개변수, 반환 값 및 구체적인 예를 포함하여 PHP의 json_encode() 함수를 사용하는 방법을 소개합니다. 구문 json_encode() 함수의 구문은 다음과 같습니다. st

Java의 버퍼 오버플로 취약점과 그 피해 Java의 버퍼 오버플로 취약점과 그 피해 Aug 09, 2023 pm 05:57 PM

Java의 버퍼 오버플로 취약점과 그 피해 버퍼 오버플로는 버퍼에 용량보다 많은 데이터를 쓰면 데이터가 다른 메모리 영역으로 오버플로되는 것을 의미합니다. 이러한 오버플로 동작은 종종 해커에 의해 악용되어 비정상적인 코드 실행 및 시스템 충돌과 같은 심각한 결과를 초래할 수 있습니다. 이 기사에서는 Java의 버퍼 오버플로 취약점과 그 피해를 소개하고 독자의 이해를 돕기 위해 코드 예제를 제공합니다. Java에서 널리 사용되는 버퍼 클래스에는 ByteBuffer, CharBuffer 및 ShortB가 있습니다.

20단계로 대형 모델을 탈옥하세요! 더 많은 '할머니 허점'이 자동으로 발견됩니다. 20단계로 대형 모델을 탈옥하세요! 더 많은 '할머니 허점'이 자동으로 발견됩니다. Nov 05, 2023 pm 08:13 PM

1분 이내에 20단계를 거쳐 보안 제한을 우회하고 대형 모델을 성공적으로 탈옥할 수 있습니다! 그리고 모델의 내부 세부 사항을 알 필요가 없습니다. 두 개의 블랙박스 모델만 상호 작용하면 되며 AI는 완전히 자동으로 AI를 공격하고 위험한 내용을 말할 수 있습니다. 한때 유행했던 '할머니 허점'이 고쳐졌다는 소식을 들었습니다. 이제 '탐정 허점', '모험가 허점', '작가 허점'에 직면하면 인공지능은 어떤 대응 전략을 채택해야 할까요? 맹공격의 물결 이후 GPT-4는 참을 수 없었고, 이것이든 저것이든... 급수 시스템을 오염시킬 것이라고 직접 말했습니다. 핵심은 이것이 펜실베니아 대학 연구팀이 노출한 취약점의 작은 물결일 뿐이며, 새로 개발된 알고리즘을 사용하여 AI가 자동으로 다양한 공격 프롬프트를 생성할 수 있다는 것입니다. 연구자들은 이 방법이 기존 방법보다 낫다고 말합니다.

Python의 __contains__() 함수를 사용하여 객체의 포함 작업을 정의합니다. Python의 __contains__() 함수를 사용하여 객체의 포함 작업을 정의합니다. Aug 22, 2023 pm 04:23 PM

Python의 __contains__() 함수를 사용하여 객체의 포함 작업을 정의합니다. Python은 다양한 유형의 데이터를 처리할 수 있는 많은 강력한 기능을 제공하는 간결하고 강력한 프로그래밍 언어입니다. 그 중 하나는 __contains__() 함수를 정의하여 객체의 포함 작업을 구현하는 것입니다. 이 기사에서는 __contains__() 함수를 사용하여 객체의 포함 작업을 정의하는 방법을 소개하고 몇 가지 샘플 코드를 제공합니다. __contains__() 함수는 Python입니다.

MySQL 쿼리 결과 배열을 객체로 변환하는 방법은 무엇입니까? MySQL 쿼리 결과 배열을 객체로 변환하는 방법은 무엇입니까? Apr 29, 2024 pm 01:09 PM

MySQL 쿼리 결과 배열을 객체로 변환하는 방법은 다음과 같습니다. 빈 객체 배열을 만듭니다. 결과 배열을 반복하고 각 행에 대해 새 개체를 만듭니다. foreach 루프를 사용하여 각 행의 키-값 쌍을 새 개체의 해당 속성에 할당합니다. 개체 배열에 새 개체를 추가합니다. 데이터베이스 연결을 닫습니다.

Java의 쉼표 연산자 취약점 및 보호 조치 Java의 쉼표 연산자 취약점 및 보호 조치 Aug 10, 2023 pm 02:21 PM

Java의 쉼표 연산자 취약점 및 방어 조치 개요: Java 프로그래밍에서는 쉼표 연산자를 사용하여 동시에 여러 작업을 수행하는 경우가 많습니다. 그러나 때로는 예상치 못한 결과를 초래할 수 있는 쉼표 연산자의 잠재적인 취약점을 간과할 수도 있습니다. 이 기사에서는 Java의 쉼표 연산자의 취약점을 소개하고 해당 보호 조치를 제공합니다. 쉼표 연산자의 사용법: Java에서 쉼표 연산자의 구문은 expr1, expr2이며 이는 시퀀스 연산자라고 할 수 있습니다. 그 기능은 먼저 ex를 계산하는 것입니다.

OpenAI DALL-E 3 모델에는 '부적절한 콘텐츠'를 생성하는 취약점이 있습니다. Microsoft 직원이 이를 신고하여 '개그 명령'을 받았습니다. OpenAI DALL-E 3 모델에는 '부적절한 콘텐츠'를 생성하는 취약점이 있습니다. Microsoft 직원이 이를 신고하여 '개그 명령'을 받았습니다. Feb 04, 2024 pm 02:40 PM

2일(현지시간) 뉴스에 따르면 마이크로소프트(MS) 소프트웨어 엔지니어링 부서 관리자 셰인 존스(Shane Jones)는 최근 오픈AI(OpenAI)의 DALL-E3 모델에서 일련의 부적절한 콘텐츠를 생성할 수 있는 취약점을 발견했다. Shane Jones는 회사에 취약점을 보고했지만 이를 기밀로 유지해 달라는 요청을 받았습니다. 그러나 그는 결국 취약점을 외부 세계에 공개하기로 결정했습니다. ▲ 이미지 출처: ShaneJones가 공개한 보고서. 이 웹사이트는 ShaneJones가 작년 12월 독립적인 연구를 통해 OpenAI 텍스트 생성 이미지의 DALL-E3 모델에 취약점이 있음을 발견했다는 사실을 알렸습니다. 이 취약점은 AI 가드레일(AIGuardrail)을 우회하여 일련의 NSFW 부적절한 콘텐츠를 생성할 수 있습니다. 이 발견은 광범위한 관심을 끌었습니다.

PHP 함수는 어떻게 객체를 반환하나요? PHP 함수는 어떻게 객체를 반환하나요? Apr 10, 2024 pm 03:18 PM

PHP 함수는 return 문과 객체 인스턴스를 사용하여 객체를 반환함으로써 데이터를 사용자 정의 구조로 캡슐화할 수 있습니다. 구문: functionget_object():object{}. 이를 통해 사용자 정의 속성과 메소드를 사용하여 객체를 생성하고 객체 형태로 데이터를 처리할 수 있습니다.

See all articles