[7]-文件上传漏洞-绕过

一、后缀名绕过

简单的漏洞实际环境基本很少遇到,更多在于我们要去了解文件上传这个部分的代码开发者怎样去写,以及写的过程中存在的缺陷,从而尝试绕过

1.初探绕过----实际测试

  1. 使用bwapp,选择Unrestricted File upload等级选择medium

  2. 先测试shell.php
    测试最简单的文件上传漏洞
    image-20230123183905807
    此时返回错误信息,凡是以asp, aspx, dll, exe, jsp, php为后缀的均被拦截,采用的属于黑名单模式。

  3. 尝试修改webshell文件后缀,再次上传
    修改shell.phpshell.php3测试上传,发现成功上传

    image-20230123184223290

    测试能否作为webshell成功执行指令,发现能成功执行指令,即能作为webshell执行php指令
    image-20230123184703112

  4. 再次修改webshell文件后缀,上传测试
    修改shell.php3shell.php30测试上传,发现文件成功上传,且能成功访问。但将文件内容直接打印回显给浏览器,这说明服务器将该文件视为单纯的文本文件,故此种方式不能执行php代码
    image-20230123184440210
    测试结果如预测一致,php指令并没有被成功执行
    image-20230123185205431

  5. 思考:
    为什么后缀为php3可以,而php30不可以?

  6. 抽丝剥茧,了解漏洞本质原因
    关注漏洞本身成因,方能举一反三

2.Docker基础

  1. 虚拟化容器技术、与虚拟机较相似,无可视

  2. Docker交互
    通过-it指令,反弹shell,方能如操作Linux服务器一样操作docker内部文件,从而便于定位漏洞原因

  3. 进入docker容器
    查看所启动的容器,(二者差别详解参考:https://segmentfault.com/q/1010000017477906)

    # 看启动容器有哪些---最新容器管理命令---推荐---因一致性同image
    docker container list -a
    # 同时也可以利用---旧命令---二者均能使用
    docker ps -a
    

    指定doekr id,通过以下命令启动bash进入docker内调试

    # 进入docker内部,7732277baf1f为上述获取的container id
    docker exec -it 7732277baf1f bash
    

    详细如下:
    image-20230124110421004

二、绕过原理

探究解析原理,需要确定托管web服务的重要服务器是什么,然后再确定其配置项,找到语言解析模块,分析漏洞。

1.查看中间件配置文件

  1. 确定web中间件
    通过网络连接以找到托管web服务的主要服务器,执行:

    netstat -antp | grep 80
    

    确定80端口运行的服务,中间件为apache2,也就是apache2决定了什么类型的文件,应该被什么语句去解析
    image-20230124111216716

  2. 查看apache2主配置文件,确定语言解析模块位置
    apache2的主配置文件是/etc/apache2 下的apache2.conf文件,查看该文件,从而确定该配置文件如何指定我们的解析器工作的,这里可以使用catvivim等命令查看,找到语言解析模块位置。

    image-20230124112507871
    注:对于webserver(web中间件)而言,它并不知道后端所用的语言,但往往对所有预言都有解析能力。webserver和后端语言的连接通过它所加载的语言解析器模块,只有进入对于语言解析模块文件,才能确定最终漏洞成因。

  3. 找到php配置文件,并查看配置
    通过apache2.conf文件确定了语言解析模块所在位置为/etc/apache2/mods-enabled (文件中写的是相对目录,这里是绝对目录)。因为上传的webshell为php语句,故需要查看php语言解析模块配置,即查看**php5.conf**
    image-20230124114143080
    php5.conf文件中看到,只有以php、php3、php4、php5、pht、phtml为后缀的文件才能被php解析器解析,这里也就解释了,为什么前文绕过时,shell.php3可以作为webshell,而shell.php30不可以。

  4. 总结
    未能解析原因:php5.comf并没有指定正则表达式去匹配所上传的php30这个文件类型,故.php30只能被解析为一个正常文档

2.漏洞成因探究思路

  1. 确定对应端口webserver
  2. 确定webserver服务器配置文件,找到语言解析模块
  3. 查看对应语言配置文件,确定成因以及利用原理
  4. 举一反三,重点学习对于漏洞的探索、思考方式
posted @ 2023-01-24 12:17  缪白(Miubai)  阅读(252)  评论(0编辑  收藏  举报