网络安全自学篇-PHP代码审计(七)

一个网络安全学习爱好者在学习过程中记录下的笔记,希望在CSDN能和大家一起成长,学习,分享,进步,下面分享的是代码审计中文件上传、目录遍历、文件包含、任意文件读取、删除的案例,希望对入门网安的朋友们有所帮助,大神有兴趣看看即可,勿喷感谢,同时也欢迎各位师傅私聊交流学习。文章有所参考,也感谢教授我网安知识的师父们,感谢出生在这个互联网时代,知识触手可及。

文件上传

原理:攻击者上传的脚本文件被web应用解析并执行,通常是一个webshell,文件上传本身没问题,主要在于服务器怎么去处理。
文件上传的控制点:
Content-Length:上传内容大小
MAX_FILE_SIZE:上传内容最大长度
filename:文件名
Content-Type:文件类型
上传路径等
挖掘思路:
全局搜索上传函数,寻找上传点
案例:
upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" name="upload" value="点击上传">
    </form>
</body>
</html>

upload.php

<?php
header("Content-type:text/html;charset=utf-8");
$upload_dir = "D:\phpStudy\PHPTutorial\WWW\upload";
if(isset($_FILES['file'])) {
    $upload_name = $upload_dir."\\".$_FILES['file']['name'];
    move_uploaded_file($_FILES['file']['tmp_name'],$upload_name);
    echo "Name:".$_FILES['file']['name']."<br >";
    echo "Type:".$_FILES['file']['type']."<br >";
    echo "Size:".($_FILES['file']['size']/1024)."<br >";
}else{
    echo "fail";
}

目录遍历

原理:攻击者能够在web应用所在目录以外文件夹上任意存取文件夹、执行命令或查找数据。
案例:
file文件夹下有1.txt,上一级有2.txt
在这里插入图片描述
案例:

<?php
header("Content-type:text/html;charset=utf-8");
if(isset($_GET['file'])){
    readfile("file/".$_GET['file']);
}

在这里插入图片描述
在这里插入图片描述
绕过方式:
1、进行URL编码
.->%2e
->%2f
/->%5c
2、二次URL编码
.->%252e
->%252f
/->%255c
3、16位Unicode编码
.->%u002e
->%u2215
/->%u2216

文件包含

原理:在引入文件时参数名可控导致文件泄露甚至代码注入
相关函数:
include、include_once、require、require_once
本地包含
利用方式:
1、%00截断
2、错误日志文件
案例:

<?php
$file = $_GET['file'];
if(isset($file)){
    include ($file);
}

远程包含
allow_url_include = On
包含的文件不能为.php
在这里插入图片描述
利用方式:
%00截断
路径长度截断
?伪截断
php://输入输出流:php://filter/read=convert.base64-encode/resource=1.txt

任意文件读取、任意文件删除

任意文件读取
原理:通过提交精心设计的恶意数据可以访问任意文件或者写入任意内容。
挖掘思路:
allow_url_fopen = On
可回溯
相关函数:
fopen、file_get_contents、fread、fgets、fgetss、file、fpassthru、parse_ini_file、readfile
案例:

if(isset($_GET['file'])){
	$file = $_GET['file'];//readfile
	echo readfile($file);
    $fp = fopen($file,"r") or die("fail");//fopen
    $data = fread($fp,filesize($file));
    fclose($fp);
    echo $data;
    echo file_get_contents($file);//file_get_contents
}

在这里插入图片描述
任意文件删除
案例:

$file = $_GET['file'];
if(file_exists($file)){
	unlink($file);
}

猜你喜欢

转载自blog.csdn.net/weixin_44047795/article/details/106619004