WordPress の desequence 脆弱性は最近非常に有名になっていますが、具体的な脆弱性については詳しく説明しませんので、この記事 http://drops.wooyun.org/papers/596 を読んでください。英語の原文も読むことができます。 vagosec.org/2013/09/wordpress-php-object-injection/。
WP 公式ウェブサイトにパッチが当てられました。パッチをバイパスしようとしましたが、成功したと思ったら、自分が甘かったことに気づき、WP のパッチをうまくバイパスできませんでしたが、アンシリアル化の小さな機能を発見しました。ここであなたと共有したいと思います。
1.unserialize() 関数関連のソースコード:
上記のコードは、配列文字列O:4:"test":1:{s:1:"a";s:3:"aaa";}のような配列文字列を判定し、これを処理する処理メソッドですシーケンス文字列、まず文字列の最初の文字を O として取得し、次に case 'O': goto yy13
yy13:
yych = *(YYMARKER = ++YYCURSOR);
if (yych == ':') goto yy17;
yy3;
上記のコードからわかるように、ポインターは 2 番目の文字を指すように 1 位置移動し、その文字が: であるかどうかを判断して、yy17 に進みます
から
上記のコードから分かるように、ポインタは次の文字を決定するために移動します。文字が数字の場合は yy20 に直接移動し、それが '+' の場合は goto
を実行します。
yy19、yy19 は次の文字を判断するためのもので、次の文字が数字の場合は yy20 に進み、そうでない場合は goto
を実行します。
yy18、yy18 はシーケンス処理を直接終了し、yy20 はオブジェクトシーケンスを処理するため、上記からわかるように:
O:+4:"テスト":1:{s:1:"a";s:3:"aaa";}
O:4:"テスト":1:{s:1:"a";s:3:"aaa";}
どちらも unserialize によって逆シリアル化でき、結果は同じです。
2. 実際のテスト:
実際には、追加の「+」を使用してオブジェクト型を処理できるだけでなく、他の型も処理できます。具体的なテストについてはあまり説明しません。
3. WP パッチを見てみましょう:
パッチ中
return (bool) preg_match( "/^{$token}:[0-9]+:/s", $data );
この方法でシーケンス値をデータベースに書き込んだのですが、データベースからデータを抽出して再度確認すると、プラス記号が作成できなかったので、データをバイパスできません。データ データベースの内外の変更。個人的には、このパッチ バイパスの焦点は、データの内外のデータの前後の変更にあると思います。
4.まとめ
wp パッチはバイパスされていませんが、unserialize() のこの小さな機能は多くの開発者によって無視される可能性があり、その結果、プログラムにセキュリティ上の欠陥が生じます。
上記の分析に誤りがある場合は、指摘するメッセージを残してください。
5.参考
《WordPress < 3.6.1 PHP オブジェクトインジェクション》
http://vagosec.org/2013/09/wordpress-php-object-injection/
《var_unserializer.c ソースコード》
https://github.com/php/php-src/b…/var_unserializer.c
「PHP文字列のシリアル化と逆シリアル化の間の構文解析の不一致によるセキュリティリスク」
より転載
http://zone.wooyun.org/content/1664
転載元: https://forum.90sec.org/thread-6694-1-1.html
作者: L.N.
http://www.bkjia.com/PHPjc/532682.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/532682.html技術記事 WordPress の desequence 脆弱性は最近非常に有名になっていますが、具体的な脆弱性については詳しく説明しませんので、この記事 http://drops.wooyun.org/papers/596 を読んでください。英語の原文も読むことができます。ヴァ...