PHP常见的漏洞分析

文件包含

包含就是执行,脚本执行

file_include.php 代码

<?php

include('1.txt');

?>

txt 文件代码

<?php phpinfo();?> //暴出PHP版本

第二种

文件上传类

  1. 代码自主写

<html lang="en">

<head>

<meta charset="UTF-8">

<title>文件上传</title>

</head>

<body>

<h1>文件上传</h1>

<form action="" method="post" enctype="multipart/form-data">

<p><input type="file" name="upload"></p>

<p><input type="submit" value="上传"></p>

</form>

</body>

</html>

<?php

$name=$_FILES['upload']['name'];

$type=$_FILES['upload']['type'];

$size=$_FILES['upload']['size'];

$error=$_FILES['upload']['error'];

$tmpname=$_FILES['upload']['tmp_name'];

echo $name."<br>";//点为PHP字符串输出的连接符

echo $type."<br>";

echo $size."<br>";

echo $error."<br>";

echo $tmpname."<br>";

if ($type=='image/jpg'){

if(!move_uploaded_file($tmpname,'upload/'.$name)){

echo "文件上传失败";

}

else{

echo "文件上传成功!";

echo '/upload/'.$name;

}

}

else{

echo "文件类型不正确!";

}

?>

上传文件$_FILES 数组的知识点:

$_FILES['myFile']['name'] 客户端文件的原名称

$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"

$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。

$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。

$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)

UPLOAD_ERR_OK

值:0; 没有错误发生,文件上传成功。

UPLOAD_ERR_INI_SIZE

值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。

UPLOAD_ERR_FORM_SIZE

值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。

UPLOAD_ERR_PARTIAL

值:3; 文件只有部分被上传。

UPLOAD_ERR_NO_FILE

值:4; 没有文件被上传。

值:5; 上传文件大小为0.

  1. 编辑器引用

在浏览器中下载ueditor编辑器,利用代码插入到网页当中

  1. 引用开发框架实现

thinkphp

文件下载

  1. http://http://www.xiaodi.com/soft/软件.zip

  2. http://www.xiaodi.com/soft/dowm.php?filename=软件.zip

文件读取函数

<?php

//自定义文件文件夹读取函数

function getfilename(){

$dir=getcwd(); //获取当前脚本路径

$file=scandir($dir.'/soft'); //扫描路径+/soft

foreach ($file as $value){ //数组遍历//

if($value != '.' && $value != '..') {

$arr[] = $value;

echo $value.'<br>';

}

}

}

$_server[ ]函数知识点

$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]//浏览器语言

$_SERVER[‘REMOTE_ADDR’] //当前用户 IP 。

$_SERVER[‘REMOTE_HOST’] //当前用户主机名

$_SERVER[‘REQUEST_URI’] //URL

$_SERVER[‘REMOTE_PORT’] //端口。

$_SERVER[‘SERVER_NAME’] //服务器主机的名称。

$_SERVER[‘PHP_SELF’]//正在执行脚本的文件名

$_SERVER[‘argv’] //传递给该脚本的参数。

$_SERVER[‘argc’] //传递给程序的命令行参数的个数。

$_SERVER[‘GATEWAY_INTERFACE’]//CGI 规范的版本。

$_SERVER[‘SERVER_SOFTWARE’] //服务器标识的字串

$_SERVER[‘SERVER_PROTOCOL’] //请求页面时通信协议的名称和版本

$_SERVER[‘REQUEST_METHOD’]//访问页面时的请求方法

$_SERVER[‘QUERY_STRING’] //查询(query)的字符串。

$_SERVER[‘DOCUMENT_ROOT’] //当前运行脚本所在的文档根目录

$_SERVER[‘HTTP_ACCEPT’] //当前请求的 Accept: 头部的内容。

$_SERVER[‘HTTP_ACCEPT_CHARSET’] //当前请求的 Accept-Charset: 头部的内容。

$_SERVER[‘HTTP_ACCEPT_ENCODING’] //当前请求的 Accept-Encoding: 头部的内容

$_SERVER[‘HTTP_CONNECTION’] //当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。

$_SERVER[‘HTTP_HOST’] //当前请求的 Host: 头部的内容。

$_SERVER[‘HTTP_REFERER’] //链接到当前页面的前一页面的 URL 地址。

$_SERVER[‘HTTP_USER_AGENT’] //当前请求的 User_Agent: 头部的内容。

$_SERVER[‘HTTPS’]//如果通过https访问,则被设为一个非空的值(on),否则返回off

$_SERVER[‘SCRIPT_FILENAME’] #当前执行脚本的绝对路径名。

