pikachu靶场的代码审计,和一些危险函数

news/2024/9/19 12:38:03/文章来源:https://www.cnblogs.com/lun-netsafe/p/18417198

对pikachu靶场进行代码审计,审计分析文件上传、命令执行漏洞,越权漏洞,sql注入,xxe漏洞

文件上传

client:


并未对后缀进行判断,只对大小做了验证

后端并未进行文件的类型校验,仅仅是生成了一个目录去保存上传的文件

同时对文件的保存路径暴露

MIME Type


只对mime进行了验证,很容易绕过,没使用白名单机制,过滤的不够严谨

getimagesize



对文件的类型和mime都进行了校验,但是还是可以执行,php的代码,可以上传图片马,使用文件包含一起梭哈。主要问题还是回显了upload的保存路径,这样前面生成的随机数毫无意义!

命令执行漏洞

ping远程执行漏洞


包含了header文件

header文件,并未有啥过滤,就是获取访问者的头信息等

判断是否有输入,并将传输进来的参数赋值给ip变量,判断当前电脑是什么类型,直接shell_exec执行了命令

未对$ip进行验证,就直接将变量拼接,不安全,同时调用shell_exec等函数也有极大的风险

eval远程代码执行漏洞


对用户的输入没有校验,而且使用了eval函数,攻击者可以直接使用system执行系统命令。因对用户的输入进行检查,同时少使用或者不使用eval函数。

越权漏洞

水平越权


先看login界面,使用了escape函数转义查询语句很安全,然后使用了session确定登录的人是谁。

看信息页面,第一个判断是否登录,第二个直接判断了username是否为空,但是此处并未使用session来确定用户的输入,导致了水平越权的漏洞。

垂直越权


和上面相同使用了,escape函数转义防sql注入,然后链接数据库判断是否有该用户,判断返回的level,进行登录

看admin登录界面,有对level的判断,要同时满足登录和level等于1才能进入,没有问题

看修改用户信息的页面,此处只判断了用户是否处于登录的界面,但是并没有判断用户的level是否等于1,造成垂直越权的漏洞。

同时我们还需要注意exit,如果对exit进行注释,即使有header的跳转但是程序并不会完结会继续执行


注意:此时我是未登录的状态,但是我依然会执行后面的if判断,此处需要注意,header只能跳转并不能结束代码执行。

sql注入

宽字节注入



先看一下escape函数,使用了mysqli_real_escape_string转义,转义规则如下

  • ' 会被转义为 \'
  • " 会被转义为 \"
  • \ 会被转义为 \\

此处刚好可以使用gbk的编码方式绕过,主要的漏洞就是上图箭头,在转义后给客户端设置了gbk编码

其余的sql注入




剩下的都是直接拼接产生的漏洞,所使用的只是不同的闭合方式,此处就不在赘述

xxe漏洞


使用了simplexml_load_string函数,将 XML 字符串转换为 SimpleXMLElement 对象的函数。造成了外部xml的注入。可以使用libxml_disable_entity_loader(ture)禁止从外部加载xml实体

梳理php语言中 owasp top 10 安全漏洞常见的危险函数并记录函数的常见用法

命令执行危险函数

  • system 执⾏命令并输出结果
  • shell_exec
  • passthru 和system一样
  • exec 执⾏命令只可获取最后⼀⾏结果
  • popen 执⾏命令并建⽴管道 返回⼀个指针 使⽤fread等函数操作指针进⾏读写
  • proc_open 同 popen
  • pcnti_exec 执⾏命令只返回是否发⽣错误
  • mail linux底层的sendmail发送信息,通过 -X 指定log文件记录邮件流量,实际可以达到写文件的效果
    例子
$to = 'Alice@example.com';
$subject = 'Hello Alice!';
$message=‘<?php phhpinfo(); ?>’;
$headers = "CC: somebodyelse@example.com";
$options = '-OQueueDirectory=/tmp -X/var/www/html/rce.php';
mail($to, $subject, $message, $headers, $options);

代码执行危险函数

  • eval 将传⼊的参数内容作为PHP代码执⾏ eval 不是函数 是⼀种语法结构 不能当做函数动态调⽤
  • assert 将传⼊的参数内容作为PHP代码执⾏ 版本在PHP7以下是函数PHP7及以上为语法结构
  • preg_replace 当preg_replace使⽤/e修饰符且原字符串可控时时 有可能执⾏php代码
  • call_user_func 把第⼀个参数作为回调函数调⽤需要两个参数都完全可控才可利⽤ 只能传⼊⼀个参数调⽤
  • create_funtion 根据传递的参数创建匿名函 数,并为其返回唯⼀名称 利⽤需要第⼆个参数可控 且创建的函数被执⾏
  • include 包含并运⾏指定⽂件 执⾏出错会抛出错误,但是会继续执行
  • require 同include 执⾏出错会抛出警告
  • include_once 同require 但会检查之前是否已经包含该⽂件 确保不重复包含
  • require_once 同include 但会检查之前是否已经包含该⽂件 确保不重复包含

