IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 2-7 【实验】14-图片马绕过+代码审计 -> 正文阅读

[PHP知识库]2-7 【实验】14-图片马绕过+代码审计

这节课,我们要开始讲pass-13,讲的跟我们之前稍有点不一样,因为这个漏洞,它不是单个的利用,是结合其它漏洞一块去利用

在这里插入图片描述

今天的漏洞是上传图片马到服务器,图片马就是图片的一种木马,就是带有木马的图片叫图片马

注意的有三点:

1.保证上传后的图片马中仍然包含完整的一句话或webshell代码。

2.使用文件包含漏洞能运行图片马中的恶意代码。

这点就是我们这篇文章讲的组合漏洞的一个利用,就是利用文件包含漏洞

3.图片马要.jpg,.png,.gif三种后缀都上传成功才算过关!

图片马就是我们在图片当中插入一句话木马,组合成的一个图片

文件包含漏洞是在php当中为了能够节省我们的开发时间,提高我们的开发效率,开发引入的一个叫文件包含的功能,这文件包含在java和python中,都有这个功能,在java当中叫impose什么包,什么包,在python中,也有同样引入包的功能,所以说,文件包含跟我们包的引入,没有太大的区别,就是用include,或者require,这两个函数,去引用不同的代码,然后当成我们本地网页的代码,来执行,这叫文件包含,就是在一个文件里面,包含另外一个文件

我们先上传一下webshell,抓包

在这里插入图片描述

我们会看到我们上传的一句话木马,以及它的文件名yijuhua.php,我们直接go,看它返回的结果

在这里插入图片描述

文件未知,上传失败,这个时候,它检查的是你上传的文件是未知的,最后我们要进行绕过,绕过,今天我们讲的是图片马,就是说,后台一种校验的方式,就是校验我们的文件头,前两个字节,来看一下,文件类型,它要上传的是png、gif,或者是其它的文件类型

那我们就以一个文件类型来举例

在这里插入图片描述

常用的文件头,有这些,一个图片文件通过文件头前面的几个字节来表示,我们当前的文件类型,比如在我们的gif文件里面,它的开头就是GIF 89A,这几个字符,来代表它是gif的文件,所以说,不同的文件,他有不同的文件头来表示,它属于不同的文件类型

有些程序,就取这个文件头,然后看一下文件头到底是什么类型,以此,来判断它到底属于什么文件

今天,我们就用gif的方式进行绕过,首先,我们把这个GIF 89A复制一下,到我们这里面粘添一下

在这里插入图片描述

这样就可以标识,我们当前文件是gif的类型,我们这个时候在上传,这个时候,就提示我们上传成功了,这个时候,我们把路径拷贝一下,代理关掉

这个时候,它会让我们使用文件包含漏洞,运行图片马中的恶意代码,然后这个超链接,我们去点一下

在这里插入图片描述

它会链到这里来,这个是后台代码的文件,首先,它会接触get型的参数,叫file,这个时候,我们输入?,file这个参数,参数对应的路径,就是我们文件的路径,这个路径,我们就选,我们刚才上传的gif文件,正常来说,包含这个gif之后,gif里面的php一句话木马,会被包含到include.php里面,虽然,他是gif的后缀,但是,它也是把它当作php代码,来执行,这就是我们的文件包含漏洞,也就是说,后缀名是什么无所谓,只要里面,有一句话木马,就OK,好,我们回车试一下

在这里插入图片描述

我们看到,我们没有看到我们的一句话木马,那是因为它已经被当作一句话木马被执行了,所以说,它不可能在页面显示,正常解析了吗

我们去连接一下这个木马

在这里插入图片描述

现在,我们介绍的就是文件上传漏洞的一个绕过方式,文件头绕过

那现在我们来看一下后台代码是怎么样的,原理是怎么样的,我们来读一下,后台代码

在这里插入图片描述

include引入一个文件,这就是文件包含,引入一个config.php

首先,它定义了一个函数,这个函数叫getReailFileType,去获取真实的文件类型

在php去运行的时候,它只是一个加载的阶段,它还没有进行实际调用,调用是在后面进行调用

$is_upload = false;
$msg = null;

$is_upload是否上传

$msg上传与否的消息

$temp_file = $_FILES['upload_file']['tmp_name'];

获取我们上传文件的临时文件名

$file_type = getReailFileType($temp_file);

获取我们当前上传文件的类型,这个FileType就是我们上面定义的函数,这个时候,代码才会执行到getReailFileType

$file = fopen($filename, "rb");

fopen打开文件的意思,打开的第一个参数是我们的路径,第二个参数是打开文件的方法,r读,b,bit字节,就是用字节码的方式,读这个文件,打开这个文件

$bin = fread($file, 2); //只读2字节

fread读取文件,读$file这个对象,读两个字节,因为这两个字节包含了图片的类型

fclose($file);

fclose把文件流进行关闭,这三句话,完美的组成了,打开、读取、关闭的一个完整流程

 $strInfo = @unpack("C2chars", $bin);

unpack解包,pack打包,要解包的时候,要解包bin,bin就是上面的两个字节,它读的时候,是以byte的方式去读的,我解包的时候,用的方法是C2chars,C是有序的字符,2,两个,chars数组的索引,它解包完是math,chars是一个key,当我们解掉两个的时候,相当于是chars1,chars2,结构是这样的,{“chars1”:xxxxx,“chars2”:xxxxx}

$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);  

这两个字符,用点的方式进行拼接,拼接完之后,做一个intval,把它转换为数字

switch($typeCode){      
        case 255216:            
            $fileType = 'jpg';
            break;
        case 13780:            
            $fileType = 'png';
            break;        
        case 7173:            
            $fileType = 'gif';
            break;
        default:            
            $fileType = 'unknown';
        }    

数字做一个switch判断,当这个数据是255216,就说明是jpg,当这个文件头是255216,那就一定是jpg

我们来做一个实验,现在我们有个a.php

在这里插入图片描述

第一个是137,第二个是80,对应着就是png

在这里插入图片描述

这样子,我们就能够非常理解用这串代码来获取类型

返回类型,如果是jpg、png、gif,把这个type,返回给filetype做变量,return回去

 if($file_type == 'unknown'){
        $msg = "文件未知,上传失败!";
    }

这里就开始做判断,如果文件类型是unknown,就说明是未知文件类型,上传失败

else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;

如果不是,生成我们要保存的目录

if(move_uploaded_file($temp_file,$img_path))

将我们临时的上传文件,放到我们上传的目录里面

$is_upload = true;

把这个变量标为true,说明上传成功

这整个过程,就是我们用图片马,绕过的方式

还有一种方式,就是通过两个文件的组合,来生成图片马,我们上面的那个方式是非常简陋的

接下来,我们将用命令的方式,在我们图片的后面,加上一句话木马的代码

我们将通过copy这个命令,如果大家没有用过,可以在后面,加个/?,就能够看到copy命令的一个用法,copy /?

在这里插入图片描述

首先copy加上我们的参数,/A或者/B,我们的source文件,/A或者/B,在加上我们的一个文件,就是把两个source拼接起来,然后用/A或者/B的方式进行输出,我们来试一下

首先copy命令,加上我们的png,然后/b,/b就是以一个二进制的方式进行表示,然后,加上一个我们的一句话木马,然后输出成一个246.png,copy 11.png /b + yijuhua.php /a 246.png

在这里插入图片描述

我们在目录里面看一下,我们打开这个图片

在这里插入图片描述

打开之后,我们会发现开头是ng,我们一看开头,就知道这是个png的图片

在这里插入图片描述

往后看,我们会发现,多加了一行,我们的一句话木马,看到这里,我们就知道图片马,就做成功了

这个时候,我们就要开始上传,抓包

在这里插入图片描述

上传之后,直接点forward

在这里插入图片描述

OK,上传成功,我们把这个路径给拷贝一下,代理关掉,访问一下

在这里插入图片描述

发现它是png开头,然后最终php代码,没有显示,它被成功解析了,用菜刀连接一下

在这里插入图片描述

这样也可以得到webshell,这篇文章讲了用图片马绕过的方式,第一种成功了,第二种,我这边没有成功

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-31 23:44:14  更:2022-03-31 23:45:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 12:07:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码