AKun Wallpaper 代码审计实战分析1

2023-10-17 09:59

本文主要是介绍AKun Wallpaper 代码审计实战分析1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

萌新博主前一段时间一不小心发现了一个漏洞并获取了一个CVE编号,高兴了好一阵子。于是本萌新就想学习一下代码审计,挖一点CVE来玩一玩。最终选择了《代码审计——企业级Web代码安全架构》作为学习资料。学习一阵子后准备进行实战分析,于是就想起了自己多年前写的一个小破站,代码下载地址:https://gitee.com/rpsate/akun-wallpaper 。该网站功能较少,采用函数式编程,代码嵌套少,漏洞较多,十分适合代码审计入门。该网站的功能模块如下图所示:

在这里插入图片描述

网站部署

首先在mysql中创建一个名为 searchimages的数据库。

mysql -uroot -proot #此处实例账号和密码都为root
create database searchimages #创建数据库

然后将网站根目录中的 searchimages.sql导入该数据库中,网站后台的默认账号和密码是admin:admin

use searchimages
source D:\phpstudy\www\searchimages.sql #导入数据库

然后修改文件/configs/config.php中数据库账号和密码即可。

在这里插入图片描述

XSS漏洞

漏洞分析

首先通过审计工具fortify自动审计,这个工具可以扫描出可能存在的漏洞代码,然后再进行人工分析。扫描后发现存在三十多个可能存在xss漏洞的代码。

在这里插入图片描述

如下图中第一个xss漏洞在jquery.3.3.1.js中,这个文件是调用的js库,暂时不用管。我们看到 editAdmi.php的29行,这里直接将 $username$email变量输出来。我们看到窗口的左下方有数据流走向分析,点击中间 Diagram按钮后会出现数据流的走向的图示。这可以直观的表示出数据从哪里来,中间经过了哪里,这样可以使我们更加快速的分析出代码中是否存在漏洞。

在这里插入图片描述

通过分析发现 $username$email直接从数据库中取出,未经处理直接输出在了页面上。这极有可能存在一个xss漏洞,接下来可以通过利用该漏洞来确认该处是否存在漏洞。

在这里插入图片描述

漏洞复现

下面我们来复现一下这个xss漏洞。登陆网站后台,在添加管理员页面的邮箱栏填写 "/><script>alert(1)</script>//,账号和密码任意,然后点击添加管理员按钮。

在这里插入图片描述

点击刚刚添加账号后面的修改按钮就跳转到了 editAdmin.php页面,然后就发现成功的弹出了一个提示框,这说明该处存在一个漏洞。

在这里插入图片描述

在这里插入图片描述

修复漏洞

书中提供了两种解决建议,分别为:特殊字符HTML实体转码,标签事件属性黑名单。黑名单的绕过方式多种多样,防范难度非常高,我们这里就采用特殊字符实体转码的方式,当然最好同时采用两种方法。

特殊字符HTML实体转码主要有两个函数: htmlentities()htmlspecialchars(),两者都是将html特殊字符转码,其区别是htmlspecialchars()只格式化& ' " <> 这几个特殊符号,htmlentities()会转换除了空格之外的特殊字符。

要注意的是使用htmlentities()如果不指定编码,遇到中文则会乱码。

两者默认都不会转义单引号 ',需要设置第二个参数来转义单引号。

第2个参数取值有3种,分别如下:

  • ENT_COMPAT(默认值):只转换双引号。
  • ENT_QUOTES:两种引号都转换。
  • ENT_NOQUOTES:两种引号都不转换。

如果不转义单引号,在特殊的情况下是会存在xss漏洞的,所以我们可以自定义一个同时对特殊字符和单引号转义的函数。该网站的 /lib/common.func.php文件被所有网页包含,可以在该页面中定义全局函数。

function my_htmlspecialchars($str) {return htmlspecialchars($str, ENT_QUOTES);
}

然后在每个数据输出点调用该函数即可,如下图所示。

在这里插入图片描述

然后我们刷新editAdmin.php页面,看到没有再次弹出提示框,而是在邮件输入框正常显示了全部的js代码。我们可以采用同样的方法可以修复其他xss漏洞。

在这里插入图片描述

漏洞分析

接下来看到 editImage.php的32行, $imagePath也是从数据库中直接取出,并且未处理直接输出在页面上。我们以同样的方法复现该漏洞,但是没有成功!所以可能是该数据再写入数据库前已经处理了。

在这里插入图片描述

接下来我们分析一下 $imagePath是如何进入数据库的,通过该变量名称得知该数据即图片的地址。我们看到 douploadImages.php的72行,通过分析得出 putImage函数是将图片的名称和地址写入数据库中。而图片的地址是通过时间戳生成唯一id,然后通过md5加密得到,所以这个数据源不可能存在恶意数据。所以通过分析得到该处不存在xss漏洞。

在这里插入图片描述

接下来分析 editImages.php的36行,变量$imageName是图片的名字,我们刚刚看到这个数据在输入数据库的时候没有处理,所以该处存在xss漏洞,需要调用特殊字符HTML实体转码函数来处理该数据。我们可以用同样的方法修复其他xss漏洞。

在这里插入图片描述

这篇关于AKun Wallpaper 代码审计实战分析1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/224638

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re