文件读取危险函数

  • file_get_contents 读⼊⽂件返回字符串
  • readfile 读取⼀个⽂件,并写⼊到输出缓冲
  • fopen/fread/fgets/fgetss/fgetc/fgetcsv/fpassthru/fscanf 打开⽂件或者 URL读取⽂件流
  • file 把整个⽂件读⼊⼀个数组中
  • highlight_file 语法⾼亮⼀个⽂件
  • parse_ini_file 读取并解析⼀个ini配置⽂件
  • simplexml_load_file 读取⽂件作为XML⽂档解析

文件上传危险函数

  • file_put_contents 将⼀个字符串写⼊⽂件
  • move_uploaded_file 将上传的临时⽂件移动到新的位置
  • rename 重命名⽂件/⽬录
  • unlink 删除⽂件
  • rmdir 删除⽬录
  • extractTo 解压ZIP到⽬录
  • simplexml_load_string 加载解析XML字符串 有可能存在XXE 漏洞
  • simplexml_load_file 读取⽂件作为XML⽂档解析 有可能存在XXE 漏洞
  • request()->file()->move()
  • request()->file()->file() thinkphp文件

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xcode 16 正式版发布下载 - Apple 平台 IDE

Xcode 16 (16A242d) - Apple 平台 IDEXcode 16 (16A242d) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-16/,查看最新版。原创作品,转载请保留出处。The SDKs it contains are:iOS 18.0 (Build 22A3…

凡人歌:平凡公司的技术面试

我们见惯了大厂刷题面试宝典,大佬们只招世界上最优秀的人新闻。我们也乐见这些金字塔顶端给大家洒下的热点鸡汤。而现实却是平凡的小公司才是主流。我们见惯了大厂刷题面试宝典,大佬们只招世界上最优秀的人新闻。我们也乐见这些金字塔顶端给大家洒下的热点鸡汤。而现实却是平…

攻防世界 ————新手模式适合作为桌面 misc

(本篇文章参考大佬的解题) 下载附件,得到rar的的压缩包,解压缩,打开文件后有一张图片:打开图片发现什么也没有:使用软件Stegsolve打开图片看有什么问题:点击下一页:点击后发现有一个二维码:把他保存下来,使用软件扫码看看里面有什么: (我是用微信扫码的) 出现了十…

代码整洁之道--读书笔记(11)

代码整洁之道简介: 本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更…

Win7玩游戏Ctrl和空格不能一起按的解决方案

前几天在Windows7上玩《Minecraft》的时候,发现Ctrl和空格不能一起按,就开始研究,找到一个解决方案。 首先打开控制面板,点击更改键盘或其他输入法,就会进入文本服务与输入语言。点击更改键盘,进入高级键设置选项卡,点击下面的快捷键,再点击更改按键顺序。如图,随便把…

深度学习 初识学习 9.16

什么是SVM SVM(Support Vector Machine,支持向量机)是一种监督学习模型,用于分类和回归分析。其基本思想是找到一个超平面,使得两类样本在该超平面上的间隔最大化。这个间隔被称为“最大间隔”,而位于最大间隔边界上的样本点则被称为“支持向量”。 SVM的关键概念:超平面…

C++信奥老师解一本通题 1370:最小函数值(minval)

​ 【题目描述】有n个函数,分别为F1,F2,...,Fn。定义Fi(x)=Ai*x*x+Bi*x+Ci(x∈N∗)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的mm个(如有重复的要输出多个)。【输入】第一行输入两个正整数n和m。 以下nn行每行三个正整数,其中第ii行的三个数分别位Ai、Bi和C…

反DDD模式之关系型数据库

本文书接上回《图穷匕见-所有反DDD模式都是垃圾》,关注公众号(老肖想当外语大佬)获取信息: 最新文章更新; DDD框架源码(.NET、Java双平台); 加群畅聊,建模分析、技术实现交流; 视频和直播在B站。 背景 我在与开发者交流关于DDD的建模思路时,往往会遇到一个难题,就是…

常回家看看之house_of_catWO

house_of_cat 前言: house of cat 这个利用手法和前面提到的 house of kiwi ,和 house of emma 利用的手法是一个链子,当程序无法通过main函数返回时候,或者程序不能显性调用exit函数的时候,我们可以通过 __malloc_assert 来刷新IO流,当然这个函数在2.35之后移除了刷新IO…

C++11 线程同步接口std::condition_variable和std::future的简单使用sk

合集 - C++(1)1.C++11 线程同步接口std::condition_variable和std::future的简单使用09-17收起 std::condition_variable 条件变量std::condition_variable有wait和notify接口用于线程间的同步。如下图所示,Thread 2阻塞在wait接口,Thread 1通过notify接口通知Thread 2继续执…

安全:nftables:基础知识

一,policy: 1,原文档链接: https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/9/html/configuring_firewalls_and_packet_filters/assembly_creating-and-managing-nftables-tables-chains-and-rules_getting-started-with-nftables#con_basics-of-nft…

Leetcode 952. 按公因数计算最大组件大小

1.题目基本信息 1.1.题目描述 给定一个由不同正整数的组成的非空数组 nums ,考虑下面的图: 有 nums.length 个节点,按从 nums[0] 到 nums[nums.length - 1] 标记;只有当 nums[i] 和 nums[j] 共用一个大于 1 的公因数时,nums[i] 和 nums[j]之间才有一条边。 返回 图中最大连…