私はブラウザをシミュレートしようとしました(そしてXSSをシミュレートしました)。誰かが PhantomJS を勧めてくれましたが、単純な JS コマンドの実行に問題がありました。
簡単な php ウェブサイトを作成しました: xss.php
<form id = "myform" action="xss.php" method="POST">
<input id="x" name='x' type="text" />
<input type="submit" value="ok" />
</form>
<?php
echo $_POST['x'];
$fp = fopen("logs.txt", "a");
fwrite($fp, $_POST['x']);
fclose($fp);
?>
<script>document.getElementById('x').value='payload';
document.getElementById('myform').submit();</script>
ブラウザーから実行すると、フォームが送信されます (そして、その結果が logs.txt に入れられます。ただし、PhantomJS 経由でその Web サイトを実行しようとすると、問題が発生します。
run.js:
var page = require('webpage').create();
var url = 'http://127.0.0.1/xss/xss.php';
page.open(url, function (status) {
if (status !== 'success') console.log('Network error');
else
{
var p = page.evaluate(function () {
});
console.log('DONE');
}
phantom.exit();
});
コマンドラインから実行します。./phantomjs run.js
私が理解している限り、このスクリプトはブラウザの動作をシミュレートし、上記のフォームを送信する必要があります。ただし、logs.txt には何もありません。これは、phantomjs がそのスクリプトを実行しなかったことを意味します。私が何を間違えたのか教えてください。