资讯专栏INFORMATION COLUMN

通过代码审计找出网站中的XSS漏洞实战(三)

Ryan_Li / 1237人阅读

摘要:一背景笔者此前录制了一套的视频教程,在漏洞案例一节中讲解手工挖掘工具挖掘代码审计三部分内容准备将内容用文章的形式再次写一此前两篇已经写完,内容有一些关联性,其中手工挖掘篇地址为快速找出网站中可能存在的漏洞实践一本文主要记录通过代码审计的方式

一、背景

笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘、工具挖掘、代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完,内容有一些关联性,其中手工XSS挖掘篇地址为快速找出网站中可能存在的XSS漏洞实践(一)https://segmentfault.com/a/1190000016095198

本文主要记录通过代码审计的方式进行XSS漏洞挖掘,分为了找出关键位置,正向审计,反向审计三个部分,审计的系统为permeate渗透测试系统,测试系统的搭建可以参考笔者的第一篇文章。

二、操作概要

找出关键位置

正向审计

反向审计

三、找出关键位置

打蛇打七寸,说明在关键位置做事效率会更高,代码审计找出漏洞也是同理,因此笔者需要找出XSS关键的位置;对于目前的大多数Web应用来说,MVC模式是非常主流的一种形式,因此笔者这里将找到对应的控制器和模板,在这一节当中主要讲解找出位置的思路

3.1 找出控制器

找出控制器的方式通常是通过主入口文件与URL地址两块去分析,现在笔者打开首页,发现URL地址为

http://permeate.songboy.net/home/index.php

当点击板块后,URL地址变成了如下地址

http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6

从URL地址中可以看到不管首页还是板块页面,都经过URL地址home/index.php,因此笔者接下来便可以通过打开home/index.php文件来查看控制器所存放的位置,打开后代码如下所示


再次打开../core/common.php文件,代码如下所示

function includeAction($model, $action)
{
    //判断控制器是否存在
    $filePath = "./action/$model.php";
    if (is_readable($filePath)) {
        require_once $filePath;
        $class = new $model;
        if (is_callable(array($class, $action))) {
            $class->$action();
            return true;
        }
    }

    //如果没有找到对应的控制器,直接调用模板文件
    $tplFilePath = "./tpl/$model/$action.php";
    if (is_readable($tplFilePath)) {
        require_once $tplFilePath;
        return true;
    }

    echo "控制器或模板文件" . $filePath . "不存在!";
    die;
}

从代码中可以看出,其控制器文件存放在home/action/下,此时笔者打开此文件夹,可以看到几个php文件,如下图所示

回想刚才笔者所看到的URL地址如下

http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6

联想起来其控制器文件为tiezi.php,将其打开一看


果然发现了index方法

3.2 找出模板

得到控制器之后,笔者还需要找到模板存放的位置,通常模板与控制器是息息相关,因此可以控制其中找到蛛丝马迹,比如上面的代码当中,最后一行代码为displayTpl函数,从字面意思上可以理解为显示模板,因此笔者通过PHPStorm的跳转功能直接跳过去查看该函数的具体流程,找到代码如下所示

/**
 * 加载模板文件
 * @param $tplPath
 */
function displayTpl($tplPath, $data = [])
{
    $filePath = "./tpl/$tplPath.php";
    if (!is_readable($filePath)) {
        echo "模板文件" . $filePath . "不存在!";
        die;
    }

    foreach ($data as $key => $val) {
        $$key = $val;
    }

    require_once $filePath;

}

在上面代码当中可以看出模板存放于home/tpl目录下,通过文件夹打开查看,如下图所示

3.3 验证位置

通过上面的操作流程已经基本确定控制器与模板的位置,但为了防止意外,还是准确验证一下,在控制器中输出一个字符串1111111,在模板中输出字符串222222222,如果按照笔者之前所预想的,那么这两组字符串都会被输出,参考代码如下

在控制器中加入的测试代码如下

