【网络安全】深入解析 PHP 代码审计技术与实战

前言

登录某个网站并浏览其页面时,注意到了一些看起来不太对劲的地方。这些迹象可能是该网站存在漏洞或被黑客入侵的标志。为了确保这个网站的安全性,需要进行代码审计,这是一项专门针对软件代码进行检查和分析的技术。在本文中,我们将深入探讨代码审计的重要性和如何进行有效的代码审计。

1.目录遍历漏洞

进入模板功能-模板管理功能处。

发现此处的功能点可以遍历目录下的文件,接下来我们抓包查看当前功能点的代码。

这里说句题外话,之前有不少小伙伴私信我要网络安全相关的资源,我这里都整理好了,需要的自取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费领取

通过路由找到对应的文件 template.php ,然后接着通过 mudi=manage 进行分支选择进入到对应的函数中。

进入 template.php 文件。

在 manage() 函数中,首先传入了两个参数, dirStr 参数则是控制路径的参数,而 sel 参数则是控制是否进入代码的 if,而最后将路径传入到 File 类下的 GetDirList() 函数中。跟进 GetDirList() 函数

发现使用 opendir() 函数列出目录下的文件

漏洞复现:

进入模板管理功能处,然后进行抓包。

抓包之后,进行测试。

然后在 dirStr 使用.../../来测试目录穿越。

2.任意文件读取漏洞

全局 fread() 函数,发现 Read()函数中调用了 fread() 函数。

然后搜索 Read() 函数的调用情况。

进入 classFile.php 文件。

然后搜索 fread()函数的用法。

发现在 sysCheckFile_deal.php 文件中调用了 File::read() 函数,跟进该函数。

漏洞复现:

根据路由,去构造 url 路径,然后访问。

接着抓包,配合../进行目录穿越读取文件。

3.任意文件删除漏洞

在测试模板管理功能点处,发现该处存在一个删除的功能点,发现存在任意文件删除漏洞。

首先我们通过路由找对相应的源代码 template_deal.php 文件,且这里的路由指向为 DelFile() 函数,该函数中接收了三个参数,其中 filePath 参数为主要控制路径的参数,将 filePath 参数带入到 File::Del()中进行删除。跟进 del() 函数

该函数很简单,首先判断路径是否为空,不为空修改权限最后进行文件的删除操作。

漏洞复现:

进入功能点处。然后点击 X 号。

然后在根路径写入一个 xxx.txt 文件。

然后在 filepath 参数后配合../来删除文件。

4.msql_getshell

在 黑盒 测试中中存在一个 SQL 语句调试 的功能点,该处没有对 SQL 语句关键字的过滤而造成 SQL 语句的任意执行,导致 getshell。

进入功能点处。

然后执行简单的 SQL 语句进行测试。

然后使用抓包工具来定位路由。

然后看一下代码,发现文件的开头以条件分支来选择对应要执行的功能点,由于上述 mudi=sql ,所以我们找到该处要执行的 sql 所对应的函数

通过 OT::PostStr 方法传入五个参数,其中 sqlContent 中是需要传入的 SQL 语句,而下面对

into_outfile 、 global general_log 等 SQL 关键字进行了过滤

在下面检测你填入的后台密码是否正确,如果正确继续执行下面代码,在代码中执行了我们输入

的 SQL 语句。未对其进行过滤完全,导致我们可以绕过过滤,来执行 SQL 语句。

漏洞复现:

首先去开启数据库日志功能,发现有过滤。

然后我们构造 payload 成功绕过过滤。

然后我们写入 phpinfp 文件。

构造 payload,成功写入。

访问之后,成功 getshell。

5.xss 漏洞

进入 users_deal.php

检测 type 是否为数组中的固定值,不是则带入 AlertEnd 方法中跟进 AlertEnd 方法

发现 type 被带<script>标签,使用 AlertFilter 函数处理后直接 alert,跟进 AlertFilter 函数

漏洞复现:

构造 payload,成功实现弹窗。

6.xss 漏洞 2

进入 read.php

发现在 GetCityData 函数中,idName 参数没有做任何处理,带入 GetCituOptionJs 函数中跟进该方法

该方法中 idName 参数被直接带入 DOM 方法中输出

漏洞复现:

要调用 GetCityData 函数需 mudi 参数,然后在 idName 处输入 XSS 的 payload。

成功实现弹框。

7.ssrf 漏洞