$_SERVER[‘SERVER_ADMIN’] #管理员信息

$_SERVER[‘SERVER_PORT’] #服务器所使用的端口

$_SERVER[‘SERVER_SIGNATURE’] #包含服务器版本和虚拟主机名的字符串。

$_SERVER[‘PATH_TRANSLATED’] #当前脚本所在文件系统(不是文档根目录)的基本路径。

$_SERVER[‘SCRIPT_NAME’] #包含当前脚本的路径。这在页面需要指向自己时非常有用。

$_SERVER[‘PHP_AUTH_USER’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。

$_SERVER[‘PHP_AUTH_PW’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。

$_SERVER[‘AUTH_TYPE’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型

直连下载(安全)限制下载文件类型

//自定义文件直连下载

function filenameurl($name){

$url='http://'.$_SERVER['HTTP_HOST'].'/blog/soft/'.$name;

header("location:$url"); //文件重定向 自动打开链接

}

传参下载(不安全) 文件可以任意下载

文件删除

文件删除

//自定义文件删除函数

function filedel($name){

@unlink($name);

文件夹删除

//自定义文件夹删除函数

function filedeldir($dir){

@rmdir($dir);

}

文件读取

文件读取

<h1>读取操作</h1>

<form action="" method="post">

<input type="text" name="r">

<input type="submit" value="读取">

</form>

<?php @$name=$_POST['r'];fileread($name);?>

//自定义文件读取函数

function fileread($name){

$f=fopen($name,"r");

$code=fread($f,filesize($name));

echo $code;

fclose($f);

}

文件增加写入

<h1>写入操作</h1>

<form action="" method="post">

文件:<input type="text" name="w">

内容:<input type="text" name="txt">

<input type="submit" value="写入">

</form>

<?php @$name=$_POST['w'];@$txt=$_POST['txt'];filewrite($name,$txt);?>

//自定义文件写入函数

function filewrite($name,$txt){

$f=fopen($name,"a+");

fwrite($f,$txt);

fclose($f);

}

r

打开文件为只读。文件指针在文件的开头开始。

w

打开文件为只写。删除文件的内容或创建一个新的文件,如果它不存在。文件指针在文件的开头开始。

a

打开文件为只写。文件中的现有数据会被保留。文件指针在文件结尾开始。创建新的文件,如果文件不存在。

x

创建新文件为只写。返回 FALSE 和错误,如果文件已存在。

r+

打开文件为读/写、文件指针在文件开头开始。

w+

打开文件为读/写。删除文件内容或创建新文件,如果它不存在。文件指针在文件开头开始。

a+

打开文件为读/写。文件中已有的数据会被保留。文件指针在文件结尾开始。创建新文件,如果它不存在。

x+

创建新文件为读/写。返回 FALSE 和错误,如果文件已存在。

PHP连接mysql

<?php

$conn=mysql_connect('localhost','root','root');//连接数据库

mysql_select_db('syguestbook',$conn); //基于数据库连接,连接数据库中的syguesbook表

?>

<?php

include('/config/conn.php');

$s=$_GET['id'];

$sql="select * from sy_guestbook where id=$s";

$result=mysql_query($sql,$conn); //执行$sql语句

echo '你搜索的'."'$s'".'结果如下:';

while($row=mysql_fetch_array($result)){

echo '<br><br><hr>';

echo $row['id'].'<br>';

echo $row['gName'].'<br>';

echo $row['gLogo'].'<br>';

}

文件搜索

<?php

include('/config/conn.php');

$s=$_POST['search'];

$sql="select * from sy_guestbook where id like '%$s%'"; //%通配符

$result=mysql_query($sql,$conn);

echo '你搜索的'."'$s'".'结果如下:';

while($row=mysql_fetch_array($result)){

echo '<br><br><hr>';

echo $row['id'].'<br>';

echo $row['gName'].'<br>';

echo $row['gLogo'].'<br>';

}

弹窗漏洞

alert()--警告框

confirm()--确认框

prompt()--提示框

<script>alert("大飞")</script>

PHP代码审计

$_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址。

$_SERVER["REMOTE_ADDR"] 来取得客户端的 IP地址

由此可以想到,服务器的本地ip地址127.0.0.1

改为127.0.0.1

COOKIE:

身份验证 存储到客户端浏览器内

危险:cookie修改、伪造、盗取

实验

发现包含验证cookie的文件

user为空,重新登录,那就user不为空,自动跳转inde文件

通过篡改cookie实现登录后台

SESSION:

session_start(); 创建一个session会话

身份验证 存储到服务端服务器内

危险:会话劫持

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大飞先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值