secretinfo.txt
ディレクトリ内のファイルを編集しようとしています。SensitiveData
現在のディレクトリとファイルには、次の権限があります。
drwx------ 2 www-data root 4096 Apr 20 17:39 SensitiveData
-rw------- 1 www-data root 28 Apr 20 17:20 secretinfo.txt
ファイルとディレクトリは、コマンドインジェクション攻撃に脆弱なApache Webサーバーを実行しているUbuntuVMにあり(これは私が練習しているプライベートVMです)、コマンドcat /var/SensitiveData/secretinfo.txt
出力を注入できましたMy bank account pin is 4565
。同じコマンド注入技術を使用してピンを変更してみましたが、成功しませんでした。これまで、次のコマンドを試しましたが、テキストファイルは変更されません。
sed -i ‘s/4565/1111/’ /var/SensitiveData/secretinfo.txt
cat /var/SensitiveData/secretinfo.txt | sed -i ‘s/4565/1111/’ > /var/SensitiveData/secretinfo.txt
sedを使用すると何か抜けましたか?それとも別のコマンドを使用してテキストを置き換える必要がありますか?最初のコマンドは何もしませんが、2番目のコマンドは空のファイルを上書きして作成します。
ベストアンサー1
ファイルsecretinfo.txt
の長さは81文字です。内容を見るとcat
一部だけが表示されます。
4565
その理由の1つは、複数の文字列があり、表示された文字列ではなく隠された文字列を置き換えることである可能性があります。したがって、各行の最初の文字列だけでなく、可能なすべての文字列を置き換えます。
sed -i ‘s/4565/1111/g’ /var/SensitiveData/secretinfo.txt
もう一つの理由は、表示された文字の間に見えない文字があるためです。hd
()コマンドを使用してファイルの正確な内容をhexdump
確認してください。secretinfo.txt
これでのみ関連sed
コマンドを作成できます。
しかし、これをしないでください:
cat /var/SensitiveData/secretinfo.txt | sed -i ‘s/4565/1111/’ > /var/SensitiveData/secretinfo.txt
まず、ファイルの変更中にファイルを読み込んでいます(一部の条件では機能できますが制御できない状況であることを考慮して、この構成を避けてください)。
第二に、-i
オプションはファイルを引数として必要とし、コマンドは出力を生成しないため、リダイレクトはファイルを消去します。