很多想做渗透测试的朋友都想了解关于PHP后门漏洞的安全测试重点方法,以及该如何预防被中php后门,本节由我们的安全高级渗透工程师进行全面的讲解,来让大家更好的理解和了解php代码的安全检测,让网站得到最大化的安全保障,安全保障了,网站才能更长远的运行下去。

4.1.1. 后门

4.1.1.1. php.ini构成的后门

利用 auto_prepend_file 和 include_path

4.1.1.2. .htaccess后门

php_value auto_append_file .htaccess

#<?php phpinfo();

php_flag allow_url_include 1

php_value auto_append_file data://text/plain;,PD9waHAgcGhwaW5mbygpOw==

#php_value auto_append_file data://text/plain,%3C%3Fphp+phpinfo%28%29%3B

4.1.1.3. .user.ini文件构成的PHP后门

.user.ini可运行于所有以fastcgi运行的server。利用方式同php.in

4.1.2. 反序列化

4.1.2.1. PHP序列化实现

PHP序列化处理共有三种,分别为php_serialize、php_binary和 WDDX,默认为php_serialize,可通过配置中的 session.serialize_handler 修改。

其中php_serialize的实现在 php-src/ext/standard/var.c 中,主要函数为 php_var_serialize_intern ,序列化后的格式如下:

  • boolean
  • b:;
  • b:1; // true
  • b:0; // false
  • integer
  • i:;
  • double
  • d:;
  • NULL
  • N;
  • string
  • s::"";
  • s:1:"s";
  • array
  • a::{key, value};
  • a:1:{s:4:"key1";s:6:"value1";} // array("key1" => "value1");
  • object
  • O::":{};
  • reference
  • 指针类型
  • R:reference;
  • O:1:"A":2:{s:1:"a";i:1;s:1:"b";R:2;}
  • $a = new A();$a->a=1;$a->b=&$a->a;

4.1.2.2. PHP反序列化漏洞

php在反序列化的时候会调用 __wakeup / __sleep 等函数,可能会造成代码执行等问题。若没有相关函数,在析构时也会调用相关的析构函数,同样会造成代码执行。

另外 __toString / __call 两个函数也有利用的可能。

其中 __wakeup 在反序列化时被触发,__destruct 在GC时被触发, __toString 在echo时被触发, __call 在一个未被定义的函数调用时被触发。

下面提供一个简单的demo.

利用 auto_prepend_file 和 include_path

输出

construct

Data's value is raw value.

destruct

string(44) "O:4:"Demo":1:{s:4:"data";s:9:"raw value";}"

把序列化的字符串修改一下后,执行

unserialize('O:4:"Demo":1:{s:4:"data";s:15:"malicious value";}');

输出

wake up

Data's value is malicious value.

destruct

这里看到,值被修改了.

上面是一个 unserialize() 的简单应用,不难看出,如果 __wakeup() 或者 __desturct() 有敏感操作,比如读写文件、操作数据库,就可以通过函数实现文件读写或者数据读取的行为。

那么,在 __wakeup() 中加入判断是否可以阻止这个漏洞呢?在 __wakeup() 中我们加入一行代码

但其实还是可以绕过的,在 PHP5 < 5.6.25, PHP7 < 7.0.10 的版本都存在wakeup的漏洞。当反序列化中object的个数和之前的个数不等时,wakeup就会被绕过,于是使用下面的payload

unserialize('O:7:"HITCON":1:{s:4:"data";s:15:"malicious value";}');

输出

Data's value is malicious value.

destruct

这里wakeup被绕过,值依旧被修改了。

4.1.3. Disable Functions

4.1.3.1. 机制实现

PHP中Disable Function的实现是在php-src/Zend/Zend-API.c中。PHP在启动时,读取配置文件中禁止的函数,逐一根据禁止的函数名调用 zend_disable_function 来实现禁止的效果。

这个函数根据函数名在内置函数列表中找到对应的位置并修改掉,当前版本的代码如下:

和函数的实现方式类似,disable classes也是这样实现的

因为这个实现机制的原因,在PHP启动后通过 ini_set 来修改 disable_functions 或 disable_classes 是无效的。

4.1.3.2. Bypass

  • LD_PRELOAD绕过
  • PHP OPcache
  • Mail函数
  • imap_open

4.1.4. Open Basedir

4.1.4.1. 机制实现

PHP中Disable Function的实现是在php-src/main/fopen-wrappers.c中,实现方式是在调用文件等相关操作时调用函数根据路径来检查是否在basedir内,其中一部分实现代码如下:

PHPAPI int php_check_open_basedir_ex(const char *path, int warn)