在浏览代码过程中,发现该处使用 curl_exec()函数来执行命令。

在函数 UseCurl 中,调用 curl_exec 函数执行了一个 curl 会话,只有 $url 参数可控,即可造成 ssrf 漏洞

进入 info_deal.php

跟进 AddOrRev 函数

接着跟进 PostStr 函数,发现其调用了 post 函数。

跟进 post 函数。

$img 参数通过 POST 方式传入,并且无过滤措施继续跟进 SaveRemoteFile 函数

第二个参数被带入 GetUrlContent 函数,跟进 GetUrlContent 函数

根据可控参数的带入,跟进 UseAuto 函数,并且此处传入 3 个参数 0,GET,$url

根据传入第一个参数 $seMode 为 0,会调用 UseCurl 函数,即进入漏洞关键函数

目前已知漏洞触发链条,接下来只需要根据进入函数的条件,构造 poc 即可

首先需要进入 AddOrRev 函数,只需 $mudi 值为 add

然后需要满足进入 SaveRemoteFile 函数的条件

发现输入的参数为 http://,接着来复现漏洞。

漏洞复现:

访问 url 地址,使用 post 方式,在 img 参数后面输入 dnslog 地址。

成功收到监听。

总结代码审计可以帮助发现各种类型的漏洞。这些漏洞可能包括输入验证问题、授权问题、会话管理问题、跨站点脚本漏洞、SQL 注入漏洞等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/30483.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一、Docker介绍

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、Docker是什么&#xff1f;二、Docker能干撒&#xff1f;三、容器虚拟化技术 和 虚拟机有啥区别&#xff1f;1.虚拟机2.容器虚拟化技术3.对比4.Docker为啥比VM虚拟机…

献给蓝初小白系列(二)——Liunx应急响应

1、Linux被入侵的症状​​ ​​https://blog.csdn.net/weixin_52351575/article/details/131221720​​ 2、Linux应急措施 顺序是&#xff1a;隔离主机--->阻断通信--->清除病毒--->可疑用户--->启动项和服务--->文件与后门--->杀毒、重装系统、恢复数据 …

AAC ADTS格式分析

标题 1.AAC简介2. AAC ADTS格式分析2.1 adts_fixed_header详细介绍2.2 adts_variable_header详细介绍 1.AAC简介 AAC音频格式:Advanced Audio Coding(⾼级⾳频解码)&#xff0c;是⼀种由MPEG-4标准定义的有损⾳频压缩格式&#xff0c;由Fraunhofer发展&#xff0c;Dolby, Sony…

vue3 + TS + elementplus + pinia实现后台管理系统左侧菜单联动实现 tab根据路由切换联动内容

效果图&#xff1a; home.vue页面代码 <template><el-container><el-aside width"collapse ? 200px : 70px"><el-button color"#626aef" click"collapseToggle()"><el-icon><Expand v-if"collapse"…

SQL Server 数据加密功能解析

数据加密是数据库被破解、物理介质被盗、备份被窃取的最后一道防线&#xff0c;数据加密&#xff0c;一方面解决数据被窃取安全问题&#xff0c;另一方面有关法律要求强制加密数据。SQL Server的数据加密相较于其他数据库&#xff0c;功能相对完善&#xff0c;加密方法较多。通…

Unity Class深拷贝问题分析

Unity Class深拷贝问题分析 前言常用解决方案1.手动复制字段2.使用序列化工具3.使用Instantiate方法(只能用于MonoBehaviour)4.重写运算符赋值5.使用Visual Scripting中提供的拷贝函数&#xff08;推荐&#xff09; 前言 在Unity项目中&#xff0c;我们面临一个读取数据表并深…

web前端-TypeScript学习

web前端-TypeScript学习 TypeScript 介绍TypeScript 初体验安装编译TS的工具包编译并运行TS代码 TypeScript 常用类型类型注解常用基础类型原始类型数组类型类型别名函数类型对象类型接口元祖类型推论类型断言字面量类型枚举any类型typedof TypeScript 高级类型class类class的基…

笔记:WebRTC 网络技术理论与实战(二)

WebRTC技术笔记 笔记&#xff1a;WebRTC 网络技术理论与实战&#xff08;一&#xff09; 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.n…

C语言之文件的读写(1)

