关于靶场说几点:单纯用phpstudy 可能无法复现所有的漏洞,而且phpstudy中的php可能是线程不安全的,所以建议大家在自己本机或者虚拟机的中亲自搭建一下apache和php的环境,便于复现upload-labs的所有靶场环境。配置有问题的可以参考我写的这篇文章:
https://blog.csdn.net/qq_51550750/article/details/124062273
pass10-观察源码,思路生成
看源码:
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
对比pass5的源码:
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
pass10貌似没有什么变化。
如果我们尝试先加一个“.”,再加个空格,再加个“.”呢?最后是不是就是剩了一个点呢?
pass10-尝试上传
首先说明我用的靶场环境是phpstudy,其中php的版本是7.3.4nts:
然后上传文件,抓包,改名称:
然后forward:
貌似是上传成功了:
查看文件路径,
尝试连接:
连接成功。
pass11-观察源码
发现对比于第10关就只有一行:
$file_name = str_ireplace($deny_ext,"", $file_name);
其实功能就是在下面的黑名单中,如果发现了匹配,就替换成空:
"php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess","ini"
利用这个思路,是不是可以写成shell.phphpp
在过滤之后,是不是就变成了shell.php?
试试这个方法:
pass11-上传文件
抓包,改名:
貌似是上传成功了:
蚁剑测试连接:
简单总结一下
pass6:大小写过滤不全面
pass7:扩展名最后加一个空格
pass8:扩展名最后加一个点
pass9:扩展名最后加上::$DATA
pass10:扩展名最后加点空点
pass11:双写文件扩展名
觉得写的还不错的师傅点个赞吧!知识分享是无价的。