ref:http://blog.nsfocus.net/php-vulnerability-mining/

【干货分享】PHP漏洞挖掘——进阶篇

 
 

从常见的PHP风险点告诉你如何进行PHP漏洞挖掘,以及PHP渗透测试中的黑盒与白盒。你与PHP大师只有这一篇文章的差距!

一. PHP漏洞挖掘特点

PHP有着移植性好,容易部署,开发简单的特点,多用于中小型web应用的开发。这就导致了PHP应用的价值多体现在整站框架/模板的开发上。

程序员在设计一个站点的时候,永远会把功能实现和开发成本放在第一位,而这些恰恰是与安全相矛盾的。快速开发导致的后遗症就是,开发者在还未完全了解原站所有功能的情况下就将二次开发后的网站发布上线了。

很多开源模板被二次甚至三次开发,并冠以其它公司的名字。这类情况并不在少数。

PHP漏洞组成

PHP开发出来的系统存在很多特有漏洞,这些漏洞往往隐藏于服务端代码逻辑之中,而且极难通过黑盒的方式发现,传统的渗透性测试几乎无能为力。

于是我们需要转向更深处,看看盒子里面的构造。

二. PHP白盒审计

一句话描述我们要做的工作

         起点                                                             终点    

被引用过很多次的一张图

一些特别的代码结构

当然还有“坑爹”的PHP特性

见过很多次的一个界面

三. 如何进行漏洞挖掘——常见的PHP风险点

可操作的参数名

如果我们提交URL:

key.php?<script>alert(1);</script>=1&bbb=2 那么就导致一个xss的漏洞,想象一下如果这个key提交给include()等函数或者sql查询呢。

变量覆盖

a)这时我们提交URL: var.php?a=bye那么最后的显示效果应该是什么呢?

b)需要注意的是那个%3d。这个问题也同样会作用于mb_parse_str()

c)在register_globals开启的时候,请求var.php?GLOBALS[a]=aaaa&b=111,效果会如何呢?

d) 在register_globals被禁止的时候,import_request_variables可以同样起到对全局变量赋值的作用。

magic_quotes_gpc

魔术引号magic_quotes_gpc其实某些意义上来讲并不算是一个风险点,相反它其实是一个PHP特有的安全设置。一般来讲,懒惰的程序猿们常常认为魔术引号是用来掩盖他们代码缺陷的万用过滤器。可惜那帮无聊的白帽子们总能想出绕过办法..

下面几种情况可能会导致GPC被绕过1.$_SERVER

  • 2.getenv()得到的变量
  • 3.$HTTP_RAW_POST_DATA与PHP输入、输出流

数据库操作容易忘记使用单引号保护

宽字节注入

因此,各类编码的一编一转,最终被绕进去的很可能是程序员。可能出现问题的编码如下:

举个栗子——比如这段奇葩代码…

<?php

$sql = “SELECT * FROM article WHERE articleid='”.urldecode($_GET[id]).”‘”;

?>

GPC的高级“用法”

//提交                        ’
//魔术引号处理         \’
//我们要的字符         \

eval/preg_replace命令执行

命令执行无疑是PHP漏洞中最耸人听闻的一类了。简简单单一个请求就能够一步拿shell,这是多少黑客们梦寐以求的事情了…然而对于程序员来讲,犯下这样的错误往往就在一念之间。

ThinkPHP一键getshell

preg_replace的e修饰符会使进行替换时的replacement参数以PHP方式执行,又由于“作用导致分割后的第二个子串(参数值)被当做PHP函数执行。

http://www.11jia.net/index.php/module/action/param1/$%7B@phpinfo()%7D

非常见命令执行函数

其它PHP漏洞

session_destroy()任意删除文件漏洞(php4<4.3 php5<5.14):

当我们提交构造

val.php?del=1(cookie:PHPSESSID=/../1.php)时,由于session_destroy的作用会删除sess_/../1.php

特殊字符截断

著名的null字符截断————

提交“action=/etc/passwd%00”中的“%00”将截断后面的“.php”

当然还有一些在梦游的程序员…

四. 黑盒与白盒的统一

黑盒与白盒

软件测试中的黑盒与白盒

PHP渗透测试中的黑盒与白盒

典型的两种思路

平时的学习应该如何加强

对于PHP站点的web安全评估需要引入的几点:

五. 学习资料

  • http://www.php100.com/
  • http://www.5idev.com/
  • http://www.cnseay.com/
  • http://www.w3school.com.cn/
  • http://bbs.phpchina.com/
  • http://www.php-security.org/
  • http://bugs.php.net/http://sebug.net/
 

