74cms漏洞分析
很早以前的一个洞,看到很有意思就拿来看看
这是雨曾经审过的一个洞,因为读取方式很特别复现了一下
upload\plus\weixin.php
public function responseMsg()
{
if(!$this->checkSignature())
{
exit();
}
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr))
{ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$keyword = iconv("utf-8","gb2312",$keyword);
$time = time();
$event = trim($postObj->Event);
if ($event === "subscribe")
{
$word= "�ظ�j���ؽ����Ƹ���ظ�n����������Ƹ�������Գ�������ְλ�����硰��ơ���ϵͳ���᷵����Ҫ�ҵ���Ϣ������Ŭ�����������Ի��ķ���ƽ̨��лл��ע��";
$text="<xml>
<ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
<FromUserName><![CDATA[".$toUsername."]]></FromUserName>
<CreateTime>".$time."</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[".$word."]]></Content>
</xml> ";
exit($text);
}
if (!empty($keyword))
{ if($_CFG['sina_apiopen']=='0')
{
$word="��վ�Žӿ��Ѿ��ر�";
$text="<xml>
<ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
<FromUserName><![CDATA[".$toUsername."]]></FromUserName>
<CreateTime>".$time."</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[".$word."]]></Content>
</xml> ";
exit($text);
} $limit=" LIMIT 6";
$orderbysql=" ORDER BY refreshtime DESC";
if($keyword=="n")
{
$jobstable=table('jobs_search_rtime');
}
else if($keyword=="j")
{
$jobstable=table('jobs_search_rtime');
$wheresql=" where `emergency`=1 ";
}
else
{
$jobstable=table('jobs_search_key');
$wheresql.=" where likekey LIKE '%{$keyword}%' ";
}
$word='';
$list = $id = array();
$idresult = $this->query("SELECT id FROM {$jobstable} ".$wheresql.$orderbysql.$limit);
while($row = $this->fetch_array($idresult))
{
$id[]=$row['id'];
}
if (!empty($id))
{
$wheresql=" WHERE id IN (".implode(',',$id).") ";
$result = $this->query("SELECT * FROM ".table('jobs').$wheresql.$orderbysql);
while($row = $this->fetch_array($result))
{
//$row['jobs_url']=url_rewrite('QS_jobsshow',array('id'=>$row['id']));
$row['addtime']=date("Y-m-d",$row['addtime']);
$row['deadline']=date("Y-m-d",$row['deadline']);
$row['refreshtime']=date("Y-m-d",$row['refreshtime']);
$word.="{$row['companyname']}\n��Ƹְλ��{$row['jobs_name']}\nн�������{$row['wage_cn']}\n��Ƹ������{$row['amount']}\n�������ڣ�{$row['addtime']}\n��ֹ���ڣ�{$row['deadline']} \n--------------------------\n";
}
}
if(empty($word))
{
$word="û���ҵ������ؼ��� {$keyword} ����Ϣ�����������ؼ���";
$text="<xml>
<ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
<FromUserName><![CDATA[".$toUsername."]]></FromUserName>
<CreateTime>".$time."</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[".$word."]]></Content>
</xml> ";
exit($text);
}
else
{
$word=rtrim($word,'/\n');
$word=rtrim($word,'-');
$text="<xml>
<ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
<FromUserName><![CDATA[".$toUsername."]]></FromUserName>
<CreateTime>".$time."</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[".$word."]]></Content>
</xml> ";
exit($text);
}
}
else
{
exit("");
}
}
}
首先看到一个sql语句
$idresult = $this->query("SELECT id FROM {$jobstable} ".$wheresql.$orderbysql.$limit);
倒回去跟进几个变量
$orderbysql=" ORDER BY refreshtime DESC"
$limit=" LIMIT 6";
且当$keyword!=n/j时
$wheresql.=" where likekey LIKE '%{$keyword}%' ";
接着看$keyword
$keyword = trim($postObj->Content);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
重点来了$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
$GLOBALS["HTTP_RAW_POST_DATA"]这个东西其实基本上等于$_POST
唯一一点区别就是前者能接受不是php能识别的东西。
$postStr就是直接post过来的数据,没有经过任何处理,而且$GLOBALS["HTTP_RAW_POST_DATA"]这样传入进来的数据
可以无视gpc。
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);当然这里的$postStr应该是传入
xml然后经过simpxml_load_string解析。然后把xml解析过后的直接传入Content这就可以导致任意文件读出。
接着再看看条件
if(!$this->checkSignature())
{
exit();
}
跟进这个函数看看
在131到150行
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if($tmpStr == $signature )
{
return true;
}
else
{
return false;
}
}
}
所以在默认条件下,没有wx_token时,这个$tmpStr == $signature==da39a3ee5e6b4b0d3255bfef95601890afd80709,这是一个固定的值了,我们是完全可以利用上面的漏洞读入任意文件。
构造pyload
<?xml version="1.0" encoding="utf-8"?>
<! DOCTYPE ANY [
<!ENTITY % test SYSTEM "file:///c:/windows/win.ini">
]>
post传入这个可以读取
74cms漏洞分析的更多相关文章
- Zabbix 漏洞分析
之前看到Zabbix 出现SQL注入漏洞,自己来尝试分析. PS:我没找到3.0.3版本的 Zabbix ,暂用的是zabbix 2.2.0版本,如果有问题,请大牛指点. 0x00 Zabbix简介 ...
- PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/p ...
- CVE-2016-0143 漏洞分析(2016.4)
CVE-2016-0143漏洞分析 0x00 背景 4月20日,Nils Sommer在exploitdb上爆出了一枚新的Windows内核漏洞PoC.该漏洞影响所有版本的Windows操作系统,攻击 ...
- Java反序列化漏洞分析
相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...
- CVE-2014-1767 漏洞分析(2015.1)
CVE-2014-1767 漏洞分析 1. 简介 该漏洞是由于Windows的afd.sys驱动在对系统内存的管理操作中,存在着悬垂指针的问题.在特定情况下攻击者可以通过该悬垂指针造成内存的doubl ...
- CVE-2014-4115漏洞分析(2014.11)
CVE-2014-4115漏洞分析 一.简介 该漏洞是由于Windows的Fastfat.sys组件在处理FAT32格式的硬盘分区存在问题.攻击者利用成功可导致权限提升. 影响的系统包括: Windo ...
- FFmpeg任意文件读取漏洞分析
这次的漏洞实际上与之前曝出的一个 CVE 非常之类似,可以说是旧瓶装新酒,老树开新花. 之前漏洞的一篇分析文章: SSRF 和本地文件泄露(CVE-2016-1897/8)http://static. ...
- CVE-2016-10190 FFmpeg Http协议 heap buffer overflow漏洞分析及利用
作者:栈长@蚂蚁金服巴斯光年安全实验室 -------- 1. 背景 FFmpeg是一个著名的处理音视频的开源项目,非常多的播放器.转码器以及视频网站都用到了FFmpeg作为内核或者是处理流媒体的工具 ...
- Oracle漏洞分析(tns_auth_sesskey)
p216 Oracle漏洞分析: 开启oracle: C:\oracle\product\\db_1\BIN\sqlplus.exe /nolog conn sys/mima1234 as sysdb ...
随机推荐
- python读取文件后切片
from itertools import islice with open(“1.txt") as f: for a in islice(f,0,2): print(a)
- 2017SN多校D1T2 note:dp
题意: 给你一个长度为n的字符串s,并且告诉你有m对字母不能相邻,问你最少在s中取出多少个字符能够使这个字符串合法. 题解: 表示状态: dp[i] = max num of letters 考虑到第 ...
- 2017SN多校D1T1 loveletter:模拟
题意: 两张n*m的纸.一张透明纸,上面有些地方是黑的,有些地方是透明的.另一张纸上写满了字母. 你需要将透明纸放在写字的纸上,分别顺时针旋转0°.90°.180°.270°,每次从上到下.从左到右写 ...
- 高并发压力下导致数据库bug
环境信息: linux 6.1 + oracle11.2.0.3 RAC 问题现象: 学校晚上6点选课,人数大概有3000,7点时,数据库报错如下(数据库到6点多还是可以连接的),数据库hu ...
- 第三届蓝桥杯预赛c++b组
1.微生物增值 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍). 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每 ...
- 「P4996」「洛谷11月月赛」 咕咕咕(数论
题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...
- 《c# 实现p2p文件分享与传输系统》 二、 设计 - 续(NAT穿透)
c#实现P2P文件分享与传输系统 二.设计 - 续(NAT穿透) 首先要抱歉,因为这些日子较忙,没有写文章,这个系列拖了很久,现在开始继续. 上一篇文章介绍了p2p系统Tracker Server和 ...
- 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期
在Android学习笔记(二):安装环境中已经有相应的内容.看看何为新.这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之.本笔记主要讲述Android开发 ...
- Elasticsearch学习概念之curl
curl,简单认为是可以在命令行下访问url的一个工具.即增删改查. curl是利用URL语法在命令行方式下工作的开源文件传输工具,使用curl可以简单实现常见的get/post请求. 查看curl的 ...
- [poj1830]开关问题(高斯消元)
题意:求高斯消元中自由元的个数,输出1<<ans; #include<cstdio> #include<cstdlib> #include<cstring&g ...