>PHP 프레임워크 >ThinkPHP >ThinkPHP 프레임워크 감사

ThinkPHP 프레임워크 감사

藏色散人
藏色散人앞으로
2020-08-08 13:18:042722검색

다음은 thinkphp프레임워크 튜토리얼 칼럼에 나온 ThinkPHP 프레임워크 감사에 대한 소개입니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

ThinkPHP 프레임워크 감사

ThinkPHP 소개

ThinkPHP 는 2006년 초에 설립되어 Apache2 오픈 소스로 출시된 빠르고 간단한 객체 지향 경량 PHP 개발 프레임워크입니다. 이는 민첩한 WEB 애플리케이션 개발과 단순화된 엔터프라이즈 애플리케이션 개발을 위해 탄생했습니다. ThinkPHP는 탄생부터 단순하고 실용적인 디자인 원칙을 고수해 왔으며 뛰어난 성능과 최소한의 코드를 유지하면서도 사용 편의성에도 중점을 두었습니다. 커뮤니티 팀의 적극적인 참여로 사용 편의성, 확장성 및 성능 측면에서 지속적으로 최적화되고 개선되었으며, 중국에서 가장 선도적이고 영향력 있는 웹 애플리케이션 개발 프레임워크로 성장했습니다. , 많은 일반적인 사례가 있어 상업용 및 포털 수준 개발에 안정적으로 사용할 수 있습니다.

취약점에 대한 간략한 설명

ThinkPHP 5.0.x 프레임워크는 매개변수화된 쿼리 방법을 사용하여 데이터베이스를 작동하지만 삽입 및 업데이트 방법에서 전달된 매개변수는 제어 가능하며 엄격하지 않습니다. 필터링 결국 이 SQL 주입 취약점이 발생했습니다.

분석을 위해 ThinkPHP 프레임워크 5.0.x SQL 주입 취약점 사용

thinkphp공식 웹사이트 다운로드 버전 5.0.15: http://www.thinkphp.cn/down/1125. HTML . 데이터베이스를 설정합니다. 데이터베이스는 tp이고 테이블 이름은 user이며 id와 username이라는 두 개의 필드가 있습니다.

데이터베이스 구성 정보 application/database.php를 수정하고, application/config.php에서 디버깅 및 추적을 활성화합니다.

application/index/controller/Index.php의 Index 클래스에 메소드를 추가하세요:

public  function testsql()
    {
        $username = input('get.username/a');
        db('user')->where(['id'=> 1])->insert(['username'=>$username]);
    }

이번 페이로드는

rreee

설명은 다음과 같습니다.

http://127.0.0.1/thinkphp5.0.15/public/index.php/index/index/testsql?username[0]=inc&username[1]=updatexml(1,concat(0x7,user(),0x7e),1)&username[2]=1

확장자:

updatexml 함수에 대해 UPDATEXML(XML_document, , 이는 XML 문서 개체입니다. 이름은 Doc

두 번째 매개 변수: XPath_string( Xpath 형식 문자열) Xpath 구문을 이해하지 못하는 경우 온라인에서 자습서를 찾을 수 있습니다.

세 번째 매개변수: new_value, 문자열 형식, 발견된 정규화된 데이터를 대체합니다.

기능: 문서에서 정규화된 노드의 값을 변경합니다.

액세스 페이로드, 취약점은 다음과 같습니다. 트리거됩니다.

취약점 분석

首先,我们知道 insert 方法存在漏洞,那就查看 insert 方法的具体实现。

通过input获取到参数后,username变量情况如下:

跟入insert,thinkphp/library/think/db/Query.php

然后执行insert语句

$sql = $this->builder->insert($data, $options, $replace);

跟入 thinkphp/library/think/db/Builder.php

跟入parseData至 thinkphp/library/think/db/Builder.php

可以看出$val是数组,且根据$val[0]值为inc,会通过switch语句进入到’inc’:

此处的parseKey,即thinkphp/library/think/db/builder/Mysql.php

此处并未对传入的$key进行更多的过滤与检查,将其与前面经过parseKey的结果进行拼接后返回给result

至此注入成功。

漏洞修复

 https://github.com/top-think/framework/commit/363fd4d90312f2cfa427535b7ea01a097ca8db1b

在进行dec和inc操作之前对$val[1]的值进行了再次确认。

总结

第一次审计Thinkphp框架   ,结合Thinkphp5.0手册以及网上教程完成此次漏洞的审计。

위 내용은 ThinkPHP 프레임워크 감사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제