前面三部分已经给大家介绍过了&#xff0c;网址发给大家方便大家复习 打开方式如下&#xff1a; 文件使用方式 含义 如果指定文件不存在 “r”&#xff08;只读&#xff09; 为了输入数据&#xff0c;打开一个已经存在的文本文件 出错 “w”&#xff08;只写&#xff09; 为了输…

OC(iOS)中常见的面试题汇整(大全)

你如何理解OC这门语言的?谈一下你对OC的理解? ​​​​​​​ OC语言是C语言的一个超集,只是在C语言的基础上加上了面向对象的语言特征,如:继承,封装,多态. 封装:把属性和方法封装成一个类,方便我们使用 多态:不同对象对于同一消息的不同响应,子类可以重…

同时安装vue-cli2和vue-cli3

同时安装vue-cli2和vue-cli3 发布时间环境安装后的效果安装vue-cli2安装vue-cli3vue-cli3和vue-cli2的区别vue-cli2目录结构vue-cli3目录结构 发布时间 vue版本发布时间Seed.js2013年vue最早版本最初命名为Seedvue-js 0.62013年12月更名为vuevue-js 0.82014年1月对外发布vue-j…

微软ChatGPT技术的底层支撑——GPU

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来看一看微软ChatGPT技术的底层支撑——GPU。 想要了解GPU&#xff0c;你必须要清楚CPU、GPU、TPU三者的关系。 微软的chatgpt是基于复杂的人工神经网络和强化学习的技术&#xff0c;这是如何运算的…

io.netty学习(八)零拷贝原理

目录 零拷贝 传统I/O操作存在的性能问题 零拷贝技术原理 虚拟内存 mmap/write 方式 sendfile 方式 带有 scatter/gather 的 sendfile方式 splice 方式 总结 io.netty学习使用汇总 零拷贝 零拷贝&#xff08;Zero-Copy&#xff09;是一种 I/O 操作优化技术&#xff0c…

web漏洞-反序列化之PHPJAVA全解(上)(37)

这个很重要 为什么会产生这个东西&#xff1a;序列化之后便于我们对象的传输和保存&#xff0c;这个作用就是为了数据的传递和格式的转换&#xff0c;我们称之为序列化。 在这给过程中&#xff0c;会涉及到一种叫做有类和无类的情况&#xff0c;开发里面经常看到的一个东西&a…

AbstractQueuedSynchronizer源码

介绍 基于队列的抽象同步器&#xff0c;它是jdk中所有显示的线程同步工具的基础&#xff0c;像ReentrantLock/DelayQueue/CountdownLatch等等&#xff0c;都是借助AQS实现的。 public abstract class AbstractQueuedSynchronizerextends AbstractOwnableSynchronizerimplemen…

使用omp并行技术加速最短路径算法-迪杰斯特拉(Dijkstra)算法(记录最短路径和距离)

原理&#xff1a; Dijkstra算法是解决**单源最短路径**问题的**贪心算法** 它先求出长度最短的一条路径&#xff0c;再参照该最短路径求出长度次短的一条路径 直到求出从源点到其他各个顶点的最短路径。 首先假定源点为u&#xff0c;顶点集合V被划分为两部分&#xff1a;集合…

【玩转Linux操作】Linux服务管理

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 文章目录 &#x1f354;服务(service)管理⭐service管理指令 &…

chatgpt赋能python:Python如何快速提取指定行和列的数据?

Python如何快速提取指定行和列的数据&#xff1f; 在进行数据分析和处理时&#xff0c;常常需要从海量数据中筛选出所需的数据。这时&#xff0c;Python是一款非常强大的工具&#xff0c;可以方便地进行大规模数据清洗和筛选。本文将介绍如何使用Python快速提取指定行和列的数…

chatgpt赋能python:Python提取指定位置字符

Python 提取指定位置字符 Python 是一种高级程序语言&#xff0c;其易读性、简单易学性和易维护性使其成为最受欢迎的编程语言之一。它可以用于各种数据分析和科学计算&#xff0c;包括搜索引擎优化&#xff08;SEO&#xff09;。 在SEO中&#xff0c;提取和处理数据是一个重…

监听关闭浏览器触发事件

关闭和刷新页面都会触发&#xff0c;一般都不用来做弹窗提示&#xff0c;一般用来做数据操作 // 监听页面关闭 清除本地缓存 window.onbeforeunload function (e) { localStorage.removeItem("statement"); }; // 监听页面关闭 提醒是否关闭 现在不允许自定义内容了…