php代码审计:文件上传(文件类型检测)

upload-labs 14 源码:

在这里插入图片描述1.使用isset($_POST['submit'])检测POST提交数据中是否存在submit参数
2.定义$temp_file变量获取临时上传文件名信息。
3.定义$file_type用于接收getReailFileType()函数的检测结果(即判断图片类型)。
4.将上传文件带入getReailFileType()函数中进行图片文件类型识别。
使用fopen()函数以二进制读取(‘rb’)的方式去打开上传图片文件。
在这里插入图片描述
使用read()函数去读取对应图片二进制的前两个字节(因为图片在二进制中前两个字节表示图片的类型)并将结果赋值给$bin变量
在这里插入图片描述
使用unpack()函数对二进制进行解包,提权出特定数组。
使用intval()函数对结果进行十进制转换,该函数会返回变量对应的integer数值。
最终结果将用于进行下方的switch语句判断,即判断最终上传文件类型。
在这里插入图片描述
5.如果getReailFileType()函数返回结果是unknown,即识别不是jpg/png/gif,将直接返回文件上传失败,不会去调用move_uploaded_file()函数进行上传文件存储。

绕过方式:文件包含图片马
上传带有图片头的文件,即图片马,然后用文件包含漏洞去包含图片马文件。
upload靶场目录下有一个include.php文件用于包含图片马,有一个$file参数用于接收想要包含的文件。
在这里插入图片描述绕过方式一:伪造文件头(文件会被破坏,不会被正常识别成图片)
在文件内容最上面添加文件头标识(如gif文件头GIF89A),就可以上传带有PHP代码的.gif图片。
然后通过根目录下include.php
3.
在这里插入图片描述在这里插入图片描述在这里插入图片描述绕过方式二:使用CMD制作图片马(图片不会被破坏)

通过CMD制作图片马,将正常的图片与.php文件结合,生成一个新的图片。且生成新的图片可以正常打开。
命令:copy正常图片路径/b+PHP文件新图片名
在这里插入图片描述生成的新文件包含有php文件内容,且图片可以正常打开格式不会被破坏。
在这里插入图片描述
直接上传图片马,然后用include.php包含
在这里插入图片描述在这里插入图片描述

重点:
1.include()函数将包含的文件当成php代码去执行,且如果包含的文件中存在错误,只会抛出一个警告,不会影响下面语句的执行。
2.文件包含时的注意点:路径前面不需要加斜杠
在这里插入图片描述在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值