记一次历史业务安全测试

发表于:2019-5-22 10:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:m3rryz    来源:m3rryz

  最近在对公司历史遗留的老业务进行安全测试,简单记录一下测试的过程。
  子域名是http://upload.xxxx.com/
 
  主页是一个phpinfo的页面,首先对网站进行文件扫描。
  wfuzz -w common.txt -z list,-.php-.html –hw 76 http://upload.xxxx.com/FUZZFUZ2Z
   ********************************************************
  * Wfuzz 2.3.4 - The Web Fuzzer                         *
  ********************************************************
  Target: http://upload.xxxx.com/FUZZFUZ2Z
  Total requests: 13839
  ==================================================================
  ID   Response   Lines      Word         Chars          Payload
  ==================================================================
  003313:  C=200      5 L          11 W    203 Ch  "crossdomain.xml - "
  006047:  C=200    562 L    2593 W  46219 Ch  "index - .php"
  006058:  C=200    562 L    2593 W  46219 Ch  "index.php - "
  008776:  C=301      0 L       0 W      0 Ch  "php - "
  012639:  C=200     86 L     179 W   2315 Ch  "uploadfile - .html"
  Total time: 131.0165
  Processed Requests: 13839
  Filtered Requests: 13834
  Requests/sec.: 105.6279
   扫描结果中index.php为首页的phpinfo页面,另外扫描发现了php目录和uploadfile.html文件。
  访问php目录返回401错误:
  pic2
  http://upload.xxxx.com/uploadfile.html 为空白页
  pic3
  查看源代码有所发现:
  
  pic4
  这里猜测phpPath为php目录,结果证实了我的猜想:
 
  pic5
  构造参数:
  
  pic6
  上次文件,查看返回:
 
  pic7
  图片成功上传,另外发现了一个命名疑似图片裁剪的文件phpcutPhoto.php
  先测试了文件上传漏洞,发现服务器进行了图片验证,然后强制改后缀,此路不通
  访问http://upload.xxxx.com/php/phpcutPhoto.php 发现文件不存在,这里走了些弯路
  后面测试发现地址应该是http://upload.xxxx.com/php/cutPhoto.php
  前面uploadHead.php中phpPath参数值为php,所以后面文件名误加了php,这里应该是以前的代码有bug
  
  pic8
  访问后提示打开失败,明显是缺少了图片地址的参数,这里可以使用WAScan、Arjun等工具进行参数爆破。我这里就简单用burpsuite fuzz爆破一下:
  
  pic9
  参数名可以考虑使用https://github.com/s0md3v/Arjun/blob/master/db/params.txt 里的参数名。
  这里我自己简单构造了一些常见的,没包括首字母大写的情况:
   img
  image
  images
  imgpath
  img_path
  file
  filename
  path
  file_path
  filepath
  参数Fuzz爆破结果:
  
  pic10
  返回中可以看到,虽然报了错误,但是图片剪切后的文件成功生成了:
 
  pic11
  访问同服务器的图片域名,发现文件存在:
  
  pic12
  现在我们可以来测试这个接口的本地文件读取和ssrf漏洞
  先测试本地文件包含:
 
  pic13
  path=/etc/passwd,返回/etc/passwd.jpg.jpg打开失败
  把path改成一个不存在的文件:
  
  pic14
  path=/etc/test,返回/etc/test打开失败
  当path为一个存在目录的情况:
  
  pic15
  测试发现读取一个存在的非图片后缀文件或目录时,会自动把path加上.jpg.jpg
  这样的话我们只能通过这个接口探测服务器的文件或目录,但无法进行正常的文件读取的操作
  另外我测试了ssrf,发现无法直接访问外部链接
 
  pic16
  突然发现忘记了php伪协议的操作
  
  pic17
  php://input没戏,另外尝试了其它协议配合截断读取的方法,也都以失败告终。
  但当我测试到path=php://filter/read=string.tolower/resource=http://m3rryz.com/ 返回有了数据
  
  pic18
  并且我的blog获取到了服务器的请求:
 
  pic19
  可以看到服务器请求了http://myblog.com/.jpg.jpg 并返回了404
  那么当我在blog上,构造一个x.jpg.jpg的文件,内容为/etc/passwd
  然后让path=php://filter/read=string.tolower/resource=http://m3rryz.com/x
  是否就可以绕过之前的限制,进行本地文件读取呢?
  然而现实很残酷:
 
  pic20
  这里path必须为真实图片,否则无法进行cut操作。:(
  不过过程还是有点意思的,对文件读取和ssrf漏洞了解更深了一些。
 
      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号