PHPCMS V9爆出多个SQL注入漏洞

phpcms 使用sys_auth函数加解密cookie信息,系统中多个文件直接从cookie中获取变量进入程序流程。 由于sys_auth函数在设计和使用过程中存在缺陷,导致注册用户可以伪造cookie数据,触发SQL注入等多个二次攻击。 看sys_auth函数代码 //libs/functions/global.func.php function sys_auth($txt, $operation = 'ENCODE', $key = '') { $key = $key ? $key : pc_base::load_config('system', 'auth_key'); $txt = $operation == 'ENCODE' ? (string)$txt : base64_decode($txt); $len = strlen($key); $code = ''; for($i=0; $i<strlen($txt); $i++){ $k = $i % $len; $code .= $txt[$i] ^ $key[$k]; } $code = $operation == 'DECODE' ? $code : base64_encode($code); return $code; } 通过于$auth_key进行^运算达到加密的目的,$auth_key是系统安装时随机生成的一个长度为20的字符串。 要伪造cookie变量需要知道$auth_key,我们看看如何来获取。 注册用户登录过程 //phpcms/modules/member/index.php public function login() { …… param::set_cookie('auth', $phpcms_auth, $cookietime); param::set_cookie('_userid', $userid, $cookietime); param::set_cookie('_username', $username, $cookietime); param::set_cookie('_groupid', $groupid, $cookietime); param::set_cookie('_nickname', $nickname, $cookietime); param::set_cookie('cookietime', $_cookietime, $cookietime); …… //phpcms/libs/classes/param.class.php public static function set_cookie($var, $value = '', $time = 0) { $time = $time > 0 ? $time : ($value == '' ? SYS_TIME - 3600 : 0); $s = $_SERVER['SERVER_PORT'] == '443' ? 1 : 0; $var = pc_base::load_config('system','cookie_pre').$var; $_COOKIE[$var] = $value; if (is_array($value)) { foreach($value as $k=>$v) { setcookie($var.'['.$k.']', sys_auth($v, 'ENCODE'), $time, pc_base::load_config('system','cookie_path'), pc_base::load_config('system','cookie_domain'), $s); } } else { setcookie($var, sys_auth($value, 'ENCODE'), $time, pc_base::load_config('system','cookie_path'), pc_base::load_config('system','cookie_domain'), $s); } } 明显可以看出,登陆的时候 $username通过sys_auth函数处理后赋值到了cookie。 好了,下面去注册一个用户名长度为19字符的(最长为20,但是需要有一个\0,所以实际上只能是19)用户。 登陆系统后获取cookie里面对应的值,就可以逆向推算出$auth_key的前19位。 逆推函数如下 function antisys_auth() { $txt = base64_decode(urldecode("你cookie里面的值")); $name = "你的用户名"; $len = 20; $key = ''; for($i=0; $i<strlen($txt); $i++){ $k = $i % $len; $key .= $txt[$i] ^ $name[$k]; } return $key; } $auth_key剩下的最后一位如何获取? 这个就很简单了,找到任意一个使用get_cookie()获取变量然后进入sql流程的地方, 利用phpcms的sql错误机制,可以很容易的判断暴力破解出最后一位。 public function halt($message = '', $sql = '') { $this->errormsg = "<b>MySQL Query : </b> $sql <br /><b> MySQL Error : </b>".$this->error()." <br /> <b>MySQL Errno : </b>".$this->errno()." <br /><b> Message : </b> $message <br /><a href='http://xxxx/?errno=".$this->errno()."&msg=".urlencode($this->error())."' target='_blank' style='color:red'>Need Help?</a>"; $msg = $this->errormsg; echo '<div style="font-size:12px;text-align:left; border:1px solid #9cc9e0; padding:1px 4px;color:#000000;font-family:Arial, Helvetica,sans-serif;"><span>'.$msg.'</span></div>'; exit; }

