PHP程序的常见漏洞攻击分析
PHP程序的常见漏洞攻击分析
<FORM METHOD="GET" ACTION="test.php"> <INPUT TYPE="TEXT" NAME="hello"> <INPUT TYPE="SUBMIT"> </FORM> |
<?php if ($pass == "hello") $auth = 1; ... if ($auth == 1) echo "some important information"; ?> |
<?php if (!($fd = fopen("$filename", "r")) echo("Could not open file: $filename /n"); ?> |
<?php include($libdir . "/languages.php"); ?> |
<?php passthru("/bin/ls /etc"); ?> |
<FORM METHOD="POST" ENCTYPE="multipart/form-data"> <INPUT TYPE="FILE" NAME="hello"> <INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="10240"> <INPUT TYPE="SUBMIT"> </FORM> |
$hello = Filename on local machine (e.g "/tmp/phpxXuoXG") $hello_size = Size in bytes of file (e.g 1024) $hello_name = The original name of the file on the remote system (e.g"c://temp//hello.txt") $hello_type = Mime type of uploaded file (e.g "text/plain") |
http://vulnhost/vuln.php?hello=/etc/passwd&hello_size=10240&hello_type= text/plain&hello_name=hello.txt |
$hello = "/etc/passwd" $hello_size = 10240 $hello_type = "text/plain" $hello_name = "hello.txt" |
<?php if (file_exists($theme)) // Checks the file exists on the local system (noremote files) include("$theme"); ?> |
In main.php: <?php $libDir = "/libdir"; $langDir = "$libdir/languages"; ... include("$libdir/loadlanguage.php": ?> In libdir/loadlanguage.php: <?php ... include("$langDir/$userLang"); ?> |
<?php session_destroy(); // Kill any data currently in the session $session_auth = "shaun"; session_register("session_auth"); // Register $session_auth as a session variable ?> |
新版本的PHP都会自动把"$session_auth"的值设置为"shaun",如果它们被修改的话,以后的脚本都会自动接受修改后的值,这对无状态的Web来说的确是种很不错的工具,但是我们也应该小心。 一个很明显的问题就是确保变量的确来自session,例如,给定上面的代码,如果后续的脚本是下面这样的话:
<?php if (!empty($session_auth)) // Grant access to site here ?> |
上面的代码假定如果"$session_auth"被赋值的话,就是从session,而不是从用户输入来赋值的,如果攻击者通过表单输入来赋值的话,他就可以获得对站点的访问权。注意攻击者必须在session注册该变量之前使用这种攻击方法,一旦变量被放进了session,就会覆盖任何表单输入。 Session数据一般是保存在文件中(位置是可配置的,一般是"/tmp"),文件名一般是类似"sess_<session id>"的形式,这个文件包含变量名称,变量类型,变量值和一些其它的数据。在多主机系统中,因为文件是以运行Web服务器的用户身份(一般是nobody)保存的,因此恶意的站点拥有者就可以通过创建一个session文件来获得对其它站点的访问,甚至可以检查session文件中的敏感信息。 Session机制也为攻击者把自己的输入保存在远程系统的文件中提供了另一个方便。对于上面的例子来说,攻击者需要在远程系统放置一个包含PHP代码的文件,如果不能利用文件上载做到的话,他通常会利用session为一个变量按照自己的意愿赋一个值,然后猜测session文件的位置,而他知道文件名是"php<session id>",所以只需猜测目录,而目录一般就是"/tmp"。 另外,攻击者可以任意指定"session id"(例如"hello"),然后用这个"session id"创建一个session文件(例如"/tmp/sess_hello"),但是"session id"只能是字母和数字组合。 如何通过数据类型进行攻击? PHP具有比较松散的数据类型,变量的类型依赖于它们所处的上下文环境。例如:"$hello"开始是字符串变量,值为"",但是在求值时,就变成了整形变量"0",这有时可能会导致一些意想不到的结果。如果"$hello"的值为"000"还是为"0"是不同的,empty()返回的结果也不会为真。 PHP中的数组是关联数组,也就是说,数组的索引是字符串型的。这意味着"$hello["000"]"和"$hello[0]"也是不同的。 开发程序的时候应该仔细地考虑上面的问题,例如,我们不应该在一个地方测试某个变量是否为"0",而在另外的地方使用empty()来验证。 如何通过容易出错的函数进行攻击?下面是一份比较详细的容易出错的函数列表: <PHP代码执行> require():读取指定文件的内容并且作为PHP代码解释 include():同上 eval():把给定的字符串作为PHP代码执行 preg_replace():当与"/e"开关一起使用时,替换字符串将被解释为PHP代码 <命令执行> exec():执行指定的命令,返回执行结果的最后一行 passthru():执行指定命令,返回所有结果到客户浏览器 ``:执行指定命令,返回所有结果到一个数组 system():同passthru(),但是不处理二进制数据 popen():执行指定的命令,把输入或输出连接到PHP文件描述符 <文件泄露> fopen():打开文件,并对应一个PHP文件描述符 readfile():读取文件的内容,然后输出到客户浏览器 file():把整个文件内容读到一个数组中 如何增强PHP的安全性? 我们在上面介绍的所有攻击对于缺省安装的PHP4都可以很好的实现,但是PHP的配置非常灵活,通过配置一些PHP选项,我们完全可能抵抗其中的一些攻击。下面我们按照实现的难度对一些配置进行了分类: *低难度 **中低难度 ***中高难度 ****高难度 如果你使用了PHP提供的所有选项的话,那么你的PHP将是很安全的,即使是第三方的代码也是如此,因为其中很多功能已经不能使用。 **** 设置"register_globals"为"off" 这个选项会禁止PHP为用户输入创建全局变量,也就是说,如果用户提交表单变量"hello",PHP不会创建"$ hello",而只会创建"HTTP_GET/POST_VARS['hello']"。这是PHP中一个极其重要的选项,关闭这个选项,会给编程带来很大的不便。 *** 设置"safe_mode"为"on" 打开这个选项,会增加如下限制: 1. 限制哪个命令可以被执行 2. 限制哪个函数可以被使用 3. 基于脚本所有权和目标文件所有权的文件访问限制 4. 禁止文件上载功能 这对于ISP来说是一个"伟大"的选项,同时它也能极大地改进PHP的安全性。 ** 设置"open_basedir" 这个选项可以禁止指定目录之外的文件操作,有效地消除了本地文件或者是远程文件被include()的攻击,但是仍需要注意文件上载和session文件的攻击。 ** 设置"display_errors"为"off",设置"log_errors"为"on" 这个选项禁止把错误信息显示在网页中,而是记录到日志文件中,这可以有效的抵制攻击者对目标脚本中函数的探测。 * 设置"allow_url_fopen"为"off" 这个选项可以禁止远程文件功能。
转载于:https://www.cnblogs.com/fengju/archive/2008/06/14/6174077.html
PHP程序的常见漏洞攻击分析相关推荐
- Java程序员常见笔试题分析
一.基础 1.super()与this()的区别 super从子类中调用父类的构造方法:this在同一类内调用其他方法 super()调用父类的无参构造方法:this()调用本身这个类的无参构造方法 ...
- 网络安全运维流量攻击分析需要掌握的核心能力有什么
网络安全运维流量攻击分析需要掌握的核心能力 1.掌握sql注入攻击的流量特征 2.掌握XSS攻击的流量特征 掌握WebShell工具流量特征 3.掌握基于文件上传漏洞攻击的流量特征 4.掌握反序列化攻 ...
- ecshop漏洞复现分析
ECShop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店.系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序. ecshop漏洞复现分析我看seebug上关于它的漏洞有好 ...
- php进攻教程,如何对PHP程序中的常见漏洞进行攻击(下)_php基
如何对PHP程序中的常见漏洞进行攻击(下)_php基 发布时间:2016-06-17 来源: 点击: 次 如何对PHP程序中的常见漏洞进行攻击(下) 翻译:analysist(分析家) 来源:http ...
- 如何对PHP程序中的常见漏洞进行攻击(上)
如何对PHP程序中的常见漏洞进行攻击(上) 创建时间:2001-07-17 文章属性:翻译 文章来源:http://www.china4lert.org 文章提交:analysist (analysi ...
- 02-扫盲篇-操作系统常见安全漏洞攻击方式及操作系统用户权限分析
文章目录 操作系统常见安全漏洞攻击: WINDOWS操作系统用户权限分析 LINUX操作系统用户权限分析 Linux的单用户多任务 Linux的多用户多任务 用户(user)和用户组(group) 用 ...
- 常见WEB漏洞原理分析
一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了对输入字符串中夹带的 ...
- 美国国家安全局(NSA)“酸狐狸”漏洞攻击武器平台技术分析报告
本文转载自"CVERC "官网 作者:国家计算机病毒应急处理中心 近日,国家计算机病毒应急处理中心对美国家安全局(NSA)"酸狐狸"漏洞攻击武器平台(FoxA ...
- 针对美国国家安全局“酸狐狸”漏洞攻击武器平台的分析与应对方案建议
文章来源:国家计算机病毒应急处理中心 信息安全摘要 以下针对国家计算机病毒应急处理中心的研究报告进行针对性拓展研究.(请查看蓝字) 近日,国家计算机病毒应急处理中心对美国家安全局(NSA)" ...
- 墨者网络安全——投票常见漏洞分析溯源
操作步骤: 1.打开靶场,点击投票,可以发现弹出一个需要微信投票,说明我们的修改use-agrent为微信内嵌浏览器,前面的实验有说到,也可以自行百度: 除了要修改use-agrent外,我们还需要添 ...
最新文章
- C++多重继承师生类复盘
- [有限元] Ansys Workbench Mechanical 中的应力应变显示类型的文档翻译
- Kubernetes 学习总结(19)—— Kubernetes 集群管理平台如何选择?Rancher vs KubeSphere
- golang 初始化并赋值_Golang 切片综合指南
- 无码编程:无代码软件开发大行其道
- c语言float类型小数部分占几个字节,c语言float类型小数点后位数
- 二、制作BOM表格--物料表格--Bill of Materials
- App Store审核规范
- telegram bot : 自动下载youtube视频 发送到电报客户端
- 阜阳市计算机学校助学金申请书,计算机专业学生助学金申请书范文
- 【b站雅思笔记】Charlie有好好学习 - 雅思机经8-14
- 七周成为数据分析师 | 数据分析思维
- 乐园管理系统| 乐园小程序 | 数字化门店会员管理
- Docker容器——重命名镜像的TAG
- 解决Antimalware Service Executable(windows defender)占用过高CPU和内存的方法
- 读了两年“游戏学院”才知被忽悠
- BZOJ3510 首都
- 带有滚动效果的ViewPager
- 黄淮学院计算机类专业属于几本,黄淮学院是几本院校
- 仿网易云音乐app tab栏滑动效果
热门文章
- ps cs6导出html,渲染视频使用不了是怎么回事?pscs6ex – 手机爱问
- 阶段3 1.Mybatis_12.Mybatis注解开发_8 mybatis注解开发使用二级缓存
- 获取URl后的查询参数
- 20181030函数2
- easyui datagrid 遇到的坑 cannot read property ·· pageNum bug and so on
- mysql学习笔记4
- Async.js——Node世界中被依赖最多的库No.3
- 写了一个验证数字范围的正则表达式
- mysql(安装、启动、删除)服务
- java中equals以及==的用法(简单介绍)