演示案例:
➢ WEB开发-原生PHP-超级全局变量
➢ WEB开发-原生PHP-代码审计案例
一、变量覆盖安全
$GLOBALS:这种全局变量用于在PHP脚本中的任意位置访问全局变量

二、数据接收安全
$_REQUEST:$_REQUEST 用于收集 HTML 表单提交的数据。
$_POST:广泛用于收集提交method=”post” 的HTML表单后的表单数据。
$_GET:收集URL中的发送的数据。也可用于提交表单数据(method=”get”)
$_ENV:是一个包含服务器端环境变量的数组。
$_SERVER:这种超全局变量保存关于报头、路径和脚本位置的信息。
三、文件上传安全
$_FILES:文件上传且处理包含通过POST方法上传给当前脚本的文件内容。
$_FILES[‘userfile’][‘name’] //客户端机器文件的原名称。
$_FILES[‘userfile’][‘type’] //文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。
$_FILES[‘userfile’][‘size’] //已上传文件的大小,单位为字节。
$_FILES[‘userfile’][‘tmp_name’] //文件被上传后在服务端储存的临时文件名。
$_FILES[‘userfile’][‘error’] //和该文件上传相关的错误代码。此项目是在 PHP 4.2.0 版本中增加的。
四、身份验证安全
$_COOKIE:是一个关联数组,包含通过cookie传递给当前脚本的内容。
本地客户端浏览器存储
设置cookie
setcookie(name, value, expire, path, domain);
name:cookie名
value:cookie值
expire:过期时间。常见写法:time()+3600一小时后过去、time()-1删除cookie
path:生效路径
domain:生效域名
$_COOKIE[‘cookie名’]:取cookie值
$_SESSION:是一个关联数组,包含当前脚本中的所有session内容。
:::info
目标服务端存储,存储记录的数据
session_start()开启session会话,这个必须在html前开启
$_SESSION[‘名’]=值,用来存储session数据
unset($_SESSION[名]),删除单个session数据
session_unset(),删除所有session数据
session_destroy(),删除session文件
:::
五、代码审计应用
1、DuomiCMS变量覆盖
漏洞利用原理:
首先这个漏洞是在common.php,里面存在可变变量漏洞。我们可以在URL中构造session的键和值,参数传入common.php,经过拼接后创建session相关变量。这个利用文件comment.php需要满足两点:第一,文件开头执行session_start();第二,引入存在漏洞的common.php。这样我们就能通过Payload伪造管理员session数据。
当访问admin/index.php时,admin/index.php引用了config.php,而config.php引用了check.admin.php,所以这一步就会鉴定我们是否有管理员权限。服务端读取对应session文件里面的session数据,判断管理员权限。因为之前已经伪造好了管理员session,校验通过,所以就能直接登录管理员后台。
参考:
https://blog.csdn.net/qq_59023242/article/details/135080259
这里有三个关键文件
a.common.php这个是漏洞形成代码
1 | foreach(Array('_GET','_POST','_COOKIE') as $_request) |
因为可变变量可以伪造session的值
b.攻击利用文件(如,comment.php)
1 | <?php |
主要就是要开启session,并且调用了漏洞代码,符合这个条件的其他文件也可以。这样就成功伪造了session凭证。
c. check.admin.php鉴权文件
哪个文件包含或引用了它,自动执行文件内容(里面有鉴权函数或实例),就会鉴权正好读到我们伪造的session数据然后登录管理员账号,index这种admin后台操作文件,它调用了执行鉴权了,我们输入payload之后再访问就成功通过管理员权限执行了
漏洞复现:
/interface/comment.php?_SESSION[duomi_admin_id]=10&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=zmh

伪造管理员session数据

成功登录
2、YcCms任意文件上传
参考:https://zhuanlan.zhihu.com/p/718742254
?a=call&m=upLoad send
漏洞利用:
首先用小皮搭建一下这个网站,登录到后台

这里有一个上传logo,这里采用了mime类型校验,只允许上传image/png和image/x-png,这里一会儿会从代码中讲解。

上传网址是http://yccms.com/admin/?a=call&m=upfile&type=content

我们确保mime类型是image/png,内容末尾写上后门,直接蚁剑连一下。

漏洞原理:

这个是关键的上传代码,看到这个方法里面创建了一个LogoUpload实例,并且调用了out()函数

这个是LogoUpload类内的out()函数,发现法设置了mime类型白名单,只允许image/png 和 image/x-png上传