文章分类: 威胁通报

ref:【干货分享】PHP漏洞挖掘——进阶篇的更多相关文章

  1. 2. web前端开发分享-css,js进阶篇

    一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...

  2. web前端开发分享-css,js进阶篇

    一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践 经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无 从 ...

  3. [网站安全] [实战分享]WEB漏洞挖掘的一些经验分享

    WEB漏洞有很多种,比如SQL注入,比如XSS,比如文件包含,比如越权访问查看,比如目录遍历等等等等,漏洞带来的危害有很多,信息泄露,文件上传到GETSHELL,一直到内网渗透,这里我想分享的最主要的 ...

  4. ref:PHP反序列化漏洞成因及漏洞挖掘技巧与案例

    ref:https://www.anquanke.com/post/id/84922 PHP反序列化漏洞成因及漏洞挖掘技巧与案例 一.序列化和反序列化 序列化和反序列化的目的是使得程序间传输对象会更加 ...

  5. 一篇RPO漏洞挖掘文章翻译加深理解。

    这是我第一次尝试翻译一篇漏洞挖掘文章,翻译它也是为了加深理解它.这是一篇很有意思的漏洞挖掘文章. 前几天在看fd的博客,偶然看到了这篇文章,虽然有点老了.但是思路真的牛皮.我决定花费时间和精力研究它们 ...

  6. 【干货分享】Node.js 中文资料导航

    这篇文章与大家分享一批高质量的的 Node.js 中文资料.Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用 Node ...

  7. 最强最全干货分享:Android开发书籍、教程、工具等

    最全干货分享,本文收集整理了Android开发所需的书籍.教程.工具.资讯和周刊各种资源,它们能让你在Android开发之旅的各个阶段都受益. 入门<Learning Android(中文版)& ...

  8. (转) exp1-1:// 一次有趣的XSS漏洞挖掘分析(1)

    from http://www.cnblogs.com/hookjoy/p/3503786.html 一次有趣的XSS漏洞挖掘分析(1)   最近认识了个新朋友,天天找我搞XSS.搞了三天,感觉这一套 ...

  9. 干货分享:SQLSERVER使用裸设备

    干货分享:SQLSERVER使用裸设备 这篇文章也适合ORACLE DBA和MYSQL DBA 阅读 裸设备适用于Linux和Windows 在ORACLE和MYSQL里也是支持裸设备的!! 介绍 大 ...

随机推荐

  1. c语言时间计算

    C语言使用time_t结构体表示时间戳,它本质上是个long类型. 我们可以使用如下函数获取当前时间的时间戳: time_t time(time_t* timer) 函数功能:得到从标准计时点(一般是 ...

  2. ubuntu学习命令

    1.双系统下挂载windows硬盘 检测ntfs-3g是否安装:locate ntfs-3g 没有则安装: sudo apt-get install ntfs-3g 查看硬盘信息: sudo fdis ...

  3. Ping命令网络监测

    按照由近到远原则: 1. ping 127.0.0.1 先检查TCP/IP协议栈是否正常. 2. ping 本地ip 检查网卡是否工作正常. 3. ping 网关地址 检查和网关连接性. 4. pin ...

  4. css纯数字或字母换行

    #div { word-wrap:break-word; word-break:break-all; }

  5. spring boot(二):注解大全

    spring boot注解 @Autowired 注解的意思就是,当Spring发现@Autowired注解时,将自动在代码上下文中找到和其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方去. ...

  6. PHPMailer发送邮件(一)

    Github 地址:(已更新,适用于旧版) PHPMailer : https://github.com/PHPMailer/PHPMailer 一.基本要求 Web访问正常(apache可以正常访问 ...

  7. Perl6多线程1 Thread : new / run

    先看一个小例子: ) { #默认参数 say $name; } sub B(:name($name)) { #默认参数为 any say $name; } A(); A(); B(); B(name ...

  8. SQLite3数据库的操作

    数据库的操作 我们在这个项目中使用的是SQLITE3数据库软件. 通过使用SQLITE3进行创建数据库,创建表,插入记录,查询记录,更新记录,关闭数据库等操作来实现将相应的数据存入数据库中. 打开数据 ...

  9. C 中级 - SO_REUSEPORT 和 SO_REUSEADDR

    引言 - 问题由来 刚开始学习网络编程时候, 常听到一个词, 先开启 "端口复用 SO_REUSEADDR". 那时很一知半解, 就知道该那么写了. 心里一直有些奇怪, 语义不通呀 ...

  10. C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法

    本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...