首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟XSS攻击

模拟XSS攻击
EN

Stack Overflow用户
提问于 2013-06-24 07:45:32
回答 1查看 1K关注 0票数 1

我试图模拟浏览器(和模拟XSS)。有人推荐我使用PhantomJS,然而,我在执行简单的JS命令时遇到了一些问题。

我已经创建了简单的php网站: xss.php

代码语言:javascript
复制
<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运行该网站时,存在一个问题:

run.js:

代码语言:javascript
复制
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没有运行该脚本。你能告诉我我哪里做错了吗?

EN

回答 1

Stack Overflow用户

发布于 2013-06-25 02:45:56

您的脚本将浏览器放入一个永恒的循环中,重新加载页面xss.php。这会将单词'payload‘放入logs.txt中,直到您停止javascript执行。

如果你想模拟表单提交,你必须显式地将POST数据发送到php脚本:

代码语言:javascript
复制
var page = require('webpage').create();
var url = 'http://127.0.0.1/xss/xss.php';
var data = 'x=phantom';
page.open(url, 'post', data, function (status) {
    if (status !== 'success') console.log('Network error');
    else
    {
        console.log('DONE');
    }
    phantom.exit();
});

这将向xss.php提供POST数据,并在logs.txt中附加“幻影”一词。但请注意,与浏览器不同,PhantomJS不会陷入无休止的循环,只会发送一次请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17281478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档