| |
|
开发:
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是否上传 $msg上传与否的消息
获取我们上传文件的临时文件名
获取我们当前上传文件的类型,这个FileType就是我们上面定义的函数,这个时候,代码才会执行到getReailFileType
fopen打开文件的意思,打开的第一个参数是我们的路径,第二个参数是打开文件的方法,r读,b,bit字节,就是用字节码的方式,读这个文件,打开这个文件
fread读取文件,读$file这个对象,读两个字节,因为这两个字节包含了图片的类型
fclose把文件流进行关闭,这三句话,完美的组成了,打开、读取、关闭的一个完整流程
unpack解包,pack打包,要解包的时候,要解包bin,bin就是上面的两个字节,它读的时候,是以byte的方式去读的,我解包的时候,用的方法是C2chars,C是有序的字符,2,两个,chars数组的索引,它解包完是math,chars是一个key,当我们解掉两个的时候,相当于是chars1,chars2,结构是这样的,{“chars1”:xxxxx,“chars2”:xxxxx}
这两个字符,用点的方式进行拼接,拼接完之后,做一个intval,把它转换为数字
数字做一个switch判断,当这个数据是255216,就说明是jpg,当这个文件头是255216,那就一定是jpg 我们来做一个实验,现在我们有个a.php 第一个是137,第二个是80,对应着就是png 这样子,我们就能够非常理解用这串代码来获取类型 返回类型,如果是jpg、png、gif,把这个type,返回给filetype做变量,return回去
这里就开始做判断,如果文件类型是unknown,就说明是未知文件类型,上传失败
如果不是,生成我们要保存的目录
将我们临时的上传文件,放到我们上传的目录里面
把这个变量标为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 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/23 7:27:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |