记一次历史业务安全测试
- 2019 年 12 月 12 日
- 筆記
来源:http://www.51testing.com
最近在对公司历史遗留的老业务进行安全测试,简单记录一下测试的过程。
子域名是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漏洞了解更深了一些。
星云测试
http://www.teststars.cc
奇林软件
http://www.kylinpet.com
联合通测
http://www.quicktesting.net