{

/* Only check when open_basedir is available */

if (PG(open_basedir) && *PG(open_basedir)) {

char *pathbuf;

char *ptr;

char *end;

/* Check if the path is too long so we can give a more useful error

* message. */

if (strlen(path) > (MAXPATHLEN - 1)) {

php_error_docref(NULL, E_WARNING, "File name is longer than the maximum allowed path length on this platform (%d): %s

php中getdistance函数_php代码渗透测试 后门分析篇相关推荐

  1. php中getdistance函数_php计算两个经纬度地点之间的距离

    /** * @param $lat1 * @param $lng1 * @param $lat2 * @param $lng2 * @return int */ function getDistanc ...

  2. 渗透测试-地基钓鱼篇-Cobalt Strike钓鱼(二十五)

    ** 渗透测试-地基钓鱼篇-Cobalt Strike钓鱼(二十五) ** 作者:大余 时间:2020-12-17 简介: 渗透测试-地基篇: 该篇章目的是重新牢固地基,加强每日训练操作的笔记,在记录 ...

  3. 【每天学习一点新知识】渗透测试信息收集篇

    目录 1.网页直接获取信息 2.端口扫描 3.子域名查询 4. C段旁注 5.网络空间搜索引擎.谷歌语法 6.whois查询 渗透测试流程: 信息收集是渗透测试的前期工作,对于渗透测试来说十分重要.只 ...

  4. python中cos函数_Python代码中cos()函数有什么功能呢?

    摘要: 下文讲述Python代码中cos()函数的简介说明,如下所示: cos()函数功能 用于计算出x 弧度-所对应的的余弦值 cos()函数语法 math.cos(x) ---------参数说明 ...

  5. 在python中对于函数定义代码的理解正确的理解是_Python 5 函数

    一.判断题(共10小题,10分) 在Python中,自定义函数的关键字是def.(1分) A.对 B.错 参考答案: A 形参可以看做是函数内部的局部变量,函数运行结束之后形参就不可访问了.(1分) ...

  6. 网络安全渗透中常用的10种渗透测试方式

    1.信息收集 信息收集剖析这是所有侵略恶意攻击前提条件/原曲/基本.根据对互联网信息收集剖析,能够随之.针对性地制订仿真模拟黑客攻击恶意攻击方案,以提升侵略成功概率.减少曝露或被发现了的机率.信息收集 ...

  7. “不一样”的真实渗透测试案例分析

    前言 本文是由一次真实的授权渗透案例引申而出的技术分析和总结文章.在文章中我们会首先简单介绍这次案例的整体渗透流程并进行部分演绎,但不会进行详细的截图和描述,一是怕"有心人"发现端 ...

  8. Kali Linux渗透测试——MSF基础篇

    笔记内容参考安全牛课堂苑房弘老师的Kali Linux渗透测试教程 Metasploit是目前最流行.最强大.最具扩展性的渗透测试平台,一定程度上统一了渗透测试和漏洞研究的工作环境,使得新的攻击代码比 ...

  9. Kali Linux渗透测试——MSF实战篇(一)

    笔记内容参考安全牛课堂苑房弘老师的Kali Linux渗透测试教程 文章目录 一.信息收集 (一)db_nmap (二)Auxiliary模块 1.arp扫描 2.端口扫描 3.空闲扫描 4.UDP扫 ...

最新文章

  1. 百度首席科学家 Andrew Ng谈深度学习的挑战和未来
  2. f3arra1n3.4.1版本_Sysmon v11.1新版本功能测试报告
  3. kloxo 中php如何设置,Kloxo使用教程(5):〖网站设置〗——在Kloxo中设置伪静态...
  4. 推模式下dataset1下显示的是...未找到项目... 问题的解决
  5. /common/nlp/data/dictionary/CoreNatureDictionary.mini.txt加载失败
  6. jdbc 通过反射和元数据编写通用的查询对象方法
  7. Elasticsearch面向文档
  8. 如何在打开谷歌的时候强制跳转google.com
  9. 完全免费的公众号文章批量下载器
  10. 全国各省市经纬度范围
  11. bugzilla mysql_Centos 7 搭建Bugzilla5.0.4
  12. 分享6种时间管理方法,不要再说时间不够用了!
  13. JS判断是PC端还是WAP端
  14. 茶馆预定APP开发功能需求
  15. 快递查询工具,一键查物流,派件时效怎么分析
  16. 唯一插件化Replugin源码及原理深度剖析--插件的安装、加载原理
  17. android 淘宝登陆授权
  18. 仿射密码解密(Affine Cipher)
  19. 一流国企与外企的待遇比较
  20. ModuleNotFoundError: No module named ‘common‘

热门文章

  1. after markup mount - how is converted source code got executed
  2. debug the very first SAP Fiori application -Jerry的第一个SAP ui5应用调试经过
  3. 如何在CRM WebClient UI里打开外部链接
  4. 查看Product table entry数量的几种办法
  5. 使用ST05研究customer product id存储逻辑
  6. SAP CRM BSPWDApplication.do
  7. rtl support
  8. 如何利用BAPI SD_SALESDOCUMENT_CHANGE修改Sales Order的字段
  9. SAP CRM和C4C的客户主数据修改历史记录查询
  10. discuz forums.inc.php,【Discuz】积分机制实现解析