• 渗透学习之文件上传


    文件上传

    1、前台脚本检测扩展名

    上传Silic.php文件,发现不允许上传

     

    查看源代码,发现在前端定义了允许上传的文件类型,而php不在其中

     

    我们可以绕过前端,通过Burp代理修改文件类型

    Silic.php的扩展名先改为jpg,在上传的时候抓包,将filename="Silic.jpg"改为filename="Silic.php" 点击forword放包

     

    文件上传成功,可以访问

     

     

    2、服务器验证Content-Type检测文件类型 

    和上面一样上传Silic.php,不允许上传,但是报错形式和上面不一样

     

    查看网页源代码,可以看到前端并没有检测

     

    查看后端代码,发现设置了可以上传的文件类型

     

    所以,我们可以通过Burp代理抓包,修改content-type的类型为image/jpeg

     

    放包,文件上传成功

     

    3、服务器端验证文件扩展名

    有了上面两次的经验,首先上传Silic.php上传失败,抓包修改为Silic.jpg可以上传成功,但是无法执行。查看后端源代码

     

    这里的strrchr函数的原理是从左往右查找,知道找到最后一个点和后面的扩展名,将最后这个扩展名和黑名单匹配,如果黑名单没有,即能上传成功。

    问题来了,上传成功依旧不能执行,这里我们就要利用某些系统上的扩展名解析漏洞了。

    (这里不能使用00截断,因为strrchr函数遇到00截断的空字符就不会继续往后读了,所以依旧是拿php文件匹配黑名单。具体00截断的原理见下方)

    Apache2.0-2.2位置扩展名解析漏洞,它是从右往左开始判断扩展名来解析文件的,如果扩展名不被识别,就再往左判断,知道可以识别为止。

    例如下面实验中上传的Silic.php.fff文件,这个文件的.fff后缀是Apache不可识别解析的,它就会往前判断,当识别到php时就会把这个文件当作php文件解析了。

     

     

    4、服务器端验证图片文件头

    查看后端源代码

     

    getimagesize()函数会把文件内容读出来,通过识别文件头来判断真假图片。

    把文件用文本编辑器打开,会有文件头,这个文件头就是判断文件的类型,所以即使改变了扩展名,里面的内容是不会变的。

    真图片

     

    假图片

     

    遇到这种情况我们将一句话嵌入到图片中,构造图片马,上传图片,通过解析漏洞或其他方式将其还原。

    构造图片马的命令

     

    合成的图片马可以在代码的最后看到一句话木马

     

     这里我们介绍下怎么利用解析漏洞将其还原

    Apache.htaccess配置文件负责某一个目录下的网页配置,通过它可以实现分布式配置,可以实现网页301重定向,自定义404错误页面,改变文件扩展名,允许/阻止特定的用户或者目录的访问,禁止目录列表,配置默认文档等功能,IIS平台上不存在该文件。

    配置文件的开启

    Linux: vim /etc/httpd/conf/httpd.conf

    Windows:C:phpStudyApacheconfhttpd.conf

    修改配置文件

    建立.htaccess文件,写入

    AddType application/x-httpd-php .jpg

    就可以实现将.jpg文件按照php解析执行

    上传.htaccess文件到服务器目录,接着上传图片马,我将Silic.php和一张图片合成(两个文件在同一目录)

     

    500截断

    当服务器获取文件名时,如果Silic.phpp.jpg被更改为Silic.php0x00.fff时,认为00是截断符号,从而name=Silic.php,这里使用未作任何防护的一关

    上传Silic.phpp.fff文件抓包,使用Hex查看。修改最后十六进制7000

     

    返回Raw中看,已经变为空符号,放包,发现上传成功,上传成功的是Silic.php文件

     

  • 相关阅读:
    POJ 3468 A Simple Problem with Integers(线段树区间求和)
    windows+Ubuntu双系统 windows引导修复
    CSDN博文大赛火爆开启
    TNS-12541,TNS-12560,TNS-00511,TNS-12542,TNS-12560,TNS-00512数据库启动监听报错
    MResource
    【LeetCode】【Python】Linked List Cycle
    中间件解析FDMEMTABLE.delta生成SQL的方法
    TDSTCPServerTransport 的Filters
    DATASNAP压缩过滤器的使用
    咏南CS插件开发框架也可BS方式部署
  • 原文地址:https://www.cnblogs.com/heiwa-0924/p/12926579.html
Copyright © 2020-2023  润新知