아래 thinkphp 프레임워크 튜토리얼 칼럼에서는 ThinkPHP 프레임워크의 감사(공유)에 대해 1분만에 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!
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]); }
은 다음과 같이 설명됩니다.
http: //127.0.0.1/thinkphp/ public/ index.php/ index/ index/ index 도메인 이름 웹사이트 디렉터리 외부 액세스 디렉터리 항목 파일 프런트 데스크 컨트롤러 메서드 이름
확장자:
updatexml 함수에 대해 UPDATEXML(XML_document, :XPath_string(Xpath 형식의 문자열). Xpath 구문을 이해하지 못하는 경우 인터넷에서 자습서를 찾을 수 있습니다.
세 번째 매개변수: new_value, 문자열 형식, 발견된 정규화된 데이터를 대체합니다 作用:改变文档中符合条件的节点的值 访问payload,就可以触发漏洞了。 漏洞分析 首先,我们知道 insert 方法存在漏洞,那就查看 insert 方法的具体实现。 通过input获取到参数后,username变量情况如下: 跟入insert,thinkphp/library/think/db/Query.php 然后执行insert语句 跟入 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手册以及网上教程完成此次漏洞的审计。 相关推荐:最新的10个thinkphp视频教程$sql = $this->builder->insert($data, $options, $replace);
위 내용은 1분 만에 ThinkPHP 프레임워크 감사에 대해 알아보세요(공유)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!