转载于:https://www.cnblogs.com/mrjim/archive/2011/09/13/4475268.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql 中N'的作用

加上 N 代表存入数据库时以 Unicode 格式存储。Nstring 表示string是个Unicode字符串Unicode 字符串的格式与普通字符串相似&#xff0c;但它前面有一个 N 标识符&#xff08;N 代表 SQL-92 标准中的国际语言 (National Language)&#xff09;。N 前缀必须是大写字母。例如&am…

主流虚拟化产品对比列表01

虚拟化概述厂商MicrosoftVmwareCitrix产品Hyper-V 2012vSphere 5.1XenServer 6.1版本数据中心版企业增强版白金版评估概述Windows Server 2012System Center 2012 &#xff08;数据中心版&#xff09;vSphere 5.1XenServer 6.1成熟度/ 产品上市时间WS2012-2012.9 SC2012sp1-201…

[其它] - 为什么中国的程序员技术偏低

来源&#xff1a;http://www.cnbeta.com/articles/155374.htm 作者:飘飘渺渺首先来说一个高级程序员并非靠自己读几本书写几万行代码就能练就的&#xff0c;我更关注于低层的环境&#xff0c;也就是程序员实实在在的工作环境。因为程序员的高低还得从实际的工作来衡量&#xff…

SQL PROCEDURE和 FUNCTION的区别

FUNCTION 默认是有一个返回值&#xff08;只有一个&#xff0c;当然可以不返回&#xff09;&#xff0c;PROCEDURE通过传入out 参数来传递需要返回的数值&#xff0c;可以多个FUNCTION 可在select语句里直接调用&#xff08;如果FUNCTION 里update,insert,delete 则不行&#x…

数据库中的表还是一定要建索引

上次说到在表中&#xff0c;加了触发器以后&#xff0c;会产生死锁的问题。后来又仔细再研究了一下&#xff0c;发现是没有对where条件面用到的字段建索引引起的&#xff0c;甚至连主键都没有定义。 专门测试了一下没有建索引&#xff0c;每分钟处理3百条&#xff0c;对where条…

mysql 重置root密码

myini文件增加命令 &#xff08;1&#xff09;在my.ini文件的[mysqld]块下增加“skip_grant_tables”&#xff0c;然后重启mysql服务&#xff0c;再以管理员权限打开cmd执行一些列命令重置密码 mysql> use mysql;Database changedmysql> update user set authentication_…

[读书笔记]TCP/IP详解V1读书笔记-3

IP&#xff1a; 无连接&#xff1a;数据报到达没有先后顺序&#xff0c;处理先后发送的数据报之间没有关联。 不可靠&#xff1a;数据报丢失后没有处理&#xff0c;简单向源地址发送 ----------------------------- ---------------------------------- 网络字节序&#xff1a;…

CAL(1)

为什么80%的码农都做不了架构师&#xff1f;>>> CAL(1) BSD General Commands Manual CAL(1) NAME cal - displays a calendar SYNOPSIS cal [-smjy13] [[[day] month] year] DESCRIPTION Cal displays a simple calendar. If arguments …

VS2008制作安装包

图文详细地址&#xff1a;http://www.itwis.com/html/net/kaifagongju/20090218/3387.html VS2008制作安装包 安装与部署 2010-03-13 14:42:21 阅读1610 评论0 字号&#xff1a;大中小 订阅 VS2008制作安装包 一&#xff1a;建立项目 打开VS,点击新建项目,选择:其他项目类型-&…

vbox虚拟机配置Redhat6.4本地yum源

作为一个新手&#xff0c;配置这个yum源配了4天&#xff0c;遇到了各种问题&#xff0c;也按照网络上面一些方法在163上面下载CentOS6的yum源来替换Redhat本地的yum源&#xff0c;但是配置过程中&#xff0c;出现很多错误&#xff0c;发现直接在本地配置yum源会更便捷一点&…

美化系统

