ホームページ >PHPフレームワーク >ThinkPHP >ThinkPHP フレームワークの監査について 1 分で学ぶ (共有)

ThinkPHP フレームワークの監査について 1 分で学ぶ (共有)

慕斯
慕斯転載
2021-06-18 10:29:383239ブラウズ

以下の thinkphp フレームワーク チュートリアルのコラムでは、ThinkPHP フレームワークの監査 (共有) について 1 分で紹介します。困っている友人のお役に立てれば幸いです。

ThinkPHP フレームワークの監査について 1 分で学ぶ (共有)

ThinkPHP の概要

ThinkPHP はa これは、無料でオープン ソースの、高速かつシンプルなオブジェクト指向の軽量 PHP 開発フレームワークです。2006 年初頭に設立され、Apache2 オープン ソース契約に基づいてリリースされました。機敏な WEB アプリケーション開発と簡素化されたエンタープライズ アプリケーション開発のために生まれました。 ThinkPHP は誕生以来、シンプルで実用的な設計原則を堅持しており、優れたパフォーマンスと最小限のコードを維持しながら、使いやすさにも重点を置いています。独自の機能を多数備えており、コミュニティチームの積極的な参加により、使いやすさ、拡張性、パフォーマンスの面で継続的に最適化と改善が行われ、中国で最も有力かつ影響力のあるWEBアプリケーション開発フレームワークに成長しました。多くの典型的なケースにより、商用およびポータル レベルの開発に安定して使用できることが保証されます。

#脆弱性の概要

##ThinkPHP 5.0.x フレームワークは、パラメータ化されたクエリ方式を使用して動作しますが、しかし、挿入メソッドと更新メソッドでは、渡されるパラメータは制御可能であり、厳密にフィルタリングされていないため、最終的にこの SQL インジェクションの脆弱性の発生につながりました。

ThinkPHP フレームワーク 5.0.x SQL インジェクションの脆弱性を分析に使用する

thinkphp公式 Web サイトのバージョン 5.0.15 のダウンロード: http://www.thinkphp.cn/down/1125.html 。データベースをセットアップします。データベースは tp、テーブル名は user、2 つのフィールド id と username があります。

#application/ 内のデータベース構成情報 application/database.php を変更します。 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

ドメイン名 Web サイト ディレクトリ 外部アクセス ディレクトリ エントリ ファイル フロント デスク コントローラー メソッド名


拡張子:

##updatexml 関数について UPDATEXML (XML_document, XPath_string, new_value ) ;

#最初のパラメータ: XML_document は文字列形式であり、XML ドキュメント オブジェクトの名前です。テキストは Doc## です。

#2 番目のパラメータ: XPath_string (Xpath 形式の文字列) Xpath 構文がわからない場合は、インターネットでチュートリアルを見つけることができます。

#3 番目のパラメータ: new_value、文字列形式。条件を満たす見つかったデータを置き換えます。

作用:改变文档中符合条件的节点的值

访问payload,就可以触发漏洞了。

漏洞分析

首先,我们知道 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手册以及网上教程完成此次漏洞的审计。

相关推荐:最新的10个thinkphp视频教程

以上がThinkPHP フレームワークの監査について 1 分で学ぶ (共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。