buuctf web xss之光

前言

最后正在学习了解有关xss的知识。所以拿一些题来学习。从实战中学习嘛。

OK,话不多说,整活!!!

实战

今天我们用的是buu里的一道题)——XSS之光。听着名字还蛮好听的。

那我们先打开靶场。页面显示的就只是gungungun,真让人火大。参考了一下大佬的文章

工具的安装

首先还需要两个工具。dirb扫描目录(kali自带)和githack

dirb使用方法:dirb 网址

githack是需要自己安装的,本人在kali里安装的。

安装方法:git clone https://github.com/lijiejie/GitHack
使用方法:python GitHack.py 网址/.git
执行后会在本目录生成以网址为名字的文件夹

解题

首先我们先扫描一下目录,会发现.git泄露

那我们就用GitHack将源码下载下来。

知识点

 我们发现只有一个index.php。里面有一段代码

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

这里有一个知识点是_to string()

当对象被当作一个字符串使用时候调用时,会触发:_to string()

__to String() 方法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串

如何造成xss漏洞呢。我们来看,

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

exp:

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

如果将exp传入到源码里去,这时它会弹出一个会话框显示1(这里有点前端基础的都会明白)。这时就会构成xss漏洞,

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

此类适用于php7版本,同样有等效的原生php类还有Exception,适用于PHP5、PHP7。用法与error是一样的这里不在详细说明。

题目

我们上面已经拿到源码,源码就只有一个反序列化过程。然后大佬的文章上面说的是。需要找到php内置类来进行反序列化,而且还有echo,

有了它我们就有足够条件来使用_toString方法的类进行反序列化,我们使用Exception

就可以构造一小段代码:

<?php
$a = new Exception("<script>window.location.href='https://www.baidu.com'</script>");
echo urlencode(serialize($a));
?>

这里的window.location.href= 是运用了xss跳转

主要形成原因是 以前网站外部跳转时是直接接受参数然后跳转,导致了URL重定向漏洞.而现在网站喜欢加个跳转页,不会直接跳转,而是接受参数然后用js跳转. 这就有一个问题 如果未验证参数, js跳转时是可以接受js伪协议执行js代码的.

跑一下这个脚本然后再抓包就可以在响应头里面获得flag

 url解一下码即可

参考文献

xss之光

反序列化之php原生类利用

跳转xss

原文地址:https://www.cnblogs.com/awsole/p/14353247.html