作为一个有强迫症都人&#xff0c;对系统都美化一定要做的&#xff01;优雅都环境总给人带来美好都心情&#xff01; 今天参照http://www.linuxidc.com/提供都方法着实把Ubuntu美化了了一下&#xff0c;尤其是shell终端&#xff0c;非常合适俺都口味&#xff01; 上图 转载于:h…

毕业两年返校随想

就西安这个伤心之地我竟然可以连续呆上一周&#xff0c;真是难得。不过还好&#xff0c;有书看&#xff0c;在接连三天且比以前上研时还高的频率出现在母校的自习室后&#xff0c;我发现&#xff0c;原来我是如此地喜欢大学校园。 我全无要抢占“道德制高点”的意思&#xff0…

SQL 在表中建立索引的作用

转贴&#xff1a;http://wenwen.soso.com/z/q120134455.htm 索引的作用就在于&#xff0c;为某个字段建立了索引之后&#xff0c;查询这个字段里面的数据的时候&#xff0c;效率更高&#xff0c;也就是快&#xff0c;比如create index abc on stu(age);为stu表的age字段建立了…

vue 相关技术文章集锦

不断更新&#xff0c;如果看到好的文章~~~ 总结篇 vue组件间通信六种方式&#xff08;完整版&#xff09; - 原作者&#xff1a;简书-浪里行舟原理/源码篇 Vue.js 技术揭秘Vue技术内幕实战/经验篇 Vue相关开源项目库汇总Vue 项目里戳中你痛点的问题及解决办法&#xff08;更新&…

创建单IP的***网络

一、架构1.1现有网络现有网络架构如图一所示&#xff0c;其中服务器网段为192.168.0.x使用专门线路接入internet&#xff0c;192.168.88.x为网络设备网段&#xff0c;其它都是办公网段使用另外的线路接入internet。图一、现有网络结构图1.2 ***架构在图一所示的网络架构中搭建一…

GridView调用setAdapter()函数时发生错误

程序在执行gridview.setAdapter(adapter);时发生错误&#xff0c;其中gridview为GridView类型&#xff0c;adapter是继承了BaseAdap类的一个对象。错误信息如下&#xff1a;Finalizing a Cursor that has not been deactivated or closed. database /data/data/com.cubeit.wor…

sql中 N’ 的作用

网站&#xff1a;http://zhidao.baidu.com/question/8176287.html 加上 N 代表存入数据库时以 Unicode 格式存储。Nstring 表示string是个Unicode字符串Unicode 字符串的格式与普通字符串相似&#xff0c;但它前面有一个 N 标识符&#xff08;N 代表 SQL-92 标准中的国际语言…

学习方向、当前要做的事

学习方向 算法&#xff1a; 1、字符串匹配的三个算法&#xff08;KMP字典树AC自动机&#xff09;(100%) 2、KNN邻近分类算法 3、聚类算法 4、决策树算法 5、后缀数组 6、diff算法原理 前端&#xff1a; webpackloader、插件开发 typescript cdn劫持安全和密码安全 (100%) 要做的…

为Java应用程序加上退出事件处理(ShutdownHook)

ShutdownHook 是这样一个概念&#xff1a;向虚拟机注册一个线程&#xff0c;当程序退出(CtrlC)时虚拟机会启动这个线程,我们可以在这个线程的run()中做一些清除的工作,如:释放数据库连接,关闭文件等. 注册: Runtime.getRuntime().addShutdownHook(Thread t); 注销: Runtime.get…

烂泥:利用Diskgen找回分区破坏前的资料

本文首发于烂泥行天下&#xff0c;由秀依林枫提供友情赞助。呵呵&#xff0c;好久没有写过博客了。看看时间上一篇博客应该是在一个月之前发布的&#xff0c;最近事情比较多大部分时间都是在出差。自己对技术也没有什么研究的&#xff0c;就说说这次项目中碰到的一个有关数据恢…