public function index()
{
    
    echo "11111111111";

在模板文件中加入的测试代码如下

222222222222222

现在会到浏览器,在当前页面单击鼠标右键,选中查看源代码,如下图所示

在源代码当中,搜索字符串11111,果然搜索到字符串,如下图所示

四、正向审计

在找到关键位置之后,笔者便可以针对性的去进行代码审计,XSS的代码审计主要有两种方式,正向代码审计,反向代码审计;正向代码审计的意思是从参数的接收到参数最后的使用这个流程进行检查,而反向审计则是相反从变量使用的位置上推到参数接收

4.1 接收参数位置

首先通过正向方式来进行代码审计,正向代码审计是从接收参数进行排查,因此找到控制器当中,通过编辑器的搜索功能,笔者在控制器文件当中搜索了关键字 $_GET 找到了tiezi.php控制器中的index方法,代码如下所示

    public function index()
    {
        $id = $_GET["bk"];
        $bk = &$id;
     
        //开始分页大小
        $page_size = 15;

        //获取当前页码
        $page_num = empty($_GET["page"]) ? 1 : $_GET["page"];

        //中间代码.................省略
       
        $data["bk"] = $bk;
        $data["count"] = $count;
        $data["page_size"] = $page_size;
        $data["page_count"] = $page_count;
        $data["page_num"] = $page_num;
        displayTpl("tiezi/index", $data);
    }
4.2 模板位置是否过滤

从上面代码当中可以看出参数bk并没有进行任何过滤,便直接放到了模板当中,这便留下安全隐患,如果在模板当中也没用进行安全过滤,那么就存在着反射型XSS漏洞,打开模板文件并搜索关键词bk,代码如下所示

可以看出,模板中确实没有进行安全过滤

4.3 漏洞验证
http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6%22%3E%3Cscript%3Ealert(123)%3C/script%3E

如下图所示

五、反向审计

反向审计则从模板中找出使用了那些变量,并反推变量的来源,以及是否进行了安全过滤

5.1 找出模板中的变量

通过PHPStrom编辑器的正则表达式功能匹配变量,正则表达式如下

echo $([a-z]*)

这个正则表达式是匹配输出变量,比如匹配字符echo $zhangsan,用PHPStorm匹配到的结果如下图所示

双击鼠标左键打开对应代码文件/home/search.php,代码如下所示

在代码中可以看出变量直接放在模板当中,如果在控制器当中也没有转义此变量的来源,那么很有可能会存在XSS问题。

5.2 查找变量来源

追踪变量$keyword,找到变量来源


从上面的代码当中可以看出变量$keywords并没有进行任何过滤,因此可以笃定此处也存在这XSS漏洞问题

5.3 漏洞验证

从代码的位置发现与前面的唯一入口不同,此代码文件并不是类文件,因此尝试直接访问,构造出URL地址如下

http://permeate.songboy.net/home/search.php?keywords=%E6%B5%8B%E8%AF%95%3Cscript%3Ealert(123)%3C/script%3E

通过火狐浏览器访问此URL地址之后,出现结果如下图所示

在提示框当中果然弹出了123的提示

六、新书推荐

如果对笔者的Web安全文章较为感兴趣,可以关注笔者更多文章内容,新书《PHP Web安全开发实战》,现已在各大网点销售,封面如下图所示

作者:汤青松

微信:songboy8888

日期:2018-10-09

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/dev...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29500.html

相关文章

  • 通过Web安全工具Burp suite找出网站中的XSS漏洞实战(二)

    摘要:一背景笔者月份在慕课网录制视频教程跨站漏洞加强安全里面需要讲到很多实战案例,在漏洞挖掘案例中分为了手工挖掘工具挖掘代码审计三部分内容手工挖掘篇参考地址为快速找出网站中可能存在的漏洞实践一本文主要记录利用安全工具进行漏洞挖掘部分,分为了设置代 一、背景 笔者6月份在慕课网录制视频教程XSS跨站漏洞 加强Web安全,里面需要讲到很多实战案例,在漏洞挖掘案例中分为了手工挖掘、工具挖掘、代码审...

    klinson 评论0 收藏0
  • PHP 开发者如何做代码审查?

    摘要:我们做代码审计之前选好工具也是十分必要的。一审计工具介绍代码审计系统功能介绍是一款基于开发的针对代码安全审计的软件。自定义审计规则。黑盒敏感信息泄露一键审计。挖掘这种漏洞主要是检查是否使用了,搜索和。 GitChat 作者:汤青松原文:PHP 开发者如何做代码审查?关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 【不要错过文末彩蛋】 前言 工欲善其事,必先利其器。我们做...

    Achilles 评论0 收藏0
  • WEB安全Permeate漏洞靶场挖掘实践

    摘要:简介最近在逛码云时候发现靶场系统感觉界面和业务场景设计的还不错所以过来分享一下同时也是分享一下我平时挖掘漏洞的一些思路吧这篇文章里虽然只简单介绍其中三种漏洞类型,但也是想是一个抛转引玉吧给安全新手提供一些挖掘思路下载地址地址国内地址这篇文章 简介 最近在逛码云时候发现permeat靶场系统,感觉界面和业务场景设计的还不错.所以过来分享一下. 同时也是分享一下我平时挖掘漏洞的一些思路吧,...

    罗志环 评论0 收藏0
  • 快速找出网站中可能存在的XSS漏洞实践(一)

    摘要:一背景笔者最近在慕课录制了一套跨站漏洞加强安全视频教程,课程当中有讲到的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些漏洞的挖掘过程记录下来,方便自己也方便他人。 一、背景 笔者最近在慕课录制了一套XSS跨站漏洞 加强Web安全视频教程,课程当中有讲到XSS的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些XSS漏洞的挖...

    Jason_Geng 评论0 收藏0

发表评论

0条评论

Ryan_Li

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<